Der einfache Einstieg in NodeMCU Lua
Lua ist zwar keine wirklich, objektorientiert Skriptsprache aber im Umfang mit NodeMCU sehr kompakt und leicht verständlich. Zum besseren Verständnis von folgenden Beispielen zunächst ein paar wesentliche Grundlagen. Dabei sollen lediglich ein paar Grundlagen von Lua vermittelt werden, detaillierte Dokumentationen finden sich im Internet.
Um ein Lua Programm zu schreiben bedarf es keinerlei Entwicklungsumgebung. Lua basierende ESP8266 Module verfügen über einen Interpreter der ein Lua Skript beim Aufruf in Maschinencode übersetzt und ausführt. Dementsprechend kann man ein Lua basierendes Programm in jedwedem Editor schreiben und alsbald man die Datei mit der Endung .lua speichert hat man auch schon ein ausführbares Programm.
Grundlegende Lua Datentypen
Nachfolgend werden einige der Lua Datentypen erklärt und vermittelt. Zwar verfügt Lua über einige mehr an Datentypen wie beispielsweise Table / Array zum sammeln und ordnen einer Vielzahl von Daten unterschiedlichster Datentypen. Der Einsatz von Tables ist zwar ein sehr gutes und auch mächtiges Werkzeug, der Einfachheit wegen wird allerdings im Nachfolgenden verzichtet.
Lua ist keine typisierte Skriptsprache, dass heisst der Datentyp bestimmt sich stets aus dem Wert, beispielsweise
Datentyp | Beispiel |
number | 123456 Zahlen |
string | “ist ein Text” alle Zeichen ausser Zahlen |
boolean | true oder false richtig oder falsch |
function | Funktion |
nil | null (kein Wert) |
Die Lua Variablen
Variablen sind im Eigentlichen als Behälter für jedwede Daten zu verstehen. Bei dem Aufruf einer Variablen gibt Lua den in der Variablen abgelegten Wert zurück. Das Deklarieren einer Variablen ist denkbar einfach:
variable = "Das ist der Wert der variable"
Grundlegend gibt es 2 Typen an Lua Variablen:
- globale_variable = “ein globaler Wert der stets besteht”
- local lokale_variable = “besteht nur innerhalb einer Funktion”
Gerade im Bezug des sehr begrenzten Speichers von ESP8266 Modulen sind diese 2 Variablentypen sehr wesentlich. Legt man stets nur globale Variablen fest führt das zu einem unnötigen Bedarf an Speicherplatz.
Somit sollte man grundlegend bei Variablen stets lokale Variablen bevorzugen und globale Variablen nur dann einsetzen wenn sie auch benötigt werden. Im praktischen Sinn verwendet man in Funktionen meist lokale Variablen die nach dem die Funktion durchgelaufen und abgeschlossen wurde wieder verwirft.
Hierbei gibt es zusätzlich ein sehr sinnvolles Werkzeug innerhalb von Lua den Carbage Collector. Der Carbage Collector wird nach dem Aufruf einer Funktion aufgerufen um sämtliche Daten die nicht mehr benötigt werden zu entsorgen.
Diesbezüglich kann man sowohl die Variablen Kennzeichnung local einer Variablen zuordnen oder aber man ruft am Ende einer Funktion den Carbage Collector wie folgt auf
collectgarbage();
Des Weiteren gilt zu beachten das Lua Case Sensitive ist, das heisst Lua unterscheidet zwischen Groß- und Kleinschreibung.
variable = "das ist eine Variable"
Variable = "das ist eine andere Variable"
Der Lua Datentyp number
Der Datentyp number erstellt sich aus Zahlen. Hier unterscheiden sich auch die 2 Versionen einer Lua Firmware
- integer
- float
Integer bezieht sich auf typische Ganzzahlen was den Vorteil mit sich bringt entsprechend weniger Speicher zu benötigen. Diesbezüglich ist eine integer basierende Lua Firmware stets kleiner als eine float basierende Firmware.
float bezieht sich auf Gleitkommazahlen. An dieser Stelle sei erwähnt im Eigentlichen gibt es in Lua lediglich float. NodeMCU basiert im Detail auf eLua einem Lua Derivat für embedded Systems. Diesbezüglich wird man im eigentlichen Lua die Differenzierung zwischen integer und float nicht finden, da number in Lua stets float, eine Gleitkommazahl repräsentiert.
Der Lua Datentyp string
Ein string ist kennzeichnend für typischen Text bzw. eine Kette aneinander gereihter Zeichen. Der Anfang eines Strings wird durch vorangestellte Anführungszeichen und das Ende eines Strings durch nachfolgende Anführungskennzeichen bestimmt.
variable = "Das ist ein String"
Der Lua Datentyp boolean
Die Werte des Datentyps boolean bestimmen sich durch
- true
- false
Ein boolean wird zur Überprüfung von Wahrheitswerten verwendet, als Beispiel
1 < 2 = true
1 > 2 = false
Der Datentyp boolean ist gerade im Bezug von Funktionen als Vergleichswert elementar, wenn true dann das ausführen…, wenn false dann etwas anderes ausführen.
Der Lua Datentyp nil
Der Datentyp nil ist gleichbedeutend mit null. Das heisst greift man auf eine Variable zu die keinen Wert hat so wird nil zurückgegeben. Gleichwohl gibt Lua bei falschen Funktionsaufrufen und Methoden nil zurück.
Der Lua Datentyp function, die Lua Funktionen
Der Datentyp function steht bezeichnend für ein Anordnung verschiedenster Methoden und Routinen. Funktionen werden stets durch
- function initiert
- gefolgt von einem expliziten Bezeichner (Namen)
- gefolgt von einer öffnenden und einer schließenden runden Klammer
- dann kommt die Ansammlung der Methoden
- end deklariert das Ende der Funktion
als Beispiel
function meinefunktion() print("meinefunktion wird ausgeführt") end
Im obigen Beispiel wird weiterhin gezeigt wie eine Funktion aufgerufen wird
print("meinefunktion wird ausgeführt")
Zwar ist print eine in Lua implementierte Funktion, dennoch erkennt man unschwer das der Aufruf einer Funktion durch den Funktionsnamen gefolgt von einer öffnenden und einer schliessenden rund Klammer erfolgt.
Des Weiteren kann man an Funktionen beim Aufrufen entsprechende Parameter übergeben. Im vorgenannten Beispiel den String “meinefunktion wird ausgeführt”.
Nachfolgend eine Funktion sowie deren Aufruf als auch die Übergabe eines Parameters:
zahl = 10 function rechne(zahl) local ergebnis = zahl * 2 print(Ergebnis) end
Am obigen Beispiel erkennt man das Multiplikationszeichen * bereits ein weiteres wichtiges Element. Über welche Operatoren NodeMCU Lua verfügt und wie man sie einsetzt wird hier erklärt.