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?
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
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.
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.