Forum: Mikrocontroller und Digitale Elektronik [ESP32/ESP8266] Einstieg in LUA bzw. NodeMCU


von Sebastian R. (sebr)


Lesenswert?

Ich möchte einige kleinere Projekte (z.B. Datenlogger) mittels ESP32 
oder ESP8266 realisieren. Meine Programmierkenntnisse sind eher 
rudimentär und beschränkten sich bisher darauf kleinere Veränderungen an 
C Code vorzunehmen und dann auf Atmel Mikrocontroller (ATTiny/ATMega)zu 
übertragen. Grundlegende Programmstrukturen nachzuvollziehen ist auch 
kein Problem.
Für die ESP würde ich gerne LUA verwenden, da es alles bietet was ich 
benötige und vor allem ohne IDE auskommt, wenn man mal im nirgendwo was 
ändern muss, kann man die init.lua einfach mit einem Texteditor 
bearbeiten.
Außer der offiziellen Doku zu NodeMCU findet sich jedoch relativ wenig 
im Web zu LUA auf ESP. Wer also Link zu Projekten in LUA hat: nur her 
damit!

von Joachim S. (oyo)


Lesenswert?

Sebastian R. schrieb:
> Ich möchte einige kleinere Projekte (z.B. Datenlogger) mittels ESP32
> oder ESP8266 realisieren. Meine Programmierkenntnisse sind eher
> rudimentär und beschränkten sich bisher darauf kleinere Veränderungen an
> C Code vorzunehmen und dann auf Atmel Mikrocontroller (ATTiny/ATMega)zu
> übertragen. Grundlegende Programmstrukturen nachzuvollziehen ist auch
> kein Problem.
> Für die ESP würde ich gerne LUA verwenden, da es alles bietet was ich
> benötige und vor allem ohne IDE auskommt, wenn man mal im nirgendwo was
> ändern muss, kann man die init.lua einfach mit einem Texteditor
> bearbeiten.
> Außer der offiziellen Doku zu NodeMCU findet sich jedoch relativ wenig
> im Web zu LUA auf ESP. Wer also Link zu Projekten in LUA hat: nur her
> damit!

