Hallo ESP User, ich arbeite an meiner Reflow Ofen Steuerung und möchte den ESP8266 einsetzen um Steuerbefehle und Profile zu empfangen und während des Betriebs die Temperaturdaten zu senden. Ein ESP Modul habe ich an einem mbed LPC1347 Controller zum Laufen bekommen, ich verwende eine Lib von iTead. Den Server starte ich und setze ein Timeout von erstmal 10s. Taugt der ESP jetzt um eine Verbindung längerfristig aufrecht zu erhalten? Mein Steuerprogramm wäre der Client und der Ofen der Server. Wenn die Verbindung steht soll der Ofen zyklisch (alle 250 oder 500 ms) seinen Status senden. Muss man dabei vor jedem Senden den Status abfragen oder wie bekommt man mit das eine Verbindung beendet wurde?
Wenn alle Verbindungen zum esp8266 modul beendete wurden. Gibt es die einen string aus. Weis leider aus dem Kopf nicht welchen.
Verwendet von euch jemand "lua" als server?: https://github.com/nodemcu/nodemcu-firmware/blob/master/examples/fragment.lua
... ich glaube der obere Link war der Code für den PC ... hier der Code für den ESP8266: https://github.com/nodemcu/nodemcu-firmware/blob/master/examples/telnet.lua
chris_ schrieb: > Verwendet von euch jemand "lua" als server?: Ich verwende die nodemcu firmware. Ich habe mir ein paar Hilfsfunktionen in lua geschrieben, und die in init.lua auf dem ESP gespeichert. Diese wiederum spreche ich über die serielle von meinem µC an. So sende ich auch Daten ins LAN an jeden beliebigen Host. Der muß natürlich einen socket offen haben. Das geht auch umgekehrt. Ganz normale socket-Programmierung eben. Jojo S. schrieb: > Den Server starte ich und setze ein Timeout von erstmal 10s. Taugt der > ESP jetzt um eine Verbindung längerfristig aufrecht zu erhalten? Mein > Steuerprogramm wäre der Client und der Ofen der Server. Wenn die > Verbindung steht soll der Ofen zyklisch (alle 250 oder 500 ms) seinen > Status senden. Mit der lua Firmware ist das kein Problem. Das sollte aber auch mit dem AT+ Interface funktionieren, wurde früher mit Modems ja auch so gemacht. > Muss man dabei vor jedem Senden den Status abfragen oder > wie bekommt man mit das eine Verbindung beendet wurde? Bei der lua Firmware läuft das anders. Da hat hat ein socket Callbacks für connect, disconnect, data etc. Das läuft ähnlich ab, wie in js. Da hab ich dann lua Funktionen (keine länger als ein Zehnzeiler) für geschrieben, die eine passende Nachricht auf der seriellen zum µC schicken. Für soetwas brauchts keine Library, da dauert es länger die Library richtig zu verstehen, als es selber zu schreiben. MfG Klaus
Danke für die Antworten. Das mit dem LUA hört sich interesant an, nur damit habe ich mich aber noch nicht beschäftigt. Die Bibliothek die ich benutzt habe kapselt nur das Ping-Pong mit den AT Befehlen und den Antworten und kümmert sich nicht um irgendwelche Abläufe. Im ersten Versuch habe ich den Server gestartet und eine endlos Schleife mit recv() und Timeout von 250 ms laufen lassen. Wenn Zeichen ankommen gebe ich etwas aus. Das lief aber nicht zuverlässing und hing sich nach einigen Ausgaben auf. Vielleicht das Problem bei gleichzeitigem Senden/Empfangen das hier schon diskutiert wurde?
Mit der Lua Bibliothek habe ich mich auch noch nicht befasst. Der Code sieht aber sehr einfach aus und ich würde es gerne irgend wann mal probieren. Klaus, kannst Du mir sagen, Wie man vorgehen muss, um Lua auf dem ESP8266 zu installieren und wie bekommt man dann die Lua Scripte auf das Modul?
Jojo S. schrieb: > Im ersten Versuch habe ich den Server gestartet und eine endlos > Schleife mit recv() und Timeout von 250 ms laufen lassen. Wenn Zeichen > ankommen gebe ich etwas aus. Das lief aber nicht zuverlässing und hing > sich nach einigen Ausgaben auf. Ich benutze im Moment nur eine Richtung: der ESP öffnet einen socket zu einem PC, schickt ein paar k Daten und macht den socket wieder zu. Man darf den ESP dabei nicht überfahren, er hat (bei der lua Firmware) einen Buffer von ca. 250 Bytes. Also schicken und auf den Prompt warten, usw. Umgegekehrt habe ich mir bisher nicht die Mühe gemacht, zwischen Prompt und Daten von der Gegenseite zu unterscheiden. Das kann aber noch kommen. MfG Klaus
bin auch einen Schritt weiter, das Timing habe ich in meinem Programm aufgeräumt und sende jetzt etwa alle 0,5 s. Ausserdem habe ich in der iTead Lib noch eine Unschärfe beseitigt: vor dem Senden von Befehlen wird immer ein flush() aufgerufen, aber wenn zwei Befehle schnell nacheinander kommen können noch restliche Zeichen vom ersten Befehl ankommen. Es wird nicht bis zum letzten CR oder LF gewartet (die Antworten vom ESP scheinen auch nicht alle gleich zu sein). Das habe ich erstmal durch ein kurzes wait vor dem buffer löschen im flush() gefixt. Jetzt muss ich noch den Status vor dem Senden auswerten, wenn die Verbindung besteht wird das im Status gemeldet: STATUS:3 +CIPSTATUS:0,"TCP","192.168.100.74",53105,1, 0.0, 17.8, 0.0, 17.8 STATUS:3 +CIPSTATUS:0,"TCP","192.168.100.74",53105,1, 0.0, 18.2, 0.0, 18.2 STATUS:3 +CIPSTATUS:0,"TCP","192.168.100.74",53105,1, 0.0, 18.1, 0.0, 18.1 STATUS:3
>Klaus, kannst Du mir sagen, Wie man vorgehen muss, um Lua auf dem >ESP8266 zu installieren und wie bekommt man dann die Lua Scripte auf das >Modul? Hab's selber gefunden: https://github.com/nodemcu/nodemcu-flasher
Und hier noch das Dev-Kit. https://github.com/nodemcu/nodemcu-devkit Bleibt nur die Frage nach der Baudrate.
> Bleibt nur die Frage nach der Baudrate.
welche Frage hast du da? Die Baudrate kann man per AT-Befehl abfragen
und einstellen, AT+CIOBAUD?
Beim Internet und WLAN solltest du generell nicht darauf hoffen, eine Verbindung lange aufrecht erhalten zu können. Schreibe die Software besser so, dass sie jederzeit bei Bedarf eine neue Verbindung aufbauen kann. Da ich diesem Modul (noch) nicht viel zutraue, würde ich sogar eine Möglichkeit vorsehen, das ganze Modul durch Unterbrechung der Spannungsversorgung neu zu starten.
Stefan Us schrieb: > Beim Internet und WLAN solltest du generell nicht darauf hoffen, eine > Verbindung lange aufrecht erhalten zu können. Schreibe die Software > besser so, dass sie jederzeit bei Bedarf eine neue Verbindung aufbauen > kann. ja, ist richtig. Die Doku zu dem Modul ist ein Puzzle, man findet die AT Befehle mehr oder weniger gut dokumentiert und verschiedene Beispiele, aber was in welchen Fehlerfällen passiert muss man experimentell ermitteln. Jedenfalls sendet das Modul jetzt kontinuierlich und ohne erkennbare Aussetzer, mit Auswertung des Status scheint das sehr gut zu laufen. Und solange es auf die AT Befehle reagiert kann man ja auch Software Reset auslösen.
>welche Frage hast du da? Die Baudrate kann man per AT-Befehl abfragen >und einstellen, AT+CIOBAUD? Ich meinte die Baudrate zum flashen des LUA Interpreters. Aber wahrscheinlich muss man die nicht wissen, da das Download-tool die richtige Baudrate einstellt.
> Jedenfalls sendet das Modul jetzt kontinuierlich und > ohne erkennbare Aussetzer Das war auch mein erstes Testergebnis. Ich hatte es an einen Laptop gehangen und mit einem Shell Script immer wieder eine lokale Webseite aufgerufen (also als Client, nicht Server). Im Server Log konnte ich am nächsten Morgen alle Requests wieder finden, ohne Aussetzer.
Ich habe in den letzten Wochen auch etwas mit den ESP8266 Modulen und der Lua Firmware (NodeMCU) herum experimentiert. Auch ohne Vorkenntnisse in Lua kommt man sehr schnell zu guten Ergebnissen. Die Sprache abstrahiert komplexe Funktionen durch eine gute API und man kommt gut damit klar. Als Beispiel wollte ich einen kleinen Webserver auf den Modulen laufen lassen und darüber den Zustand aller GPIOs steuern können. Mittlerweile kann ich über den Webserver jeden GPIO als Ausgang oder Eingang konfigurieren und steuern/auslesen. Alternativ können maximal 4 beliebige GPIO als PWM konfiguriert werden. Das Beispiel zeigt, wie einfach man so etwas in Lua realisieren kann, auch wenn es mich anfangs einiges Zeit gekostet hat mit der speziellen Syntax zurecht zu kommen. :) Aber man muss fairer weise auch sagen, dass die NodeMCU Firmware deutlich besser dafür geeignet ist nur den integrierten Controller zu verwenden. Als Interface für einen externen Controller ist die AT-Firmware dann doch besser geeignet. Ciao, Rainer
Für den Betrieb am externen Controller finde ich die AT Kommandos nervig, gibt es Alternativen mit SPI oder I2C? In den Antwortstrings nach Daten zu fischen finde ich nicht sehr effizient. Die Lib die ich benutze kommt aus der Arduino Welt, die C++ Quellen kann man meist mit wenigen Anpassungen auch für mbed verwenden. Da werden die Antworten zwar relativ komfortabel mit einer Stringklasse verarbeitet, die ruft aber ganz brutal für jedes ankommende Zeichen ein realloc() auf... Immerhin läuft der TCP Server jetzt sehr stabil. Bei einem Test über Nacht hatte der Telnet Client zwar die Verbindung verloren, das dürfte aber an der nächtlichen Zwangstrennung durch die Fritzbox liegen. Das Modul meldet dann Linkstatus '4' = disconnected, dann muss vermutlich wieder der Link zum AP neu aufgebaut werden.
Die Lua Firmware kann Onewire, I2C und SPI an beliebigen Pins aktivieren. Eventuell wäre das eine Möglichkeit darüber mit dem Modul zu kommunizieren. Habe das aber selber noch nicht ausprobiert.
Gibt es mittlerweile eigentlich schon irgendwas in Richtung IPv6 für den ESP8266? Ohne IPv6 ist der Chip bald recht nutzlos.
drama schrieb: > Gibt es mittlerweile eigentlich schon irgendwas in Richtung IPv6 für den > ESP8266? Ohne IPv6 ist der Chip bald recht nutzlos. Mit der Aussage "bald" wäre ich erst mal vorsichtig. IPv6 gibt es seit über 10 Jahren und selbst heute ist es noch nicht mal annähernd flächendeckend eingeführt worden. ;) Abgesehen davon hängen die ESP sowieso nicht direkt im Internet sondern hinter einem Router im Intranet. Und dort wird auch weiterhin hauptsächlich IPv4 verwendet. Also nur das Verbinden zu IPv6 Adressen im Internet wird dann zu einem Problem.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.