Esp8266 Datenübertragung zu Webserver?
Servus, ich will mit dem ESP8266 messdaten an eine datenbank übertragen. Dafür nutzte ich dieses PHP script <?php // Datenbankverbindung $servername = ""; $username = ""; $password = ""; $dbname = ""; // Verbindung zur Datenbank herstellen $conn = new mysqli($servername, $username, $password, $dbname); // Verbindung überprüfen if ($conn->connect_error) { die("Verbindung fehlgeschlagen: " . $conn->connect_error); } // POST-Daten empfangen $startTime = $_POST['startTime']; $elapsedTime = $_POST['elapsedTime']; // SQL-Abfrage zur Einfügung der Daten $sql = "INSERT INTO deine_tabelle (start_time, elapsed_time) VALUES ('$startTime', '$elapsedTime')"; if ($conn->query($sql) === TRUE) { echo "Daten erfolgreich gespeichert"; } else { echo "Fehler: " . $sql . "<br>" . $conn->error; } // Verbindung schließen $conn->close(); ?> Und das ist mein Esp code: #include <SPI.h> #include <MFRC522.h> #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #define SS_PIN D4 // SDA Pin (Slave Select) #define RST_PIN D3 // Reset Pin #define BUTTON_PIN D2 // Pin für den Button const char* ssid = ""; const char* password = ""; const char* serverName = ""; // Pfad zum PHP-Skript MFRC522 mfrc522(SS_PIN, RST_PIN); // RFID-Instanz unsigned long startTime; bool timerActive = false; // Gibt an, ob der Timer läuft bool buttonPressed = false; // Gibt an, ob der Button gedrückt wurde bool waitingForCard = false; // Gibt an, ob wir auf eine Karte warten bool cardDetectedOnce = false; // Gibt an, ob die Karte einmal erkannt wurde WiFiClient client; // WiFiClient-Instanz void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); // Button als Eingang mit internem Pullup-Widerstand Serial.begin(115200); // Initialisiere die serielle Kommunikation SPI.begin(); // Initialisiere den SPI-Bus mfrc522.PCD_Init(); // Initialisiere den RFID-Leser // WLAN verbinden WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Verbinden mit WiFi..."); } Serial.println("Mit WiFi verbunden!"); } void loop() { // Überprüfen, ob der Button gedrückt wurde if (digitalRead(BUTTON_PIN) == LOW && !buttonPressed) { Serial.println("Button gedrückt. Warten auf Karte..."); buttonPressed = true; // Verhindert mehrfaches Auslösen waitingForCard = true; // Aktiviert die Kartenüberprüfung cardDetectedOnce = false; // Zurücksetzen der Karteerkennung } // Überprüfen, ob wir auf eine Karte warten if (waitingForCard) { // Überprüfen, ob eine Karte in der Nähe ist if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { if (!timerActive) { // Timer starten, wenn er nicht bereits läuft Serial.println("Karte erkannt! Timer startet."); startTime = millis(); // Startzeit speichern timerActive = true; // Timer aktiv cardDetectedOnce = true; // Karte einmal erkannt } else if (cardDetectedOnce) { // Timer stoppen, wenn die Karte erneut erkannt wird unsigned long elapsedTime = millis() - startTime; Serial.print("Karte erneut erkannt! Timer gestoppt. Zeit: "); Serial.print(elapsedTime); Serial.println(" ms"); // Daten an Server senden sendToServer(startTime, elapsedTime); timerActive = false; // Timer stoppen buttonPressed = false; // Erlaubt erneutes Drücken des Buttons waitingForCard = false; // Beendet die Kartenüberprüfung } // Karte gelesen, Lesevorgang stoppen mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } } } // Funktion zum Senden der Daten an den Server void sendToServer(unsigned long startTime, unsigned long elapsedTime) { if (WiFi.status() == WL_CONNECTED) { // Überprüfen, ob wir mit dem WLAN verbunden sind HTTPClient http; // URL festlegen mit WiFiClient http.begin(client, serverName); // HTTP-POST-Daten http.addHeader("Content-Type", "application/x-www-form-urlencoded"); String postData = "startTime=" + String(startTime) + "&elapsedTime=" + String(elapsedTime); Serial.print("POST-Daten: "); Serial.println(postData); // HTTP-POST-Anfrage senden int httpResponseCode = http.POST(postData); if (httpResponseCode > 0) { String response = http.getString(); // Antwort vom Server lesen Serial.println("Antwort vom Server:"); Serial.println(response); // Antwort anzeigen } else { Serial.print("Fehler bei der HTTP-Anfrage: "); Serial.println(httpResponseCode); Serial.println("Möglicherweise ein Netzwerkproblem oder Server-Fehler."); } // Verbindung schließen http.end(); } else { Serial.println("Nicht mit WiFi verbunden"); } } Leider erhalte ich jedesmal folgende Fehlermeldung Fehler bei HTTP-Anfrage :-1