Forum: Mikrocontroller und Digitale Elektronik ESP8266 sendet Daten nach Initialisierung


von Ada J. Quiroz (inschnier)


Lesenswert?

Hallo,

ich nutze einen ESP8266 als UART Gateway mittels UDP. Beim Starten vom 
ESP sendet dieser auf der UART Daten zum Mikrocontroller und ich weiß 
nicht warum. Mein Mikrocontroller sendet keine Daten, das kann ich auf 
dem Oszilloskop sehen, also muss dieses Senden vom ESP initiiert werden. 
Aber was wird dort gesendet?

Es sind nur wenige Zeilen Code, ich vermute, dass die Initialisierung 
irgendwelchen Unsinn schickt.

Oder ist bei der Initialiserung vom UDP schon "1 Paket im Buffer", warum 
auch immer?

EDIT: Auch wenn ich "Serial.write(packetBuffer, inCome);" auskommentiere 
wird beim Hochfahren etwas über die UART gesendet.
1
#include <ESP8266WiFi.h>
2
#include <WiFiUdp.h>
3
4
#define SERIALBAUD 115200 
5
#define AP_SSID "NETWORK"
6
7
// UDP
8
WiFiUDP UDP;
9
IPAddress local_IP(192, 168, 4, 1);
10
IPAddress gateway(192, 168, 4, 1);
11
IPAddress subnet(255, 255, 255, 0);
12
#define UDP_PORT 4210
13
14
char packetBuffer[400];
15
int inCome = 0;
16
int packetSize = 0;
17
char incoming_buffer[100], filename_rcv[100] = {0};
18
19
void setup() {
20
    WiFi.softAPConfig(local_IP, gateway, subnet);
21
    WiFi.softAP(AP_SSID);
22
23
    UDP.begin(UDP_PORT);
24
    Serial.begin(SERIALBAUD);
25
}
26
27
void processIncomingByte(const byte inByte) {
28
    const unsigned int MAX_INPUT = 512;
29
    static char input_line[MAX_INPUT];
30
    static unsigned int input_pos = 0;
31
32
    if (input_pos < (MAX_INPUT - 1)) {
33
        input_line[input_pos++] = inByte;
34
    }
35
36
    if (inByte == '\n') {
37
        UDP.beginPacket(UDP.remoteIP(), UDP.remotePort());
38
        UDP.write(input_line, input_pos);
39
        UDP.endPacket();
40
        input_pos = 0;
41
    }
42
}
43
44
void loop() {
45
    packetSize = UDP.parsePacket();
46
47
    if (packetSize > 0) {
48
        memset(packetBuffer, 0, sizeof(packetBuffer));
49
        inCome = UDP.read(packetBuffer, sizeof(packetBuffer));
50
        Serial.write(packetBuffer, inCome);
51
    }
52
    while (Serial.available() > 0) {
53
        processIncomingByte(Serial.read());
54
    }
55
}

: Bearbeitet durch User
von Sebastian R. (sebastian_r569)


Lesenswert?

Ada J. Quiroz schrieb:
> etwas über die UART

Ada J. Quiroz schrieb:
> auf der UART Daten

Welche Daten denn?

von Sebastian W. (wangnick)


Lesenswert?

Ada J. Quiroz schrieb:
> Beim Starten vom ESP sendet dieser auf der UART Daten

Du meinst die Bootmeldungen mit 75000 Baud?

LG, Sebastian

von Ada J. Quiroz (inschnier)


Lesenswert?

Sebastian R. schrieb:
> Welche Daten denn?

742 Zeichen, irgendwelche Zahlen, kein Text.

von Michael U. (amiga)


Lesenswert?

Hallo,

Ada J. Quiroz schrieb:
> Sebastian R. schrieb:
>> Welche Daten denn?
>
> 742 Zeichen, irgendwelche Zahlen, kein Text.

Sebastian W. schrieb:
> Du meinst die Bootmeldungen mit 75000 Baud?

Eigentlich 74880 Baud, sieht etwa so aus:

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 3460, room 16
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4
tail 4
chksum 0xc9
csum 0xc9
v00054e50
~ld

Wenn Du das nicht haben willst, eben ein Pin zusätzlich verbinden und in 
Deinem Programm beim Start setzen. Dein µC schickt dann eben die Daten 
nur weiter wenn der Pin aktiv ist.

Gruß aus Berlin
Michael

von Obelix X. (obelix)


Lesenswert?

Ada J. Quiroz schrieb:
> 742 Zeichen, irgendwelche Zahlen, kein Text.