Ich habe die Software für die allermeisten meiner ESP8266-Projekte in 
LUA geschrieben. Und ich war wirklich seeehr angetan davon, obwohl ich 
bis dato noch nie mit LUA zu tun hatte. Später beim ESP32 habe ich dann 
aber doch auf C/C++ umgeschwenkt, eigentlich nur aus einem einzigen 
Grund:
Für mich ist der grösste Vorteil des ESP32 gegenüber dem ESP8266 die 
Verfügbarkeit von Bluetooth Low Energy. Genau dieses Feature wird von 
NodeMCU/LUA für den ESP32 aber bislang nicht unterstützt und scheint 
auch nicht so schnell unterstützt zu werden... :-(

Anyway, mit Links zu Projekten kann ich Dir nicht gross helfen. Aber 
wenn's hilft, kann ich Dir vielleicht zumindest konkrete Fragen 
beantworten.
So ganz ist mir nämlich ehrlich gesagt auch nicht klar, was genau du 
eigentlich suchst:
Eine Art Tutorial?

Falls ja: In der Retrospektive würde ich persönlich sagen: Zum Aneignen 
allgemeiner LUA-Kenntnisse ist das offizielle LUA-Tutorial gut:
https://www.lua.org/pil/1.html
LUA ist übrigens im Kern extrem Javascript-ähnlich, auch wenn sich die 
Syntax deutlich unterscheidet. Also wenn Du Javascript kennst/kannst, 
dürftest Du mit LUA sehr schnell klarkommen.

Und für alles darüber hinaus, was LUA speziell auf den ESPs betrifft, 
ist die offizielle NodeMCU-Doku eigentlich ausreichend:
https://nodemcu.readthedocs.io/en/master/

Was vielleicht darüber hinaus noch ganz interessant und wichtig ist, 
sind so ein paar best practice-Tipps - speziell, wie man den 
Speicherbedarf reduziert, damit der Heap nicht überläuft, sobald das 
Programm etwas umfangreicher wird.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Der ESP8266 hat nur etwa 50kB RAM frei, darin muss folgendes unter 
gebracht werden:

- die Daten des LUA Interpreters
- dein LUA Script
- deine Daten

Du wirst ziemlich schnell an die Grenzen des knappen RAM Stoßen, dann 
musst du dein Script in viele kleine zerlegen, die sich gegenseitig 
nachladen.

Ich würde das mit LUA nochmal überdenken. Meiner Meinung nach bist du 
mit Arduino wesentlich besser bedient. Die Arduino IDE kann man 
"portable" installieren, dann hast du alle Dateien in einem 
Verzeichnisbaum - gerne auch auf USB Stick.

Inwiefern die Sache mit dem RAM beim ESP32 besser ist, weiß ich nicht. 
Ich habe den ESP32 letztes Jahr im Herbst evaluiert. Sowohl das IDF des 
Herstellers als auch der Arduino Core wirkten noch ziemlich unfertig und 
vor allem schlecht dokumentiert.

Da verwende ich lieber den ESP8266. Der kann weniger, dafür läuft er 
zuverlässig mit dem SDK 1.5.4 oder dem Arduino Core 2.3.0. Danach hat 
Espressif irgendwie alles kaputt gemacht - inkompatibel und instabil. 
Ich habe das starke Gefühl, dass sie den ESP8266 wie eine heiße 
Kartoffel fallen gelassen haben, um sich der Entwicklung des ESP32 zu 
widmen. Nur ist der halt noch nicht so weit, dass ich ihn empfehlen 
kann.

von Sebastian R. (sebr)


Lesenswert?

Joachim S. schrieb:
> Eine Art Tutorial?

Ja, um mich etwas "inspirieren" zu lassen. Mit Begriffen wie NodeMCU 
landet man dann sehr wieder bei Arduino - die Dev-Boards, wie z.B. das 
von LoLin, schimpfen sich ja auch NodeMCU was dann zu Verweirrung bei 
den Suchergebnissen führt.



Joachim S. schrieb:
> Falls ja: In der Retrospektive würde ich persönlich sagen: Zum Aneignen
> allgemeiner LUA-Kenntnisse ist das offizielle LUA-Tutorial gut:
> https://www.lua.org/pil/1.html

Danke, das werd ich mir mal anschauen. Das Buch gibt es ja in einer 
älteren Version auch als kostenloses pdf.

Stefanus F. schrieb:
> Ich würde das mit LUA nochmal überdenken. Meiner Meinung nach bist du
> mit Arduino wesentlich besser bedient.

JA da bin ich gespalten. LUA ist "relativ" einfach im Vergleich zu C. 
Allerdings liefert ja jeder Hersteller von Sensoren etc. irgendwelche 
Codeschnipsel für Arduino mit und die Community ist wesentlich größer.

Joachim S. schrieb:
> Anyway, mit Links zu Projekten kann ich Dir nicht gross helfen. Aber
> wenn's hilft, kann ich Dir vielleicht zumindest konkrete Fragen
> beantworten.

So für den Einstieg hatte ich mir folgendes vorgenommen: Über einen 
Zeitraum von etwa einer Minute vom ADC möglichst viele samples lesen; 
rtcfifo scheint hierfür das richtige zu sein. Die dadurch gesammelten 
Messwerte dann weiterverarbeiten (Mittelwert, Aufintegrieren etc.) und 
zusammen mit den Rohdaten auf dem Webserver des ESP darstellen.

von Joachim S. (oyo)


Lesenswert?

Sebastian R. schrieb:
> Joachim S. schrieb:
>> Eine Art Tutorial?
>
> Ja, um mich etwas "inspirieren" zu lassen. Mit Begriffen wie NodeMCU
> landet man dann sehr wieder bei Arduino - die Dev-Boards, wie z.B. das
> von LoLin, schimpfen sich ja auch NodeMCU was dann zu Verweirrung bei
> den Suchergebnissen führt.

Leider wahr, ja.

> JA da bin ich gespalten. LUA ist "relativ" einfach im Vergleich zu C.
> Allerdings liefert ja jeder Hersteller von Sensoren etc. irgendwelche
> Codeschnipsel für Arduino mit und die Community ist wesentlich größer.

Ich persönlich hatte nie das Problem, dass die von mir verwendeten 
Sensoren/Aktoren etc. unter ESP8266-LUA nicht benutzbar gewesen wären. 
Für die halbwegs populären Sensoren/Aktoren gab es meiner Erfahrung nach 
eigentlich immer ein entsprechendes LUA-Modul. Aber man könnte natürlich 
auch Pech haben und ausgerechnet für den Sensor, den man gerade braucht, 
gibt es leider kein LUA-Modul.
Will sagen: Was die Unterstützung von externer Hardware angeht, sehe ich 
bei NodeMCU/ESP-LUA in der Praxis eher kein grosses Problem.

Die vglw. kleine Community von NodeMCU/ESP-LUA hingegen, da sehe ich in 
der Tat eine grossen Vorteil bei der C/C++-Programmierung per Arduino. 
Man findet halt wirklich ungleich leichter Tutorials, Code-Beispiele, 
Leute die einem helfen können usw.

Das grösste Problem bei NodeMCU/LUA auf dem ESP8266 ist meiner Erfahrung 
nach aber wirklich der begrenzte RAM. Beim ESP32 ist das keinerlei 
Problem mehr, aber bei den nur ca. 40kB nutzbaren RAMs beim ESP8266 
stösst man bei Verwendung von LUA halt doch vglw. schnell an die 
Grenzen, vor Allem wenn man nicht die Hinweise beachtet, wie man 
Speicher spart.

Einen Webserver/eine Weboberfläche direkt in NodeMCU/ESP-LUA zu 
programmieren bspw. ist zwar grundsätzlich kein Problem, aber auch 
schnell sehr speicherintensiv.
Und auch nur bedingt sinnvoll, denn in der Praxis hat man ja meist nicht 
nur einen einzigen per ESP angebundenen Sensor/Aktor, sondern gleich 
mehrere.
Sinnvoller ist es da normalerweise, dass alle ESPs die Messwerte der an 
sie angeschlossenen Sensoren (üblicherweise per MQTT) an einen zentrale 
Stelle (häufig einen Raspberry Pi) weiterleiten, wo die Daten dann 
aufbereitet, visualisiert etc. werden.

> So für den Einstieg hatte ich mir folgendes vorgenommen: Über einen
> Zeitraum von etwa einer Minute vom ADC möglichst viele samples lesen;
> rtcfifo scheint hierfür das richtige zu sein. Die dadurch gesammelten
> Messwerte dann weiterverarbeiten (Mittelwert, Aufintegrieren etc.) und
> zusammen mit den Rohdaten auf dem Webserver des ESP darstellen.

Ich bin skeptisch, ob rtcfifo da wirklich sinnvoll ist. Ich habe rtcfifo 
zwar nie benutzt, aber soweit ich das verstehe, ist rtcfifo vor Allem 
sinnvoll für Langzeitmessungen, wo man nur alle soundsoviel 
Sekunden/Minuten einen neuen Messwert einliest und den ESP zwischen 
diesen Samples zum Stromsparen in den Deep Sleep schickt.
Und man kann ja offenbar auch nur ca. 100 Messwerte speichern. Da Du ja 
aber "möglichst viele" Samples einlesen willst und den Deep Sleep 
vermutlich gar nicht benutzen willst, dürfte rtcfifo da weder nötig noch 
sinnvoll sein.

von Uwe B. (boerge) Benutzerseite


Lesenswert?


von Sebastian R. (sebr)


Lesenswert?

Joachim S. schrieb:
> Da Du ja
> aber "möglichst viele" Samples einlesen willst und den Deep Sleep
> vermutlich gar nicht benutzen willst, dürfte rtcfifo da weder nötig noch
> sinnvoll sein.

Ja da hast Du schon recht. Wie würdest Du denn die Daten sammeln?

Uwe B. schrieb:
> ...zur Inspiration:
>
> https://github.com/boerge42/Lua-Magie
> https://github.com/boerge42/nodemcu_scripts
>
> Grüße Uwe

Super, vielen Dank, sowas hab ich gesucht!

von Zach (Gast)


Lesenswert?

Basiert der Arduino-Kram eigentlich auf dem RTOS- oder dem NONOS-SDK? 
Letzteres ist ja EOL und hat noch unzählige Bugs, die wohl nie mehr 
gefixt werden.

von Stefan F. (Gast)


Lesenswert?

Zach schrieb:
> Basiert der Arduino-Kram eigentlich auf dem RTOS- oder dem NONOS-SDK?

Noch basiert er auf dem NONOS-SDK, die Entwickler haben aber gerade 
geschrieben, dass sie einen Wechsel auf RTOS erwägen - was bitte niemand 
als Ankündigung missverstehen soll.

Noch sind sie damit beschäftigt, die zahlreichen Probleme zum 
umschiffen, die der Upgrade auf Espressif SDK 2.0 (und folgende) mit 
sich gebracht hat.

Das NONOS-SDK Version 1.5.4 auf dem der Arduino Core 2.3.0 basiert, hat 
nur wenige offene Bugs. Viele davon umschifft der Arduino Core 
automatisch. Die haben da auch einige Patches eingebracht.

Die Liste der offenen Bugs in Version 2.x ist jedoch episch.

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.