Hallo Zusammen,
habe jetzt 10 Tage lang abends mehrere Stunden rumprobiert und komme
nicht auf meinen Fehler.
Problem:
Ich möchte mit einem ESP8266 NodeMCU Modul V2 Sensorwerte in eine
Datenbank auf meiner NAS speichern.
Die Datenbank ist eingerichtet, dann gibt es dazu eine php-Datei, die
die gesendeten POST-Werte in die DB schreibt. Das ganze liegt hier:
"192.168.178.36/demo" (hier liegt die eintragen5.php und zum Test eine
formular.html mit der über 2 Formularfelder die beiden gleich benamten
POST Werte an eintragen5.php übergeben werden können). Damit klappt der
Eintrag in die DB auch einwandfrei. Das ganze läuft über http und nicht
über https.
Kriege auch über den Browser problemlos bei Eingabe des Pfads
"192.168.178.36/demo" die dort ebenfalls liegende "index.html"
angezeigt.
Das Programm auf dem ESP8266 ist wie folgt programmiert (Code kopiert
und angepasst, meine wLan Daten natürlich anonymisiert):
Übergebe auch erstmal nur statische Werte. Wenn das klappt, später dann
Sensorwerte.
1 | /*
|
2 | * HTTP Client POST Request
|
3 | * Copyright (c) 2018, circuits4you.com
|
4 | * All rights reserved.
|
5 | * https://circuits4you.com
|
6 | * Connects to WiFi HotSpot. */
|
7 |
|
8 | #include <ESP8266WiFi.h>
|
9 | #include <WiFiClient.h>
|
10 | #include <ESP8266WebServer.h>
|
11 | #include <ESP8266HTTPClient.h>
|
12 |
|
13 | /* Set these to your desired credentials. */
|
14 | const char *ssid = "meinWlan"; //ENTER YOUR WIFI SETTINGS
|
15 | const char *password = "meinPasswort";
|
16 |
|
17 | //Web/Server address to read/write from
|
18 | const char *host = "192.168.178.36"; //https://circuits4you.com website or IP address of server
|
19 |
|
20 | //=======================================================================
|
21 | // Power on setup
|
22 | //=======================================================================
|
23 |
|
24 | void setup() {
|
25 | delay(1000);
|
26 | Serial.begin(115200);
|
27 | WiFi.mode(WIFI_OFF); //Prevents reconnection issue (taking too long to connect)
|
28 | delay(1000);
|
29 | WiFi.mode(WIFI_STA); //This line hides the viewing of ESP as wifi hotspot
|
30 |
|
31 | WiFi.begin(ssid, password); //Connect to your WiFi router
|
32 | Serial.println("");
|
33 |
|
34 | Serial.print("Connecting");
|
35 | // Wait for connection
|
36 | while (WiFi.status() != WL_CONNECTED) {
|
37 | delay(500);
|
38 | Serial.print(".");
|
39 | }
|
40 |
|
41 | //If connection successful show IP address in serial monitor
|
42 | Serial.println("");
|
43 | Serial.print("Connected to ");
|
44 | Serial.println(ssid);
|
45 | Serial.print("IP address: ");
|
46 | Serial.println(WiFi.localIP()); //IP address assigned to your ESP
|
47 | }
|
48 |
|
49 | //Main Loop
|
50 | void loop() {
|
51 | HTTPClient http; //Declare object of class HTTPClient
|
52 |
|
53 | String postData;
|
54 | String sensor_id = "124";
|
55 | String messwert = "41";
|
56 |
|
57 | //Post Data
|
58 | postData = "sensor_id=" + sensor_id + "&messwert=" + messwert ;
|
59 |
|
60 | http.begin("192.168.178.36/demo/eintragen5.php"); //Specify request destination
|
61 |
|
62 | http.addHeader("Content-Type", "application/x-www-form-urlencoded"); //Specify content-type header
|
63 |
|
64 | //Ausgabe zur Prüfung
|
65 | Serial.println(postData);
|
66 |
|
67 |
|
68 | int httpCode = http.POST(postData); //Send the request
|
69 | String payload = http.getString(); //Get the response payload
|
70 |
|
71 | Serial.println(httpCode); //Print HTTP return code
|
72 | Serial.println(payload); //Print request response payload
|
73 |
|
74 | http.end(); //Close connection
|
75 |
|
76 | delay(2000); //Post Data at every 2 seconds
|
77 | }
|
Ausgabe Serieller Monitor:
#############################
Connecting.....
Connected to meinWlan
sensor_id=124&messwert=41
-1
sensor_id=124&messwert=41
-1
#############################
PHP Skript "eintragen5.php"
1 | <?php
|
2 | //Creates new record as per request
|
3 | //Connect to database
|
4 | $servername = "192.168.178.36:3307";
|
5 | $username = "raspberry";
|
6 | $password = "meinPasswort";
|
7 | $dbname = "raspberry";
|
8 |
|
9 | // Create connection
|
10 | $conn = new mysqli($servername, $username, $password, $dbname);
|
11 | // Check connection
|
12 | if ($conn->connect_error) {
|
13 | die("Database Connection failed: " . $conn->connect_error);
|
14 | }
|
15 |
|
16 | if(!empty($_POST['sensor_id']) && !empty($_POST['messwert']))
|
17 | {
|
18 | $sensor_id = $_POST['sensor_id'];
|
19 | $messwert = $_POST['messwert'];
|
20 |
|
21 | $sql = "INSERT INTO sensordaten (messwert, sensor_id)
|
22 |
|
23 | VALUES ('".$messwert."', '".$sensor_id."')";
|
24 |
|
25 | if ($conn->query($sql) === TRUE) {
|
26 | echo "OK" . "<br><br>";
|
27 | } else {
|
28 | echo "Error: " . $sql . "<br>" . $conn->error;
|
29 | }
|
30 | }
|
31 |
|
32 | $conn->close();
|
33 |
|
34 | echo "Sensor-ID: " . $_POST['sensor_id'] . "<br><br>" . "Messwert: " . $_POST['messwert'];
|
35 |
|
36 | ?>
|
Ich bin mir sicher, dass es ein saublöder Fehler meinerseits ist, den
ich einfach nicht sehe... Würde mich freuen, wenn einer von Euch helfen
kann.
Besten Dank im voraus!