Forum: Mikrocontroller und Digitale Elektronik ESP8266: Flashen geht, serielle Kommunikation leider nicht


von Tim S. (Firma: Google) (tuxut83)


Lesenswert?

Hallo Gemeinde.
Ich probiere mich gerade an dem ESP8266.
Unter Linux habe ich mit dem esptool.py eine NodeMCU-Firmware flashen 
können.
Jetzt hatte ich erwartet, dass ich endlich mal vetnünftige Zeichen unter 
einem Prog wie hterm (Windows) oder putty (Linux) sehe. Fehlanzeige.
Ich habe natürlich mit den Baudrate herumgespielt, leider nur Nonsens 
auf der Leitung. Woran kann das noch liegen?
Ich habe eine bin-Datei von folgender Seite an die Adresse 0x00000 
erfolgreich geflasht.

https://github.com/nodemcu/nodemcu-firmware/releases/tag/0.9.6-dev_20150704

Muss ich nochmehr tun? Bin echt am Verzweifeln...
Danke!

von Tom (Gast)


Lesenswert?

Der Bootloader sollte sich mit einer Baudrate von 74880 Bit/s melden.

von Tim S. (Firma: Google) (tuxut83)


Lesenswert?

Im Ernst? Wo kommt denn die "krumme" Zahl her?
Das ist wohl kein Standardwert...

von Tim S. (Firma: Google) (tuxut83)


Lesenswert?

Super, hat funktioniert...

von Hans H. (hanshi)


Lesenswert?

Die CPU fährt mit 26MHz hoch und schaltet dann auf 40MHz um.

Hans

von Joachim S. (oyo)


Lesenswert?

Stefan S. schrieb:
> Ich habe eine bin-Datei von folgender Seite an die Adresse 0x00000
> erfolgreich geflasht.
>
> https://github.com/nodemcu/nodemcu-firmware/releases/tag/0.9.6-dev_20150704

Das ist leider eine wirklich urururalte Version der NodeMCU-Firmware. 
Würde ich definitiv von abraten, mittlerweile ist die NodeMCU-Firmware 
irgendwo bei Version 2.1.

Ein aktuelle, vorkompilierte NodeMCU-Firmware mit den wichtigsten 
Modulen findest Du z.B. hier:
https://github.com/oyooyo/nodemcu-firmware/raw/uuid.space-dev/bin/nodemcu-firmware.bin
Funktioniert allerdings nur auf ESP8266 mit mindestens 1MB 
Flash-Speicher.

Ansonsten ist der Standardweg, sich unter
https://nodemcu-build.com/
eine eigenes Firmware-Image mit den gewünschten Modulen erstellen und 
per eMail zuschicken lassen.

Was die merkwürdige Baudrate von 74880 betrifft:
Die ist zwar korrekt, betrifft aber wirklich nur die allerersten Zeichen 
direkt nach dem Booten mit einer kurzen Statusmeldung. Wird 
üblicherweise einfach ignoriert.
Aktuelle NodeMCU-Firmwares benutzen standardmässig 115200.
Wenn Du also eine aktuellen NodeMCU-Firmware flashst, das 
Terminalprogramm auf 115200 einstellst und dann resettest, sollte (nach 
einigen unleserlichen Zeichen) dann eine leserliche Boot-Meldung mit 
"NodeMCU" kommen.

Die oben erwähnte uralte 0.9.6 Version benutzte allerdings glaube ich 
standardmässig noch eine andere Baudrate.

von Tim S. (Firma: Google) (tuxut83)


Lesenswert?

Okay, mittlerweile läuft es richtig gut.
Ich habe die NodeMCU-Firmware drauf und ich bekomme den Lua-Interpreter 
unter Esplorer (und unter hterm) angezeigt.

Ein simples Programm, um den ESP8266 als AccessPoint zu verwenden hat so 
weit auch funktioniert.

Allerdings bekomme ich bei dem Versuch den ESP8266 als Webserver zu 
betreiben immer eine "out of memory" Fehlermeldung.
Als Sourcecode zeile wird immer
1
srv:listen(80,function(conn)

angekreidet.

Das müsste doch eigentlich funktionieren.
Der ESP8266 hat bis hierhin eine IP-Adresse von meiner FritzBox erhalten 
und wird auch unter dem FritzBox-Webinterface aufgelistet als 
WLAN-Teilnehmer.

von 50c (Gast)


Lesenswert?

Stefan S. schrieb:
> srv:listen(80,function(conn)

...und was steht in den 41 Zeilen davor?

von Tim S. (Firma: Google) (tuxut83)


Lesenswert?

Ich habe den Code von dieser Seite hergenommen:

https://randomnerdtutorials.com/esp8266-web-server/
1
wifi.setmode(wifi.STATION)
2
wifi.sta.config("YOUR_NETWORK_NAME","YOUR_NETWORK_PASSWORD")
3
print(wifi.sta.getip())
4
led1 = 3
5
led2 = 4
6
gpio.mode(led1, gpio.OUTPUT)
7
gpio.mode(led2, gpio.OUTPUT)
8
srv=net.createServer(net.TCP)
9
srv:listen(80,function(conn)
10
    conn:on("receive", function(client,request)
11
        local buf = "";
12
        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");

: Bearbeitet durch User
von 50c (Gast)


Lesenswert?

...wenn ich mich nicht irre, fehlt ein
1
wifi.sta.connect()

...plus dem üblichen Gedöns, dass die Verbindung aufgebaut ist, bevor 
man das Eigentliche startet...

von Joachim S. (oyo)


Lesenswert?

Stefan S. schrieb:
> Ich habe den Code von dieser Seite hergenommen:
>
> https://randomnerdtutorials.com/esp8266-web-server/
>
>
1
> wifi.setmode(wifi.STATION)
2
> wifi.sta.config("YOUR_NETWORK_NAME","YOUR_NETWORK_PASSWORD")
3
> print(wifi.sta.getip())
4
> led1 = 3
5
> led2 = 4
6
> gpio.mode(led1, gpio.OUTPUT)
7
> gpio.mode(led2, gpio.OUTPUT)
8
> srv=net.createServer(net.TCP)
9
> srv:listen(80,function(conn)
10
>     conn:on("receive", function(client,request)
11
>         local buf = "";
12
>         local _, _, method, path, vars = string.find(request, "([A-Z]+) 
13
> (.+)?(.+) HTTP");
14
>

Mal ein paar Sachen, die mir da auffallen:
- Das ist definitiv nicht der komplette Code, danach muss noch etwas 
kommen

- Das Code-Fragment sieht aus, als ob es für eine alte Version der 
NodeMCU-Firmware geschrieben wurde. Du hast aber leider nicht 
geschrieben, welche Version Du der NodeMCU-Firmware Du verwendest.

- Die Fehlermeldung besagt ja bereits explizit, dass Du zuviel RAM 
verbrauchst; höchstwahrscheinlich genau in dem Teil des Codes, den Du 
unterschlagen hast. Bei Verwendung von NodeMCU-LUA darf man nicht 
verschwenderisch mit RAM umgehen, idealerweise sollte man vielmehr 
gewisse Tricks kennen, um RAM zu sparen. Wenn man mit dem verfügbaren 
RAM partout nicht hinkommt, dann im Zweifelsfall lieber zu C wechseln, 
da kennt man normalerweise keinen RAM-Mangel

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.