Addendum2 zum Tutorial – Speicherung von MySQL DB Werten mit ESP8266
Nachdem ich mich in meinen letzten Blogs intensiv mit dem ESP8266 auseinandergesetzt habe, steht logischerweise eine Erweiterung meines Tutorials zur Speicherung von Messwerten in eine MySQL DB unter Verwendung des ESP8266 an. Das Programm wurde weitestgehend analog dem bisherigen Programm aufgebaut, so dass es relativ einfach zu verstehen sein sollte. Im Programm müssen noch die persönlichen Daten für das WLAN und den Host eingetragen werden.
/* Programm zur Speicherung von Messwerten in einer webbasierten MySQL DB based on standard programs of the ESP8266Wifi library and examples on sparkfun.com */ #include <ESP8266WiFi.h> #define CYCLE 60000 const char* ssid = "hier deine SSID"; const char* password = "und das Passwort des WLANs"; const char* host = "hier deinen Host eintragen"; unsigned long value = 0; unsigned int lastcall = CYCLE; int conn_time; void setup() { Serial.begin(115200); delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); conn_time++; if (conn_time > 20) { break; } } if (WiFi.status() == WL_CONNECTED) { Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } else { Serial.println(""); Serial.println("no WiFi connection"); ESP.deepSleep(100000); Serial.println("gone to sleep"); } } void loop() { while (millis() - lastcall < CYCLE) { delay(1); } lastcall = millis(); ++value; Serial.print("connecting to "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } // We now create a URI for the request String url = "/w2mysql.php"; url += "?A0="; url += millis(); url += "&A1="; url += value; Serial.print("Requesting URL: "); Serial.println(url); // This will send the request to the server client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); delay(1000); // Read all the lines of the reply from server and print them to Serial while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); } Serial.println(); Serial.println("closing connection"); }
Veröffentlicht am 24. Oktober 2015, in Arduino, ESP8266, MySQL, Tutorial, WiFi. Setze ein Lesezeichen auf den Permalink. 22 Kommentare.
Danke erstmal für die tollen tutorials nur hab ich ne kleine frage: sind in dem sketch die A0 und die A1 die eingänge an dem esp modul selber ? das ganze wird doch standalone betrieben oder ?
A0 und A1 sind in diesem Fall lediglich die Übergabevariablen an die php-Webseite und wie in den bisherigen Beispielen übernommen worden. Übergeben werden hier als Beispiel der Inhalt von millis() und eine Zählvariable „value“. Der ESP8266-01 stellt leider keinen Analogeingang zur Verfügung. Man kann aber sehr einfach Sensoren per i2c oder Onewire anschließen.
Hallo
Ich habe eine Wetterstation anhand deines Codes nachgebaut, soweit funktioniert alles
Noch ein paar optimierungen auf meiner HP nötig……..
Besten Dank für Deinen Code !!!
Ich habe noch eine Frage ich würde gerne noch einen Externen DHT 22 Sensor anschliessen ev. mit einem PRO mini und mit 433MHZ Funk
leider finde ich keine library für den ESP um die Daten zu empfangen
Hast Du da ev einen Tipp ?
Besten Dank
Markus
Hallo Markus,
leider habe ich keinen erprobten Ansatz dafür. Hier wird zumindest über funktionierende Libs für 433MHz geschrieben.
Hier eine Lib für RFM69.
Wenn du eine Lösung hast, schreib es hier rein.
Gruß
Reinhard
Hallo
Soweit habe ich es geschafft mit dem ESP Daten via 433 mhz von einem Pro mini zu empfangen
Wo muss ich nun den Code integrieren, dass der ESP immer Daten vom pro mini empfangen kann aber nur alle 15 min an den Webserver sendet ?
Gruss MABA
Anbei mein Empfangscode:
anbei noch der kompl Code um die Daten zu empfangen läuft auf den esp
Ich sehe gerade, dass du 2x den selben Code eingestellt hast, der Code für den ESP fehlt. Stell den doch bitte noch rein.
Hallo Markus,
muss ich mir mal in Ruhe ansehen.
Prinzipiell musst du 2 Loops bauen. Die äußere loop empfängt ständig Daten und mittelt diese oder speichert die Daten in einen Buffer, die innere Loop wird nur aktiv wenn eine Zeitkondition „alle 15min“ aktiv ist, darin werden dann die Daten abgespeichert.
Vielleicht kannst du es mit dieser Anregung ja selber lösen.
Bis dahin, Reinhard
Code vom ESP „empfang“
Code esp 2
noch etwas chaotisch……….
Hallo Markus,
wo ist jetzt das Problem, wenn es eins gibt ?
Gruß
Reinhard
Hallo Reinhard
Wie am 10.1. kurz beschrieben
Die beiden Codes funktionieren einzeln problemlos.
Nun möchte ich die beiden Codes zusammenführen
Der ESP soll immer auf Signale vom 433 Sender warten und dann alle Werte (vom 433 Sensor (Temp Aussen /Hum Aussen/ Helligkeit Aussen ) und die Messwerte vom ESP (Innenraum) alle 15 Minuten an meine mysql DB übermitteln.
Danke für Deine Unterstützung
Gruss Markus
Als erstes solltest du den Empfangssketch auf dem ESP zum laufen bringen. Ich bin mir allerdings nicht sicher, ob die RC Switch Library auf dem ESP funktioniert.
Ich werde dir keine Lösung anbieten, da musst du schon selber ran gehen.
Hallo
Der Empfangssketch funktioniert auf dem ESP
Markus
Ah, ok, das ist schonmal gut.
Zunächst einige Tips, die mir beim Durchsehen der Sketche auffallen:
im RCSwitch Sketch:
Wenn du eine Variable innerhalb von void setup() definierst, ist sie auch nur dort gültig
und muss entsprechend in void loop() nochmal definiert werden, was du ja auch tust. Wenn eine Variable für das gesamte Programm gültig sein soll, immer außerhalb definieren, also ändern und Definition aus der loop() raus.
Im zweiten Sketch:
Wenn du folgendes statt deiner Konstruktion machst (als Beispiel):
musst du nur einmal messen und das Programm wird kompakter.
Du hast noch viele delay(..) im Programm, in der Zeit wird die RCSwitch Empfangsroutine nicht bedient. Das geht zB mit if (millis() – lasttime > 500) … besser
Zum Vorgehen der Zusammenschaltung beider Programme:
nimm die Initialisierungen aus dem RCSwitch Sketch mit in den 2. Sketch, also
Nimm alles zwischen
if (mySwitch.available()) {
und
mySwitch.resetAvailable();
außerhalb der while (millis() – lastcall < CYCLE) {
Scheife in den zweiten Sketch. Damit hast du die Messungen bereits im zweiten Sketch und kannst sie abspeichern.
Als Tips sollte das reichen, jetzt musst du nochmal ran :-)
Danke schön
Hallo
Ich habe nun meinen Code soweit mal bereinigt.
Aber der sketch Teil ausserhalb der while Schlaufe funktioniert noch nicht
Anbei ein Test sketch: da sollte doch jetzt alle 2 Sekunden „wetter daten einlesen“ auf dem serial monitor erscheinen und jede Minute der Datentransfer stattfinden oder interpretiere ich da was falsch ?
Gruss Markus
Hallo Glaskugelsehen,
vielen Dank für die guten Tutorials.
Kannst du nicht mal ein Tutorial schreiben, in dem du erklärst wie man mit einem Arduino Nano über ein ESP8266-01(originale Firmware) Daten in eine MySQL-Datenbank schreibt?
Hallo Pascal,
leider sehe ich nicht wirklich einen Sinn darin. Die ESP lassen sich so leicht mit der Arduino IDE programmieren, dass die Orginal Firmware aus meiner Sicht keine sinnvolle Berechtigung mehr hat. Selbst in dem Fall, wo ich zB auf dem Nano die Analogeingänge nutzen will, würde ich auf dem ESP eine SW installieren, die nur auf seriell horcht und dann zB einen übertragenen String als HTTP Request rausschickt.
Welche Anwendung siehst du?
Gruß
Reinhard
Hallo Glaskugelsehen,
danke für deine Antwort.
Ich kann dein Argument verstehen, aber ich sehe das zur Zeit so:
Ich möchte mir für die nächste Heizperiode eine Überwachungsstation mit einem Arduino basteln, mit dem ich mehrere Temperaturen mit mehreren HX711 mit PT100 erfassen möchte und dann in eine Datenbank für die Historie und Auswertung speichern möchte. Evtl. sollen dann noch weitere Daten hinzukommen, wie z.B. Brennerstarts, wann die Pumpe angeht und wie lange sie läuft uvm. Das ganze soll evtl über LAN oder über WLAN erfolgen. Daher möchte ich jetzt erst einmal mit einem Nano die ersten Tests machen und den ESP bei der originalen Firmware belassen, damit ich im Nano einfach wählen kann über welchen Weg ich nun die Daten speichern möchte. Des weiteren möchte ich mich zur Zeit erstmal richtig in den „normalen“ Arduino einarbeiten und auch nicht zwei Firmware-Versionen (Arduino und ESP) pflegen. Falls der ESP auch mal kaputt gehen sollte, kann ich einfach einen neuen bestellen und den neuen anschließen und alles läuft wieder, ohne das ich die Firmware neu flashen muss. Falls der Nano auch später zu klein werden sollte, kann ich einfach einen Mega nehmen.
Für Anfänger in der Arduino-Welt wie mich wäre es halt einfacher erstmal bei einer Plattform zu bleiben und einfach nur Zusatzmodule anzuschließen und das bestehende System dadurch simple zu erweitern. Das ist halt auch einfacher als sich mit allen speziellen Besonderheiten des ESP noch auseinander setzten zu müssen und der ESP-01 hat halt nicht genug GPIO Pins für eigene größere Anwendungen.
Ich hoffe ich konnte meine Gedanken dahinter halbwegs plausibel begründen.
Würde mich (und evtl. auch andere Anfänger) sehr freuen, wenn du deshalb solche Tutorials auch in deinen Blog aufnehmen könntest.
Gruß
Pascal
Hallo Pascal,
ich kann dich verstehen und ich kann dich in deinem Plan so vorzugehen nur bestärken. Das ist genau der richtige Weg. Wenn du all die Dinge, die du auf einem Nano oder Mega wie beschrieben realisiert hast, wirst du auch die notwendige Erfahrung erlangen, ein Programm auf dem ESP zu entwickeln. Denn bedenke: egal wie du vorgehst, du musst dich entweder mit den AT Befehlen der Firmware des ESP auseinandersetzen oder du musst lernen den ESP selber zu programmieren. Ich halte letzteres für deutlich zukunftsweisender.
Ich muss dich leider enttäuschen, von mir wird es kein Tutorial zu ESP AT Programmierung geben.
Gruß
Reinhard
Pingback: Tutorial: Website parsen mit dem ESP8266 – Teil 1 | Glaskugelsehen Blog