mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Stefan L. (stefanl38)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Linksammler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan L. (stefanl38)
Datum:

Bewertung
0 lesenswert
nicht 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
-- Servo Control by UDP
-- http://www.esp8266.com/viewtopic.php?f=19&t=794

if(pl==nil) then
pl=1500
end
port=88
pin=9
srv=net.createServer(net.UDP)
srv:on("receive", function(srv, pl)
   print("Command Reveived")
   print(pl)
--servo code
gpio.mode(pin,gpio.OUTPUT)
tmr.alarm(20, 1, function()  
gpio.write(pin,gpio.HIGH)
tmr.delay(pl)
gpio.write(pin,gpio.LOW)
end)
 --servo code
   end)
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
"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
Autor: c-hater (Gast)
Datum:

Bewertung
-1 lesenswert
nicht 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
>
>
> "srv:on("receive",...  "
> 
> 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.

Autor: Dr. No (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein bißchen Lektüre:

http://filepi.com/i/BMDQdHU

Autor: Stefan L. (stefanl38)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Claus Kühnel (Gast)
Datum:

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

Autor: Scelumbro (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.