derzeit habe ich ein schwer reproduzierbares "Kommunikationsproblem" zwischen einem Arduino (wahlweisee Uno oder Nano) und dem ESP8266.
Verschiedene ESP8266 Module mit originaler oder neuester Firmware machen anscheinend keinen Unterschied:
Bereits beim zweiten AT-Befehl kann man das Problem erkennen. Teilweise und an unterschiedlichen Stellen werden falsche/wirre Zeichen gesendet. Hier @ statt A von AT version....
Diese Zeichen können auch im ready oder OK auftauchen, so das Kontrollen der AT-Befehle manchmal scheitern.
Wenn ich mittels FT232 kommuniziere, erhalte ich keine Störzeichen.
Die Bautrate ist jeweils 115200 im seriellen Monitor eingestellt, da 9600 und andere nicht / nicht besser funktionieren.
Völlig vergessen kann ich "TCP-GET-Abfragen", da kommt mit den Arduinos nix vernünftiges an.
juup:
Wenn ich mittels FT232 kommuniziere, erhalte ich keine Störzeichen.
Meinst du zwischen Arduino und PC?
Der USB/seriell Wandler auf den Standard Arduino Boards ist auch ein Atmega. Und das ist wohl nicht so toll wie man denkt. Für die meisten Dinge geht es, aber es kann auch Probleme machen.
Hier wollte ich letztens mit jemandem Software Handshaking mit XON/XOFF machen und es wollte einfach nicht funktionieren. Irgendwann habe ich dann gelesen dass der Wandler seine Puffer nur verzögert weiterleitet. Mit einem dedizierten USB/TTL Wandler (hier auch von FTDI) ging es sofort.
Dass bei dir falsche Zeichen ankommen ist ein anderes Problem, aber wenn du sagst dass es mit einem anderen Wandler geht, könnte auch der Atmega Wandler Schuld zu haben.
Nein, ich meine wenn ich den FT232 an den ESP8266 anschließe und mittels des Seriellen Monitors der Arduino IDE die AT-Befehle sende, erhalte ich keinerlei Störzeichen.
Mich wundert einfach, dass es viele Projekte gibt, in denen ein Arduino problemlos mittels AT-Befehle einen ESP8266 für den Zugriff auf HTTP-Seiten nutzt. Wenn ich einige Beispiele nachbaue, bekomme ich stets Fehler.
Wenn ich die Ausgaben im Seriellen Monitor sehe, kann ich mir auch vorstellen warum. Nur weiß ich nicht, woran es noch liegen kann. Ich habe mittlerweile einen Uno und 2 Nano getestet. Keiner funktioniert.
Hmm, bei mir erscheint beim Echo-Beispiel nur: AltSoftSerial Test Begin
Ich verstehe es so, dass bei Anschluss des ESP mittels RX, TX bei einer Bautrate 9600 im Seriellen Monitor Hello World kommen sollte, oder?
Ich bin ehrlich gesagt durch den zweiten Screenshots mit "Seyon Terminal" etwas verwirrt.
Echo-Beispiel:
#include <AltSoftSerial.h>
AltSoftSerial altSerial;
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for Arduino Serial Monitor to open
Serial.println("AltSoftSerial Test Begin");
altSerial.begin(9600);
altSerial.println("Hello World");
}
void loop() {
char c;
if (Serial.available()) {
c = Serial.read();
altSerial.print(c);
}
if (altSerial.available()) {
c = altSerial.read();
Serial.print(c);
}
Jetzt nach einiger Zeit kommen ab und an im Seriellen Monitor Zeichen an: Extrem viele Leerzeichen dazwischen, größtenteils weiße Fragezeichen vor schwarzem Hintergrund, ab und an ein H oder l.
:o
combie:
Offensichtlich schickst du "Hello World" zum ESP.
Was soll der serielle Monitor dann zeigen?
Wenn dein ESP 115200 haben will, warum sehe ich dann: altSerial.begin(9600); ????
Hast ja recht, ich habe mich durch den Einwand
Serenifly:
SoftwareSerial geht wenn überhaupt nur mit sehr niedrigen Baudraten halbwegs gut.
irritieren lassen.
Mit 115200 sehe ich jetzt auch wieder bessere Ausgaben auf dem Seriellen Monitor, MIT vereinzelten Störzeichen.
combie:
Warum tust du das überhaupt, mit so einem kleinen Arduino und dem ESP?
Weil ich auch Daten vom Arduino in Netz senden will.
Tipp:
Lass das Programm auf dem ESP laufen und benutze den Arduino nur als Ein- Ausgabe Dingen.
Stelle die Verbindung über I2C her.
I2C sagt mir derzeit noch gar nix. Gefundene Projekte kamen auch ohne aus und waren vom Umfang für mein Projekt völlig ausreichend.
combie:
Das mit dem "Zimmer durchs Schlüsselloch tapezieren" haste doch verstanden?
Ja, Danke der Nachfrage.
Nur nochmal: es gibt zahlreiche Beispiele, die vom Tapezieraufwand meinem Projekt entsprechen Nun habe ich die Tapete und Kleister hier liegen und stelle fest das die Tapete manchmal schwarze Flecken hat. Warum, kann mir niemand bisher sagen. Der Tipp dann doch I2C-Spühfarbe zu benutzen ist bestimmt gut, nur habe ich davon keine Dose hier rumliegen.
juup:
Hast ja recht, ich habe mich durch den Einwandirritieren lassen.
Mit 115200 sehe ich jetzt auch wieder bessere Ausgaben auf dem Seriellen Monitor, MIT vereinzelten Störzeichen.
Nach meinem Wissen, muss man am ESP noch die richtige Baud-Rate einstellen. 115000 ist voreingestellt, was aber für Softserial zu schnell ist. Anleitung zum Umstellen: Nachdem flashen
Google findet auch noch Anleitungen mit anderen Wegen zur Umstellung.
Wechselst du auf einen Mega oder Leonardo, kannst du dir Softserial sparen.
Theseus:
Nach meinem Wissen, muss man am ESP noch die richtige Baud-Rate einstellen. 115000 ist voreingestellt, was aber für Softserial zu schnell ist.
Vielen Dank, das war der entscheidende Tipp.
Mit neueren Firmwares benötigt man nur eine Zeile:
AT+UART_DEF=9600,8,1,0,0
Seit dem kommen keine Sonderzeichen mehr an und ich kann mit dem Flurstreichen beginnen.
Wie will man denn gewährleisten, das man bei einer Baudrate von 115200 das ändern der Baudrate auf 9600 fehlerfrei erledigen kann, wenn der "Handler", welcher die Baudrate ändern soll, doch die 115200 gar nicht fehlerfrei beherrscht.
Theseus:
Man kann einen USB-Seriell-Adapter für den PC nutzen.
Genau den habe ich genutzt.
Mittels AT+UART_DEF statt AT+UART_CUR wird es im Flash gespeichert und ist zukünftig als Standard gesetzt.
Serenifly:
Wenn die Baudrate so extrem daneben liegt, sollten aber nicht nur einzelne falsche Zeichen kommen. Sondern ständig nur Datenmüll
Die fehlerhaften Zeichen kommen anscheinend durch den zu langsamen SoftSerial.
Wenn Du Bautrate falsch eingestellt ist, kommen, wie Du schreibst, gar keine oder nur wirre Zeichen.