Ich würde gern LUA etwas mehr mit dem Pi in Verbindung bringen und pushen, da ich glaube dass es sehr Anfänger-Freundlich ist
sudo apt-get update
#sudo apt-get install lua5.3 liblua5.3-dev # lua5.1 wird von raspi-config verwendet und muesste vorher deinstalliert werden.
sudo apt-get install luarocks
luarocks ist ähnlich wie pip eine Paketverwaltung.
Manche Module sind auch über apt-get verfügbar: apt-cache search '^lua-.*'
Durch ausführen vom Konsolen Befehl lua beziehungsweise lua5.3 gelangt man ebenso wie in Python, in eine interaktive lua Konsole.
Um GPIO's anzusprechen gibt es mehrere LUA-Module...
rpi-gpio ist leider veraltet und wurde seit 3 Jahren nicht mehr weiterentwickelt und basiert auf dem Python Module RPi.GPIO.
rpio verwendet leider nur das sysfs und ermöglicht somit leider nicht volle Funktionalität.
lua-periphery scheint die beste Wahl zu sein und unterstützt auch andere embedded Linux Systeme sowie I2C, SPI und Serial.
Anwendungsbeispiele finden sich hier => https://github.com/vsergeev/lua-periphery#examples
Genauere Details finden sich hier => https://github.com/vsergeev/lua-periphery/tree/master/docs
Das Module verwendet übrigens BCM also GPIO#.
Ähnlich wie in Python, definiert man Funktionen wenn sich Code mehrmals wiederholen würde...
In LUA gibt es leider eine Besonderheit die ich direkt vorweg erwähnen möchte: ANSI C unterstützt kein sleep und somit sollte man sich direkt eine Funktion dafür definieren... Ich persönlich bevorzuge:
Weitere gibt es hier => http://lua-users.org/wiki/SleepFunction
Das lua-periphery Module liefert hierfür aber auch einige Funktionen sog. Helper Functions
local periphery = require('periphery')
periphery.sleep(2) -- seconds
periphery.sleep_ms(2000) -- milliseconds
periphery.sleep_us(2000000) -- microseconds
Ein Beispiel um eine LED blinken zu lassen:
local GPIO = require('periphery').GPIO
local gpio_led = GPIO(12, "out")
function sleep(s)
local ntime = os.clock() + s
repeat until os.clock() > ntime
end
flashLED = function(cycles, wait)
local cycles = cycles or 2
local wait = wait or 0.5
for x=1, cycles do
gpio_led:write(true)
sleep(wait)
gpio_led:write(false)
sleep(wait)
end
end
flashLED() -- use defaults
flashLED(1) -- flash 1x
flashLED(3, 1) -- flash 3x and wait 1sec
Alles anzeigen