Forum: Mikrocontroller und Digitale Elektronik ESP8266 - serial.print()-Problem


von nix_geht (Gast)


Lesenswert?

Guten Abend,

ich bin am verzweifeln.
Mein ESP-01-Board lässt sich über den USB-Programmer (von Aliexpress) 
wunderbar flashen (sieht man am Blinken der blauen LED auf dem Board).
Auch das Beispielprogramm (erstes Listing) funktioniert, indem es im 
Terminalprogramm genau das richtige ausgibt "ein" und "aus".
Das Ganze ist in der Arduino IDE geschrieben.

Wenn ich den ESP jedoch mit dem zweiten Listing flashe, dann bekomme ich 
KEINE Konsolenausgaben (Serial.print()) mehr im Terminal ausgegeben.

Die Baudrates sind jeweils richtig eingestellt, entsprechend dem Wert 
aus Serial.begin().


Wo liegt der Unterschied zwischen Listing-1 und Listing-2?
Warum wird beim 1) im Terminal alles richtig ausgegeben und in 2) nicht?

Hier der Code:
1
void setup() 
2
{
3
  pinMode(0,OUTPUT);
4
  Serial.begin(9600);
5
}
6
7
void loop() 
8
{
9
  digitalWrite(0,LOW);
10
  Serial.println("AUS");
11
  delay(1000);
12
  
13
  digitalWrite(0,HIGH);
14
  Serial.println("EIN");
15
  delay(1000);
16
  
17
}

..und hier Listing-2:
1
#include             <ESP8266WiFi.h>
2
3
void setup() 
4
{
5
  
6
      Serial.begin(9600);
7
      char           pass[]                = "...";
8
      char           ssid[]                = "...";
9
      int            status;
10
      
11
  Serial.println("test");    
12
    
13
      
14
      Serial.print("Trying connect to ");
15
      Serial.println(ssid);
16
17
   
18
19
      
20
      // attempt to connect to Wifi network:
21
      status = WiFi.begin(ssid, pass);
22
     
23
24
      status = WiFi.waitForConnectResult();
25
      if (status != WL_CONNECTED) 
26
      {
27
          Serial.println("Connection Failed");
28
          while (true) {}
29
      }
30
      
31
      Serial.println("Connected.");
32
      Serial.print("MAC: ");
33
      Serial.println(WiFi.macAddress());
34
      Serial.print("IP:  ");
35
      Serial.println(WiFi.localIP());
36
      Serial.print("Subnet: ");
37
      Serial.println(WiFi.subnetMask());
38
      Serial.print("Gateway; ");
39
      Serial.println(WiFi.gatewayIP());
40
      Serial.print("DNS: ");
41
      Serial.println(WiFi.dnsIP());
42
      Serial.print("Channel: ");
43
      Serial.println(WiFi.channel());
44
      Serial.print("Status: ");
45
      Serial.println(WiFi.status());
46
}
47
48
void loop() 
49
{
50
  int k;
51
52
    for (k = 0; k <= 100; k = k + 1) 
53
    {
54
        Serial.println("on");
55
        
56
        delay(1000);
57
    
58
        Serial.println("off");
59
        
60
        delay(1000);
61
    }
62
63
    WiFi.disconnect(true);
64
65
    while (true) {}
66
67
}

Ich habe es auch schon auf anderen PCs probiert...das gleiche Verhalten. 
Ich habe es auch schon mit einem zweiten ESP-01 probiert, selbst einen 
zweiten Programmer habe ich verwendet.
Nichts brachte den Erfolg.


Wisst ihr vielleicht, woran das liegt?

Danke!

von Stefan F. (Gast)


Lesenswert?

Du hast die Grundlagen der Programmierung des ESP nicht verstanden. Lies 
das: http://stefanfrings.de/esp8266/index.html

Du darfst keine delays und keine Endlos-Schleifen verwenden (jedenfalls 
nicht so lange). Dein Modul wird das als Fehlfunktion erkennen und einen 
Reset machen.

Nach maximal 20ms muss die ganze loop() Funktion beendet sein. Anstatt 
schleifen, sollst du Zustandsautomaten verwenden. Google nach diesem 
Begriff.

von G. H. (schufti)


Lesenswert?

das ist grundsätzlich nicht ganz falsch, aber daran wird es im konkreten 
Fall nicht liegen wenn er schreibt er bekommt KEINE Konsolausgabe.
Vor den Endlosschleifen liegen immerhin Ausgaben die zumindest

"test"

"Trying connect to "

etc. erscheinen lassen sollten.

weiters schreibt er ja auch nicht, dass er wiederholte Bootmeldungen 
beobachtet ...

Edit: die Loop kann natürlich länger als 20ms dauern solange die Zeit in 
delays verbraten oder ge"yield"ed wird.

: Bearbeitet durch User
von André R. (andr_r619)


Lesenswert?

Keine heißt auch keine Bootmeldung? Beim Hochfahren sendet der Chip 
einige Systeminformationen mit 76800 Baud. Ich gehe jetzt mal davon aus, 
aber frage außerdem trotzdem: Ist GPIO 0 richtig beschaltet? Auszug aus 
der Doku:

> leave open or pull up for normal, pull down to upload new firmware

von Einer K. (Gast)


Lesenswert?

Stefan U. schrieb:
> Du darfst keine delays und keine Endlos-Schleifen verwenden (jedenfalls
> nicht so lange). Dein Modul wird das als Fehlfunktion erkennen und einen
> Reset machen.

Natürlich darf er beliebig lange Delays einsetzen.
Und ebenso natürlich Endlosschleifen, wenn sie genügend delay() oder 
yield() enthalten.

von Einer K. (Gast)


Lesenswert?

Nachtrag:
Der Unterschied in den Programmen ist klar!
Das eine nutzt WiFi und das andere nicht.

Die Wifi Konfiguration findet sich am Ende des Flash Bereiches.

Ich gehe also davon aus, das die falsche Flash größe eingestellt ist.

Soweit mir bekannt hat das blaue Modul 512KByte und das schwarze Modul 
1MByte Flash.


Behauptung/Vermutung:
Du betreibst das schwarze Modul mit den Einstellungen für das blaue. Und 
deswegen tuts das nicht, sobald WiFi ins Spiel kommt. Denn der 
Konfigbereich wird an der falschen Stelle gesucht.

ohne Gewähr

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.