Falsche Baudrate im Terminal?

von Steve van de Grens (roehrmond)


Lesenswert?

Ada J. Quiroz schrieb:
> Beim Starten vom ESP sendet dieser auf der UART Daten zum
> Mikrocontroller und ich weiß nicht warum.

"Für das Debugging ist die ungewöhnliche Baudate 74880 vorteilhaft, weil 
der Bootloader vor dem Programmstart ebenfalls Meldungen mit 74880 Baud 
ausgibt. Die kannst du dann auch lesen."
http://stefanfrings.de/esp8266/

von Sebastian D. (djd1983)


Lesenswert?

Hallo,
ich versuche auch gerade zufällig mittes eines seriel --> TTL Adapters 
einem ESP8266, gebunden an eine Controller platine für LED Steuerung der 
Firma Hama, zu zuhören.

Ich versuche dies von einem Windows PC aus, wo ich aber die Baudrate von 
74880 nicht einstellen kann. Bei 115200 kommen lediglich komische 
Zeichen die sich ständig wiederholen.

Hat jemand eine Idee wie ich Putty bzw ein anderes Terminalprogram zu 
einer Baudrate von 74880 "zwingen" kann?

Gruß

von Steve van de Grens (roehrmond)


Lesenswert?

Sebastian D. schrieb:
> Ich versuche dies von einem Windows PC aus, wo ich aber die Baudrate von
> 74880 nicht einstellen kann

Versuche mal ein anderes Programm oder einen anderen USB/seriell 
Adapter. Die billigen PL2303 und CH340 können es jedenfalls. Allerdings 
bietet nicht jedes Programm an, solche ungewöhnlichen Baudraten 
auszuwählen oder einzutippen.

von Sebastian D. (djd1983)


Lesenswert?


von Steve van de Grens (roehrmond)


Lesenswert?

Du sollst einen USB/seriell Adapter nehmen. Mit USB!

von Rainer W. (rawi)


Lesenswert?

Sebastian D. schrieb:
> Ich versuche dies von einem Windows PC aus, wo ich aber die Baudrate von
> 74880 nicht einstellen kann. Bei 115200 kommen lediglich komische
> Zeichen die sich ständig wiederholen.

Kein Wunder - bereits bei viel kleineren Abweichungen stimmen beim 
letzten Bit die Abtastzeitpunkte nicht mehr. 5% Fehler in der Baudrate 
führen beim letzten Bit zu einem Zeitfehler von über 40% der Bitdauer. 
Natürlich versteht der Empfänger dann nur noch Kauderwelsch.

Sebastian D. schrieb:
> Hat jemand eine Idee wie ich Putty bzw ein anderes Terminalprogram zu
> einer Baudrate von 74880 "zwingen" kann?

Notfalls nimmst du einen zweiten µC und setzt den Baudratengenerator 
passend für die 74880 Bd.

: Bearbeitet durch User
von Steve van de Grens (roehrmond)


Lesenswert?

> Ich nutze diesen Adapter...

Bei diesem Adapter hängt es vom seriellen Port des PC ab, welche 
Baudraten er kann. Der Adapter ändert nur die Spannungspegel. Auf die 
Baudrate hat er keinen Einfluss.

von Helmut H. (helmuth)


Angehängte Dateien:

Lesenswert?

Sebastian D. schrieb:
> ein anderes Terminalprogram zu
> einer Baudrate von 74880 "zwingen" kann?

Tera Term benutzen.

von Steve van de Grens (roehrmond)


Lesenswert?


von Bernhard S. (b_spitzer)


Lesenswert?

Noch einfacher... in Arduino im seriellen Monitor die Baudrate auf 74880 
stellen. Die Windows-Einstellungen werden von den meisten Programmen 
überschrieben. Damit sind dann auch "exotische" Baudraten wie 31250Baud 
(Midi) möglich.

: Bearbeitet durch User
von Bernhard S. (b_spitzer)


Lesenswert?

Alternativen, wenn noch Pins frei sind:
- benutze SoftwareSerial für eine Schnittstelle an beliebigen Pins
- Benutze D7 und D8 für die Schnittstelle und schalte nach dem Booten 
die Serielle Schnittstelle drauf mit
1
Serial.swap();
- [edit] Gerade noch gefunden: "Bootstrapping GPIO15 to ground will also 
disable initial output from the ROM bootloader." Also 10k Pull-Down, 
dann sollte da Ruhe sein. Der Pin kann weiterhin als Ausgang genutzt 
werden.

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.