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

SQL, Webseite, Arduino, Code, Datenbank, MySQL, PHP, Programmiersprache, Webentwicklung, C (Programmiersprache), Arduino Uno, Arduino IDE
Wie muss ein Pingscript zu Fehlererkennung unter Linux aussehen, das bei Systemstart gestartet wird und ein Log schreibt?

Moin an alle,

ich habe da so ein kleines Projekt vor:
Da unser DSL ab und an aussetzt, da wir - so meine Vermutung - zu wenig Netzwerktraffic erzeugen (es scheint sich zumindest teils zu stabilisieren, wenn man dauerhaft sekündich Pings an Google sendet) und diese DSL-Fehler - so zumindest meine Vermutung - dann auf Dauer auch teils die Fritzbox zum Durchdrehen bringen, würde ich gerne zwei Raspberry Pis der ersten Generation mit Ubuntu bespielen und auf jedem ein Skript mit folgenden Anforderungen laufen lassen:

  • Startet automatisch bei Systemstart.
  • Pingt jede Sekunde eine IP-Adresse oder URL an (über eine Variable des Skripts festlegbar).
  • Dokumentierten jeden Pingfehler (Paket verloren, nicht erreichbar, etc.) in eine ".txt"-Datei.
  • Speichert die ".txt"-Datei mindestens einmal täglich zu einer bestimmten End-Uhrzeit, zu der auch das Skript pausiert wird (Zeit über eine Variable im 24h-Format festlegbar oder via Ubuntu regelbar?).
  • Beginnt eine neue ".txt"-Datei täglich zu einer bestimmten Anfangs-Uhrzeit, zu der auch das Skript neu gestartet wird (Zeit über eine Variable im 24h-Format festlegbar oder via Ubuntu regelbar?).
  • Name der ".txt"-Datei bzw. deren Namensschema am besten per Variable festlegbar.

Der eine Raspberry Pi soll an der Fritzbox direkt angeschlossen werden und die Fritzbox und "Google.de" anpingen (je eine eigene Instanz des Skripts mit je eigenen ".txt"-Logs).
Der andere Raspberry Pi soll am entferntesten Punkt im Netzwerk angeschlossen werden und "Google.de" und den ersten Raspberry Pi anpingen (je eine eigene Instanz des Skripts mit je eigenen ".txt"-Logs).

Ich erhoffe mir damit eine Übersicht der Ausfälle der DSL-Verbindung und der Spinnereinen der Fritzbox.
Die Netzwerkaussetzer sollen dann an den Internetanbieter gesendet werden. Der Rest dient als Nachweis ob die DSL-Aussetzer und die Aussetzer der Fritzbox wirklich zusammen hängen, wie ich das vermute.

Die Fritzbox mit samt Switches, Accesspoints, etc. lasse ich zudem ab sofort über Wochen-Zeitschaltuhren einmal täglch komplett rebooten, in der Hoffnung, dass das ein wenig Abhilfe schafft.

Ich hoffe Ihr könnt mir helfen, da ich leider keine Ahnung habe, wie ich das anstellen soll.
Ich habe zwar das hier für Windows gefunden, doch der Blogautor konnte mir bei Linux auch nicht weiterhelfen:
https://www.andysblog.de/windows-dauerping-mit-protokollierung-von-fehlern

Schonmal danke an alle Tipps und Hilfestellungen!

Server, Internet, WLAN, Internetverbindung, Programm, Netzwerk, IT, programmieren, DSL, FRITZ!Box, Informatik, IP-Adresse, LAN, Logik, Netzwerktechnik, Netzwerkverbindung, Programmiersprache, Router, skript, WLAN-Router, Ping, Repeater, LAN-Kabel, WLAN-Repeater, Raspberry Pi, Raspberry, Pinger
Programmieren in C: Probleme mit der IDE?

Hallo! Im Studienvorbereitungskurs habe ich C gelernt. Wir haben die IDE "Devcpp" genutzt. An der Uni hat auch alles wunderbar geklappt, aber Zuhause bleibt das Programm nicht stehen. Ein "Hello World" z.B. kann ich nicht sehen, weil es die Konsole schließt, sobald das Programm durch ist.

Da das Programm bei mir auch nicht schön dargestellt ist (mit manchen Programmen hat mein Rechner irgendwie ein Problem, dass irgendwas mit der Auflösung nicht stimmt und das Programm irgendwie unscharf ist - aber anderes Thema), habe ich mir gedacht, die IDE zu wechseln und ein paar auszuprobieren.

Ich würde übrigens gerne gute Tipps annehmen. Ich brauche an sich nicht viel, weil ich es erst gelernt habe. Ein Programm, was mir eine Datei erstellt, ein bisschen farbig unterstützt und vielleicht auch bei der Eingabe (automatische zweite Klammer oder so), ein Debugger wäre auch ganz nett, in Python habe ich gern mit dem gearbeitet.. Oh, und ich möchte lokal arbeiten können..

Ich habe dann aber CodeLite und CodeBlocks ausprobiert und das hat irgendwie gar nicht funktioniert.. Ich bekam zwei Mal die Fehlermeldung, dass ich keinen Compiler hätte. In CodeLite kann ich gar nicht erst das Programm ausführen, welches ich geschrieben habe, in CodeBlocks klappt es, aber ich bekomme eine Fehlermeldung ganz am Anfang, dass der Complier fehlt und der Debugger ist ausgegraut.

Ich habe mich damit überhaupt nicht beschäftigt, sondern wollte einfach nur ein paar simple Programme rein aus Spaß ander Freude programmieren, ich bin ein wenig verunsichert und wirklich schlau bin ich aus dem Internet nicht geworden. Ich habe nur die Programmierkenntnisse, weil es mir Spaß gemacht hat.. Mehr aber auch nicht... :I

Kann mir jemand weiterhelfen, was ich tun muss, damit alles funktioniert? ^^"

Computer, App, IT, programmieren, IDE, Code, Programmiersprache, Softwareentwicklung, Webentwicklung, C (Programmiersprache), Entwicklungsumgebung

Meistgelesene Beiträge zum Thema Programmiersprache