Forum: Mikrocontroller und Digitale Elektronik ESP8266 mit NodeMCU-Firmware Einführung in Lua gesucht


von Stefan L. (stefanl38)


Lesenswert?

Hallo,

ich experimentiere mit dem ESP8266.
Die Standard-Firmware die mit "AT"-Befehlen arbeitet ist irgendwie 
buggy.

Jetzt habe ich die nodeMCU-Firmware entdeckt.
Hier http://benlo.com/esp8266/esp8266QuickStart.html

gibt es eine Website die den Einstieg supereinfach macht.

Flashtool runterladen
nodeMCU-Firmware flashen
LuaLoader runterladen
und los geht's.

Habe jetzt seit mehreren Tagen dieses DS1820-Demo am laufen
http://www.instructables.com/id/Low-cost-WIFI-temperature-data-logger-based-on-ESP/?lang=de&ALLSTEPS

Jetzt suche ich ein Lua-Tutorial dass nicht nur so kleine 
Beispiel-proggies wie die die bei Lua for Windows mitgeliefert werden 
enthält sondern tiefer geht.

Hat da schon jemand was gefunden?

viele Grüße

Stefan

: Bearbeitet durch User
von Linksammler (Gast)


Lesenswert?

Hier gibts Beispiele:

http://www.esp8266.com/viewforum.php?f=19


ansonsten ist LUA jetzt keine so außergewöhnlich andere Sprache, viele 
Konzepte "kennt man", z.B. Closures aus Javascript, und ein paar 
Besonderheiten sind schnell gelernt.

Wenn du schon C kannst, hier mal die ersten paar Slides durchschauen:

https://docs.google.com/presentation/d/1wU7QwUQGved6jpnn-oYHjv9sU3d9TlqEvhv_TqyAZwM/edit?pli=1#slide=id.i0

von Stefan L. (stefanl38)


Lesenswert?

Hallo Linksammler,

vielen Dank für deine Antwort.
hm vielleicht muss ich noch etwas präzisieren:
C und Java/Javascript kenne ich nicht. Ich kenne bis jezt Basic, Delphi 
und SPIN.

Hier mal ein Lua-Beispiel das ich nicht verstehe
1
-- Servo Control by UDP
2
-- http://www.esp8266.com/viewtopic.php?f=19&t=794
3
4
if(pl==nil) then
5
pl=1500
6
end
7
port=88
8
pin=9
9
srv=net.createServer(net.UDP)
10
srv:on("receive", function(srv, pl)
11
   print("Command Reveived")
12
   print(pl)
13
--servo code
14
gpio.mode(pin,gpio.OUTPUT)
15
tmr.alarm(20, 1, function()  
16
gpio.write(pin,gpio.HIGH)
17
tmr.delay(pl)
18
gpio.write(pin,gpio.LOW)
19
end)
20
 --servo code
21
   end)
22
srv:listen(port)

Was ich ja noch raffe ist das
bei srv=net.createServer(net.UDP)

"srv" so eine Art Aliasname ist

