Liebes Forum, wie im Betreff schon steht bin ich an folgernder Sache dran: Ausstattung: * MEGA+WiFi R3 ATmega2560+ESP8266, flash 32MB, USB-TTL CH340G, Micro-USB * Bascom als Programmiersprache für den ATmega * ESP8266 AT-Firmware 1.6.2.0 (oder so)(Bedienung ESP über AT-Befehle) https://www.espressif.com/en/support/download/at * Hterm als Eingabekonsole zum ESP Was will ich: * einlesen von Zeit/Datum über NTP in meine Steuerung => FERTSCH * App-Entwicklung zur Bedienung meiner Steuerung über NetIO app: https://netioapp.com/de/projects/ Der ESP ist nur das Sende- und Empfangsglied zwischen meinem Tablet/Handy und der Steuerung. Die Datenübertragung geht vom ATmega über rs232 zum ESP und dann per TCP an die App. Was geht: * ESP ist ins W-Lan eingebunden * Abfrage der Uhrzeit per NTP und Auswertung über ATmega * Verbindungseinstellung für Mehrfachverbindung • AT+CIPMUX=1 * ESP als Server vorbereiten• AT+CIPSERVER=1,5000 * Verbindungsaufbau ESP zur Android-App Danach kann ich Daten von meinem TAB zum ESP senden, sehe ich dann als +IPD,0,...... . N Was geht nicht (halbwegs und unerklärlich): * Daten vom ESP zur APP senden * mit • AT+CIPSEND=0,18 das Senden vorbereiten ( Empfänger 0 und 18 Zeichen senden) * > abwarten und Zeichen eingeben mit cr+lf verschicken Nach dem ich die App soweit programmiert/zusammengestellt habe, kann ich nur wie folgt und auch nachverfolgbar Daten übertragen. Ich gebe weniger Zeichen als angekündigt ein und muss dann nochmals den Befehl • AT+CIPSEND=0,18 eingeben. Danach erhalte ich in der App auch den Wert angezeigt. Gebe ich die angekündigte Zeichenmenge ein und sende bekomme ich sogleich eine Sendebestätigung • SEND OK , was vor nicht an dem war. In der App wird kein Wert angezeigt. Wo liegt mein Fehler, warum wird erst nach zweimaliger AT+CIPSEND=0,18 die Daten übertragen? Gibt es eine feinere/leichtere Art über die AT-Befehle Daten per TCP zu versenden? vielen Dank schon einmal für Eure Gedanken und Hilfe! MAT-sche
hi, mit der org. Software des esp habe ich da unter gleichen Anforderungen auch abgekotzt. (haufen esp-01...) umgestellt auf Tasmota und alles läuft so wie ich will! z. B. Abfrage Status Ausgang 1: Kommando : 21:52:31 CMD: power1 Antwort 1 :21:52:31 RSL: RESULT = {"POWER1":"OFF"} Antwort 2 :21:52:31 RSL: POWER1 = OFF Setze Ausgang 1: 22:05:34 CMD: power1 1 22:05:34 RSL: RESULT = {"POWER1":"ON"} 22:05:34 RSL: POWER1 = ON Wie man Ausgang 1 zurücksetzt darfst du raten ;-) Die über hterm eingebenen Befehle sind power1 <Return> bzw. power1 1 <Return> Lässt sich auch in Bascom fix ausfiltern. cu zipp
Hi Zipp, danke für Deine interessanten Zeilen! Kann ich darüber auch Analogwerte übertragen und die GPIO vom ESP ansteuern?
Du musst mit dem AT Befehl exakt so viele Bytes senden, wie du angekündigt hast. Wenn du zu wenige Zeichen sendest, wird der nächste Befehl zerstückelt. Wenn du zu viele Zeichen sendest, werden die überschüssigen Zeichen als nächster Befehl interpretiert. So oder so bekommst du dann mindestens einen ERROR. > In der App wird kein Wert angezeigt. Dann sende die Daten an ein Programm, bei dem du sicher bist, dass es funktioniert. Ich empfehle für solche Sachen das Programm Netcat. Anleitung zur Verwendung des AT Befehlssatzes: http://stefanfrings.de/esp8266/index.html#atcommands In dem folgenden Buch am Ende von band 3 gibt es ein konkretes Beispiel mit AVR Mikrocontroller: http://stefanfrings.de/mikrocontroller_buch/index.html
Hi Chris, danke für den Link! sehr interessant. Irgend wann soll auch eine Hausautomation aufgebaut werden. MAT
Stefanus F. schrieb: > Du musst mit dem AT Befehl exakt so viele Bytes senden, wie du > angekündigt hast. > > Wenn du zu wenige Zeichen sendest, wird der nächste Befehl zerstückelt. > Wenn du zu viele Zeichen sendest, werden die überschüssigen Zeichen als > nächster Befehl interpretiert. So oder so bekommst du dann mindestens > einen ERROR. > >> In der App wird kein Wert angezeigt. > > Dann sende die Daten an ein Programm, bei dem du sicher bist, dass es > funktioniert. Ich empfehle für solche Sachen das Programm Netcat. > > Anleitung zur Verwendung des AT Befehlssatzes: > http://stefanfrings.de/esp8266/index.html#atcommands > > In dem folgenden Buch am Ende von band 3 gibt es ein konkretes Beispiel > mit AVR Mikrocontroller: > http://stefanfrings.de/mikrocontroller_buch/index.html Hallo Stefanus, schön das Du geantwortet hast! Deine Seiten haben mir für den Start mit dem ESP sehr geholfen. Also auch hier ein riesen großes Lob und DANK dafür. mein Problem habe ich gefunden und nun kann es weiter gehen mit meinen Ideen! Mein Problem war, dass ich in der Anzahl der zu sendenen Zeichen vergessen habe, ein cr/lf/ mit einzuberechnen. Meine Anwendung funktioniert nun bestens. Also Klartext: z.Bsp. "23.23" senden bedeutet 7 zeichen durch "AT+CIPSEND=0,7" ankündigen. Danke Dir Deiner Hinweise!
Noch ein Tipp zur Auswertung der Antworten: Warte nicht auf OK oder irgendeinen anderen konkreten String, sondern warte maximal 1 Sekunde irgendwas. Dann warte maximal 1 Sekunde darauf, dass der ESP Ruhe gibt. Was du bis dahin eingesammelt hast, sollte ein "OK" enthalten. So berappelt sich die Kommunikation nach einer Fehlfunktion viel schneller, als wenn du auf exakt "OK\r\n" (oder so ähnlich) wartest.
Stefanus F. schrieb: > Noch ein Tipp zur Auswertung der Antworten: > > Warte nicht auf OK oder irgendeinen anderen konkreten String, sondern > warte maximal 1 Sekunde irgendwas. Dann warte maximal 1 Sekunde darauf, > dass der ESP Ruhe gibt. > > Was du bis dahin eingesammelt hast, sollte ein "OK" enthalten. > > So berappelt sich die Kommunikation nach einer Fehlfunktion viel > schneller, als wenn du auf exakt "OK\r\n" (oder so ähnlich) wartest. Ohhh danke für den Hinweis. Eigentlich habe ich eine SUB in meinem Programm zur Auswertung drinnen. Werde aber dann zusätzlich die sec. abwarten. Wenn ich ein AT eingebe und ein OK bekomme sollte es doch dann auch gehen?! Könnt ich als zusätzliche Abfrage im Fehlerfall ja mit einbinden. Gibt es sonstige Fallstricke beim ESP noch, die Du erwähnenswert fändest? Nutzt Du die AT-Firmware und wenn ja, läuft sie stabil?
> Dann warte maximal 1 Sekunde darauf, > dass der ESP Ruhe gibt. Ich sollte vielleicht noch erwähnen, was genau "Ruhe geben" technisch gesehen ist: Der Mikrocontroller empfängt 100ms lang keine weiteren Zeichen mehr. Dann kannst du sicher sein, dass du die Antwort komplett abgeholt hast. Einen Timeout auf maximal 1s macht sinn, falls das ESP Modul amok läuft und deinen Mikrocontroller mit dauer-gebrabbel überflutet. Das hörst du dir maximal 1 Sekunde lang an, anstatt unendlich lange.
> Nutzt Du die AT-Firmware und wenn ja, läuft sie stabil?
Ich habe sie nur in einem ernsthaften Projekt genutzt und das etwa 1
Woche lang im Dauertest gehabt (mit der Firmware aus dem SDK 1.5.4). Da
lief es gut. Das Ding ist inzwischen allerdings wieder zerlegt worden.
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.