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