Lua-Modul für den Pi

Lua-Modul für Raspberry Pi
Dieses Paket enthält ein Lua-Modul um die GPIOs auf dem Raspberry Pi anzusteuern.
Die Hauptfunktion wird vom RPi.GPIO Python Modul von Ben Croston bereitgestellt.
Folgende Funktionen sind implementiert:
Pin-Funktionen:
- setup
- cleanup
- input
- output
- setmode
- gpio_function
- setwarnings
Interrupts und Events:
- wait_for_edge
- event_detected
- add_event_detect
- remove_event_detect
- add_event_callback
PWM:
- newPWM
- start
- ChangeFrequency
- ChangeDutyCycle
- stop
Installation (manuell)
Lade die beiden GPIO Quellpakete (siehe Links unten) herunter und folge den enthaltenen Anweisungen.
Installation (luarocks-Paket, beschrieben für Raspbian)
sudo apt-get install lua5.1 liblua5.1-0-dev sudo apt-get install luarocks sudo luarocks install rpi-gpio # für PWM und Events: sudo luarocks install copas sudo luarocks install darksidesync # für das Modul GPIO.lcd-hd44780: sudo luarocks install bit32
Beispiel: Simon-Spiel
Simon ist ein elektronisches Merkspiel: Vier LEDs leuchten zufällig auf, bei jeder LED wird ein kurzes Tonsignal ausgegeben. Der Spieler drückt anschließend für jede LED einen Button. Hat er die Sequenz richtig eingegeben, leuchtet in der nächsten Runde eine LED mehr auf.Vorbereitung:
- 4 LEDs und 5 Taster an die GPIO-Pins des Pi anschließen (siehe Arrays buttons und leds)
- Lautsprecher an den Pi anschließen
- Die beep*.ogg Dateien aus ~/python_games ins Skriptverzeichnis kopieren
- ggfs. Lautstärke anpassen:
amixer cset numid=1 -- 100%
- ogg123 installieren:
sudo apt-get install vorbis-tools
- Falls Unknown PCM cards.pcm.front geloggt wird: In /usr/share/alsa/alsa.conf "pcm.front cards.pcm.front" durch "pcm.front cards.pcm.default" ersetzen
01 GPIO=require "GPIO" 02 03 btnExit = 21 04 buttons = {7, 15, 13, 11, btnExit} 05 leds={12, 16, 18, 26} 06 07 GPIO.setmode(GPIO.BOARD) 08 GPIO.setwarnings(False) 09 math.randomseed(os.time()) 10 11 for k,v in pairs(buttons) do 12 GPIO.setup(v, GPIO.IN, GPIO.PUD_DOWN) 13 end 14 15 for k,v in pairs(leds) do 16 GPIO.setup(v, GPIO.OUT) 17 end 18 19 flashLED = function (cycles) 20 for x=1, cycles*2 do 21 for k,v in pairs(leds) do 22 GPIO.output(v, x%2); 23 end 24 os.execute("sleep 0.2") 25 end 26 end 27 28 beep = function(num, wait) 29 GPIO.output(leds[num], 1) 30 os.execute("ogg123 --quiet -K1 beep"..num..".ogg") 31 GPIO.output(leds[num], 0) 32 if wait==true then os.execute("sleep 0.1") end 33 end 34 35 quit=function() 36 GPIO.cleanup() 37 os.exit() 38 end 39 40 flashLED(3) 41 42 playlist = {} 43 44 while true do 45 46 playlist[#playlist+1] = math.random(4) 47 48 for k,v in pairs (playlist) do 49 beep(v, true) 50 end 51 52 for k,v in pairs (playlist) do 53 waitForUser=true 54 while waitForUser do 55 56 for kb,vb in pairs(buttons) do 57 if GPIO.input(vb) == true then 58 if (vb~=buttons[v]) then 59 if vb~=btnExit then os.execute("ogg123 --quiet gameover.ogg") end 60 quit() 61 else 62 beep(v, false) 63 end 64 waitForUser=false 65 end 66 end 67 end 68 end 69 70 flashLED(1) 71 end
Download (0.1)
RPi.GPIO.Lua Modul (5 KB)
Download (Fork mit PWM und Events, 0.2.x)
- http://sourceforge.net/projects/raspberry-gpio-python/
- https://github.com/Tieske/rpi-gpio/tree/master/lua/scripts
- https://github.com/Tieske/rpi-gpio/
- https://github.com/Tieske/DarkSideSync
- https://github.com/Tieske/rpi-gpio/blob/master/lua/scripts/test6_callbacks.lua
- https://github.com/Tieske/rpi-gpio/blob/master/lua/README.md
Pi&More 5 Präsentation
Foliensatz und Beispielcode (1.1 MB)