Kommunikation Arduino <-> ESP8266 instabil

Hallo zusammen,

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:

1.
AT+GMR
AT version:0.70.0.0(Jan 39 2016 15:10:17)
SDK vdrsion:1.5.27e 7

2.
AT+GMR
@T version:0/40.0.0(Aug  8 2015 14:45:58)
SDK wersion:1.3.0io
3 4

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.

Hat jemand einen Tipp, woran das liegen kann?

Dank und Gruß
Jan

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.

Serenifly:
Meinst du zwischen Arduino und PC?

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.

juup:
Hat jemand einen Tipp, woran das liegen kann?

Du hast vergessen zu sagen, WIE du die beiden verbunden hast.

Und wenn es nicht geht, wie genau ist es dann verbunden? Hast du gleichzeitige Kommunikation zum PC und ESP?

Verwendest du SoftwareSerial? Das ist Schrott. Wenn ja, besser AltSoftSerial nehmen

combie:
Du hast vergessen zu sagen, WIE du die beiden verbunden hast.

Oh, bin noch recht unerfahren mit Arduinos etc. und war im Glauben es gibt nur die Möglichkeit mittels:

SoftwareSerial esp8266(4, 5);

Serenifly:
Und wenn es nicht geht, wie genau ist es dann verbunden? Hast du gleichzeitige Kommunikation zum PC und ESP?

Dann ist die Folge PC - USB - Arduino - PIN 4/5 - RX/TX - ESP8266

Verwendest du SoftwareSerial? Das ist Schrott. Wenn ja, besser AltSoftSerial nehmen

War mir nicht bewusst. Zumal die angesprochenen Beispiele alle mit SoftwareSerial laufen (nicht bei mir)

SoftwareSerial geht wenn überhaupt nur mit sehr niedrigen Baudraten halbwegs gut.

Verwende das:
https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
Die Lib verwendet einen Timer um die Zeit einzuhalten. Die Pins sind damit vorgegeben. Auf der Seite gibt es eine Tabelle

Aber auch da solltest du doch mit der Baudrate zurückhalten. Das muss nicht super schnell sein.

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);
  }

Gelogen.

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

Ich verstehe es so, dass bei Anschluss des ESP mittels RX, TX bei einer Bautrate 9600 im Seriellen Monitor Hello World kommen sollte, oder?

Offensichtlich schickst du "Hello World" zum ESP.
Was soll der serielle Monitor dann zeigen?

Die Bautrate ist jeweils 115200 im seriellen Monitor eingestellt

Wenn dein ESP 115200 haben will, warum sehe ich dann: altSerial.begin(9600); ????

Nachtrag:

Warum tust du das überhaupt, mit so einem kleinen Arduino und dem ESP?

Das ist doch, als wenn man einen ganzen Flur, durch den Briefschlitz in der Haustür, von draußen aus, tapeziert....

Tipp:
Lass das Programm auf dem ESP laufen und benutze den Arduino nur als Ein- Ausgabe Dingen.
Stelle die Verbindung über I2C her.

Und alle deine Baudprobleme sind gegessen.

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. :frowning:

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.

Das mit dem "Zimmer durchs Schlüsselloch tapezieren" haste doch verstanden?

Aber, was solls...
Man kann aus jedem Problem das Maximum raus holen....

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. :frowning:

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.

Ääähhhmmm…

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.

und ich kann mit dem Flurstreichen beginnen

Ich mag Schlüssellöcher!

Man kann einen USB-Seriell-Adapter für den PC nutzen.

Freut mich, dass es jetzt klappt. Freue mich auch über Karma :wink:

Wenn die Baudrate so extrem daneben liegt, sollten aber nicht nur einzelne falsche Zeichen kommen. Sondern ständig nur Datenmüll

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.