Hallo zusammen,
ich stehe seit Tagen vor dem Problem, dass ich analoge Thermostate am Arduino Uno abgreife und diese via ESP8266-01S per WLAN an einen MySQL Server senden möchte.
Ja man könnte ein Wemos oder ähnliches benutzen. Das ist aber nicht meine intention, da ich wissen will wie es auf diesem Weg funktioniert.
Es gibt unendlich viele Anleitungen im Netz aber so wirklich verstehe ich keines. Ich habe daher ein paar Fragen bzw. auch Anfängerfragen.
1.Frage: Ist das allgemein möglich oder bin ich auf dem Holzweg?
Ich habe bereits Anleitung mit Json oder SerialSoftware ausprobiert aber nix funktioniert so richtig. Vermute mal liegt an meinem Laienwissen.
Das Problem ist der eine schließt den ESP anders an als der nächste usw... Mal RX auf TX und umgekehrt, mal TX auf TX, Mal auf 2 und 3 am Arduino, mal mit Widerstand zwischen RX mal ohne....
So langsam bin ich ratlos, da selbst ein meiner Meinung nach eine Sehr gute Anleitung für mich auch nicht funktioniert.
2.Frage: Hat jemand einen Rat wo ich ansetzen kann?
3.Frage: Hat jemand sowas am laufen?
Du hast erst mal 2 generelle Wege, um Daten in eine MySQL-DB zu bringen:
Den direkten Weg (der dürfte über AT-Kommandos sehr schwer sein) oder über ein PHP (oder sonst eine Sprache) Script auf dem Webserver, der die Daten dann in die DB einträgt.
Da ich mir die AT-Kommandos und den ESP8266-01 nie angetan habe, kann ich nur für den den D1 mini sprechen. Mit dem laufen beide Wege bei direkter Programmierung des ESP8266 problemlos.
Du kannst den ESP8266-01 auch direkt programmieren (dabei geht die AT-Firmware flöten) und ihn z.B. per I2C an den UNO anbinden. Für den NodeMCU habe ich das hier mal gemacht.
Das ist schonmal ein guter Hinweis Tommy, Danke. Wenn du von Webserver sprichst meinst du den wo masql läuft oder den Esp8266 als Webserver einrichten?
Ich weiß nicht ob du mir vielleicht die nächste Frage auch beantworten kannst
Alle/Viele benutzen immer den NodeMCU. Was ist der Vorteil ausser mehr Pins? Ich kann doch den darauf gelöteten Esp8266 auch so nutzen oder nicht? Spare ich mir quasi das Drama mit der Spannungsversorgung und der Widerständen am RX und TX pin wie bei einem ESP8266-01s?
Den NodeMCU hätte ich dir jetzt auch empfohlen, oder einen Wemos D1 mini.
Der Vorteil ist nicht nur die Anzahl der Pins, sondern auch die einfachere Programmierung. Der hat einen USB-Serial-Chip drau und kann damit direkt über USB programmiert werden.
Eine einfache Verbindung zu deinen Arduinos ist dann per Serieller Schnittstelle darüber kannst du dann die Daten übertragen. Und für die serielle brauchst du min. 1 Widerstand, da der Arduino mit 5V an den Pins arbeitet, der ESP8266 mit 3,3Volt.
Du hast am NodeMCU und am WEMOS (LOLIN) D1 mini einen direkten USB-Anschluss und
kannst sie damitdirekt in der IDE programmieren und über Serial debuggen.
Ich meine einen Webserver, der PHP kann (also kein ESP8266) und der auf die MySQL-DB zugreifen kann.
Das muss nicht die gleiche Maschine sein, auf der die DB läuft, kann es aber.
Bei mir ist das ein Webserver beim Provider und die DB auch. Das kann aber auch alles auf einem lokalen PC, einem NAS oder einem RASPI laufen.
Der Esp8266 läuft ja mit der Baudrate 115200 und Arduino mit 9600. Ist das ein Problem um den Seriellen Monitor mitlaufen zu lassen um ALLE Serial.prints zu sehen?
Wenn ich das programmiere wie in diversen Beispielen sehe ich immer nur die, die ich vom Uno aus sende. Ich weiß nie was und in welchem Format auf dem ESP ankommt. So ist es schwer was weiterzuleiten.
bourton88:
Der Esp8266 läuft ja mit der Baudrate 115200 und Arduino mit 9600. Ist das ein Problem um den Seriellen Monitor mitlaufen zu lassen um ALLE Serial.prints zu sehen?
Wenn ich das programmiere wie in diversen Beispielen sehe ich immer nur die, die ich vom Uno aus sende. Ich weiß nie was und in welchem Format auf dem ESP ankommt. So ist es schwer was weiterzuleiten.
Verstehe ich nicht.
Du musst schon beide Seiten der seriellen gleich schnell laufen lassen, sonst geht das nicht.
Das mit dem Widerstand sehe ich eine Fehlerquelle.
Auf dem Arduino UNO bei der Hardware Seriellen Schnittstelle zwischen dem ATmega328 und ATmega16U2 sind zwei 1kOhm Widerstände.
Wenn Du einen 3,3V TX-Ausgang mit einem 1kOhm am RX des ATmega328 anschließt und dieser mit einem 1kOhm Widerstand an den Ausgang des ATmega16U2 angeschlossen ist, hast Du einen Spannungsteiler der die Spannung massiv reduziert sodaß die Pegel nicht erkannt werden.
Du kannst Anstatt der Hardwarschnittstelle auf dem UNO eine Softwareschnittstelle verwenden. Das funktioniert bei so hohen Baudraten nicht gut. Du könntest aber einen Leonardo oder MEGA 2560 mit freien Hardwareschnittstellen verwenden.
Grüße Uwe
uwefed:
Du kannst Anstatt der Hardwarschnittstelle auf dem UNO eine Softwareschnittstelle verwenden. Das funktioniert bei so hohen Baudraten nicht gut. Du könntest aber einen Leonardo oder MEGA 2560 mit freien Hardwareschnittstellen verwenden.
Grüße Uwe
Funktioniert nicht gut heißt keine Datenübertragung oder Verbindungsabbrüche etc.?
Würdest du also einen Einsatz mit einem Esp8266 und einem Uno nicht empfehlen?
OK....das sind natürlich Dinge, die man bei solchen Projekten Wissen sollte/muss.
Eine serielle Schnittstelle besteht immer aus "RX und TX". der ESP8266-01 hat diese extra rausgeführt und kann diese zur seriellen Übertragung nutzen.
Der Uno hat diese auch rausgeführt, sollte aber möglichst nicht für eine serielle Datenübertragung zu externen Modulen genutzt werden, da diese nach dem Flashen für den seriellen Monitor zum Debuggen genutzt wird. Und das ist kein Bus, kann also nicht gleichzeitig für den seriellen Monitor und für den ESP8266 genutzt werden.
Also benötigst du die Library "SoftwareSerial.h" für eine weitere serielee Schnittstelle zur Datenübertragung an den ESP8266. Diese nutzt dann digitale Pins deiner Wahl, außer D0 und D1 (RX und TX), nennen sich dann aber ebenso RX und TX, je nach deiner Definition.