Ovládání pomocí GPIO tlačítek mám již vyřešeno
. Nebylo to však na první pokus a musel jsem řešit komplikace se správným formátem příkazu (chyba syntaxe) a další problém byl v limitaci, kdy OpenELEC nebral více jak 20 stisků za minutu
.
Než se pustíte do prvního skriptíku, tak je potřeba mít nainstalovaný doplněk
RPi.GPIO (je součástí repozitáře OpenELEC/LibreELEC).
Tlačítko jsem zapojil nejednoduším způsobem, to jest pin GPIO (zelený) a GND (černý).
Pro ty co budou začínat je vhodné si vyzkoušet zda tlačítko funguje a je správně zapojeno.
Jako příklad uvedu test tlačítka na OpenELEC zapojeného přes pin č.
7 (hardwarové značení).
Dále už jsem postupoval přes PuTTY:
1. pro pořádek jsem vytvořil složku ve které budu mít skripty uložené:
2. přejdu do složky a vytvořím soubor s názvem test.py
Kód:
cd ./skript
nano test.py
3. a do něj vložit (samozřejmě upravit podle použitého pinu)
Kód:
import sys
sys.path.append('/storage/.kodi/addons/python.RPi.GPIO/lib')
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_UP)
print "cekam na stisk tlacitka"
GPIO.wait_for_edge(7, GPIO.FALLING)
print "tlacitko bylo stisknuto"
4. nyní si skript spustíme
5. v případě že máme správně zapojeno a zapsáno, dostaneme po stisknutí :
Kód:
tlacitko bylo stisknuto
Takto jednoduše si otestujeme jakékoliv tlačítko zapojené do GPIO.
Z předchozího víme že nám tlačítko funguje, takže zbývá zadat co se má stát po jeho stisknutí.
Při brouzdání po netu jsem objevil seznam vestavěných funkcí, díky kterým můžu mapovat dle libosti. Pomocí tohoto seznamu plně nahradím Keymap editor + další, např. probuzení CEC, vyčištění knihovny, vysunutí /zasunutí mechaniky, spuštění konkrétního streamu/videa, otevření vybraného doplňku ...
Kompletní seznam najdete zde: http://kodi.wiki/view/list_of_built-in_functions
Pro názornost uvedu příklad, kdy budu chtít "namapovat" tlačítka připojené k pinu č.
29,
31,
33,
35,
37 a přiřadím jim funkce: pohyb vlevo, pohyb vpravo, restart, spuštění spořiče a spuštění doplňku Sosáč.
Kód:
import sys
sys.path.append('/storage/.kodi/addons/python.RPi.GPIO/lib') #cesta ke GPIO knihovne
import RPi.GPIO as GPIO #importuji GPIO knihovnu
import time #importuji time knihovnu pro casovaci instrukce
import os #mimo jiné potřeba pro zadavani prikazu, v nasem pripade funkci
GPIO.setmode(GPIO.BOARD) #pouzije se HW označení pinu
#nastaveni konkretnich pinu a pripojeni vnitrniho Pull-Up odporu(integrovan na RPi)
GPIO.setup(29, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(31, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(33, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(35, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(37, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True: #vytvoreni nekonecne smycky, ktera neustale kontroluje, zda bylo tlacitko stisknuto
if not ( GPIO.input(29)): #po stisknuti tlacitka ...
os.system('kodi-send --action="Action(left)"') #...se spusti tento prikaz(pohyb vlevo)
time.sleep(1) # odruseni zakmitů při rozpínání tlacitka po dobu 1s
if not (GPIO.input(31)):
os.system('kodi-send --action="Action(right)"') #pohyb vpravo
time.sleep(1)
if not (GPIO.input(33)):
os.system('kodi-send --action="Reboot"') #restart
time.sleep(1)
if not (GPIO.input(35)):
os.system('kodi-send --action="ActivateScreensaver"') #sporic obrazovky
time.sleep(1)
if not (GPIO.input(37)):
os.system('kodi-send --action="RunAddon(plugin.video.sosac.ph)"') #sposteni doplnku Sosac
time.sleep(1)
aby se nám skript spustil automaticky po zapnutí RPi je potřeba vytvořit soubor autostart.sh (/storage/.config/autostart.sh) a vložit do něj:
Kód:
python /storage/skript/test2.py &
samozřejmě cestu a název skriptu si upravíte podle svého.
Prozatím by to mohlo stačit , snažil jsem se popisovat celkem podrobně, aby se chytli i začínající uživatelé jako já
.