Was ich nicht verstehe ist wieso
da einmal function mit Parametern
function(srv, pl)
und einmal ohne Parameter steht
tmr.alarm(20, 1, function()

und dann taucht da noch
srv:listen(port)
Ich vermute "listen(port)" ist eine Methode des Serverobjekts "net".


Was ich noch nicht gefunden habe ist ein Manual was Dinge wie 
"listen(port)" erklärt

Oder woher kann ich nachlesen, dass es einen Aufruf
1
"srv:on("receive",...  "
gibt und welche Parameter da sonst noch definiert sind.

Da wäre  ich sehr dankbar für links.

viele Grüße

Stefan

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Stefan Ludwig schrieb:

> hm vielleicht muss ich noch etwas präzisieren:
> C und Java/Javascript kenne ich nicht. Ich kenne bis jezt Basic, Delphi
> und SPIN.

Also Delphi und Basic kannst du sicher nicht wirklich, höchstens in den 
primitivsten Grundzügen, sonst könntest du den LUA-Code verstehen. Der 
benutzt keinerlei Konzepte, die es in Delphi oder (neuzeitlichem) Basic 
nicht auch ganz analog gäbe. Eigentlich gibt es diese Konzepte sogar in 
jeder objektorientierten prozeduralen Sprache.

> Was ich ja noch raffe ist das
> bei srv=net.createServer(net.UDP)
>
> "srv" so eine Art Aliasname ist

Nein, das ist einfach nur eine Variable, die auf ein Objekt zeigt. Gibt 
es in jeder OO-Sprache, also natürlich auch in Delphi und VB.net. Wenn 
es in Delphi oder VB.net eine Net-Klasse gäbe und in diesen jeweils eine 
Factory-Methode CreateServer(Protocol) gäbe, die eine Instanz der 
Server-Klasse liefert, würde die ganze Sache in den beiden Sprachen 
praktisch genauso wie in LUA benutzt werden:

Delphi:
...
var
 srv: Server;
begin
 srv:=Net.CreateServer(UDP);
...

VB.net:

...
dim srv as Server=Net.CreateServer(UDP)
...

> Was ich nicht verstehe ist wieso
> da einmal function mit Parametern
> function(srv, pl)
> und einmal ohne Parameter steht
> tmr.alarm(20, 1, function()

Das sind auch wieder ganz gundlegendste Konzepte, nämlich Funktionstypen 
im Allgemeinen, die gibt es schon in prozeduralen nicht-OO-Sprachen, 
hier geht es aber spezieller um die OO-Ausprägung als Ereignis-Handler.

Natürlich können und müssen Funktionstypen je nach Aufgabe 
unterschiedliche Funktionsprototypen haben können. Die Alarmroutine 
eines Timers braucht keine Parameter, denn die einzige Information 
"Timer ist abgelaufen" wird bereits durch die Tatsache des Aufrufs des 
Ereignishandlers übermittelt.

Beim Empfangshandler eines Servers braucht man hingegen Parameter. Den 
Verweise auf den Server braucht man z.B., um diesen befragen zu können, 
von welchem Client denn die empfangene Nachricht kam. Und dass der 
Verweis auf die empfangene Nachricht nützlich ist, erschließt sich ja 
wohl von selbst, oder nicht?

> und dann taucht da noch
> srv:listen(port)
> Ich vermute "listen(port)" ist eine Methode des Serverobjekts "net".

Nein, das ist eine Methode der Klasse Server, konkret angewendet auf 
eine Instanz dieser Klasse, also ein Objekt, nämlich genau das, auf das 
die Objektreferenz srv verweist.

Mein Gott, das ist doch alles ganz genau wie z.B. in Delphi oder VB.net. 
Also nochmal: du beherrschst keine dieser beiden Sprachen, 
höchstwahrscheinlich sogar überhaupt keine OO-Sprache.

> Oder woher kann ich nachlesen, dass es einen Aufruf
>
>
1
> "srv:on("receive",...  "
2
>
> gibt und welche Parameter da sonst noch definiert sind.

Das sollte in der Dokumentation der Server-Klasse stehen, da es sich ja 
offensichtlich um ein Ereignis eben dieser Klasse handelt. 
Möglicherweise ist es aber auch ein Ereignis, was die Server-Klasse von 
irgendeiner Vorfahr-Klasse erbt. Dann muß man den Vererbungsbaum von 
Server aufsteigend folgen, bis man die Klasse gefunden hat, die das 
Ereignis einführt.

Auch wieder ganz normale OO-Konzepte.

von Dr. No (Gast)


Lesenswert?

Ein bißchen Lektüre:

http://filepi.com/i/BMDQdHU

von Stefan L. (stefanl38)


Lesenswert?

Hallo c-hater,

also erst mal ein freundliches Dankeschön fürs Antworten.

Wenn ich Delphi "nur in den primitivsten Grundzügen kenne" hat das 
immerhin dafür gereicht 5 Jahre in einer Maschinenbaufirma als 
Softwareentwickler zu arbeiten. Wenn ich 2007 dort nicht aufgehört hätte
wäre ich wohl immer noch dort. Du wirst jetzt wahrscheinlich denken
"kein Wunder dass es mit der deutschen Wirtschaft nicht bergauf geht" 
;-)
Wie auch immer. Es hat dir vermutlich Spaß gemacht mit möglichst vielen
Fachbegriffen zu antworten.

Inzwischen bin ich fündig geworden was die Dokumentation von Lua angeht:
https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en
(nodeMCU basiert auf eLua)

Zu "on": Es gibt da
net module
    net.createServer()
    net.createConnection()

net.server sub-module
    net.server:listen()
    net.server:close()

net.socket sub-module
    net.socket:connect()
    net.socket:send()
    net.socket:on()

Also wahrscheinlich wachsen die Veerbungsbäume von oben nach unten
wenn "on" zu einem submodule von net gehört. Vielleicht schreibe ich 
aber
aus Ahnungslosigkeit auch wirres Zeug ;-)
Nun ja.

@Dr. No:
YES!!! That's it!. Der Einzeiler von Dr. No trifft genau ins Schwarze.

Vielen herzlichen Dank dafür. Ich habe ja auch gegoogelt. Aber das habe 
ich nicht gefunden. Da kann ich wohl auch was in Sachen googeln 
dazulernen.
Mit welchen Suchstichworten haste das denn gefunden?

"Beginning Lua Programming"  673 Seiten! Wow!
Das nenne ich mal eine ausführliche
Beschreibung  Anleitung  Manual / Dokumentation zur Programmiersprache 
Lua.

Da habe ich ja jetzt in der Tat ordentlich was zu lesen....

viele Grüße

Stefan

von Claus Kühnel (Gast)


Lesenswert?

Hier findest Du die Lua Doku für NodeMCU (http://www.nodemcu.com/docs/)
Gruss Claus

von Scelumbro (Gast)


Lesenswert?

Das (etwas veraltete) Buch zu Lua 5.0 gibts online:
http://www.lua.org/pil/contents.html
Da steht alles wichtige drin, was es über Lua zu wissen gibt.

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.