Raspberry Pi - podpora GPIO s nainstalovaným LibreELEC
Rozhodl jsem se přejít z OpenELEC, který už není dále vyvíjený, na LibreELEC. To s sebou přineslo nutnost zrevidovat postupy na zfunkčnění vypínacího tlačítka, které jsem v Openelecu používal, protože mezi OpenELEC a LibreELEC jsou určité drobné rozdíly..
Nejprve je potřeba v LibreELECu nainstalovat doplněk RPi.GPIO. Ten se ukrývá v balíčku
Raspberry Pi Tools ve standardním repozitáři. Tedy musíme jít do menu Systém / Nastavení / Doplňky / Instalovat z repozitáře / LibreELEC Add-ons / Doplňky programů a zde musíme povolit Raspberry Pi Tools. A od tohoto okamžiku je možné začít programovat GPIO na Raspberry Pi.
Knihovna RPi.GPIO je v LibreELEC nainstalována na cestu
/storage/.kodi/addons/virtual.rpi-tools/lib
. (Je použita jiná cesta, než v OpenELEC.)
Nezapomeňte na začátku programu uvést cestu ke knihovně RPi.GPIO:
import sys
sys.path.append("/storage/.kodi/addons/virtual.rpi-tools/lib")
Pokud jste při instalaci LibreELEC nebo dodatečně povolili SSH, můžete se nyní třeba pomocí programu
putty.exe přihlásit, jméno je root, heslo libreelec. Příklad programu, který jsem použil:
#!/bin/sh
# shutdown script pro Raspberry Pi Hlida, zda se na GPIO17 objevi nizka
# uroven a pokud ano, Raspberry se uspi. Na GPIO27 je mozno pres odpor
# pripojit LED diodu, ktera zhasne v okamziku, kdy je zahajeno vypinani.
# Je mozno ji nechat treba zablikat, jak jsem videl v nekterych navodech
# na internetu, ale to jsem nedelal
import sys
sys.path.append('/storage/.kodi/addons/virtual.rpi-tools/lib')
import RPi.GPIO as GPIO
import os
import time
# pouzijeme cislovini podle GPIO (podle toho, jak to ma ocislovane
# Broadcom)
GPIO.setmode(GPIO.BCM)
# nastavime GPIO27 jako vystup a nastavime na nem logickou 1, dioda
# sviti
GPIO.setup(27, GPIO.OUT)
GPIO.output(27, True)
# nastavime GPIO14 jako vystup
# a nastavime na nem logickou 1
# tento vystup pridrzuje zdroj, bude aktivni tak dlouho, dokud Raspberry
# uplne nespadne. Pouzivam ho k pridrzeni rele, ktere Raspberry
# odpojuje od napajeni
GPIO.setup(14, GPIO.OUT)
GPIO.output(14, True)
# nastavime GPIO17 jako vstup
GPIO.setup(17, GPIO.IN)
# smycka, ktera kazde pul sekundy kontroluje uroven napeti na GPIO17 a
# ceka na nizkou uroven, v takovem pripade zhasne LED na GPIO27 a
# Raspberry vypne.
while True:
if not (GPIO.input(17)):
GPIO.output(27, False)
os.system("shutdown -h now")
time.sleep(.5)
Tento kód jsem uložil na cestu /storage/downloads/ do souboru shutdown.py. Adresář downloads jsem si vytvořil.
POZOR na správné odstavce (počty mezer) na začátku posledních čtyřech řádků.
Zajistit
automatické spouštění tohoto skriptu je možné v souboru /storage/.config/autostart.sh.
Pokud ještě neexistuje (po čisté instalaci LE neexistuje, tedy pokud jste ho nevytvořili sami, tak tam není), je možné ho vytvořit třeba přes SSH příkazem:
echo "#!/bin/sh" > /storage/.config/autostart.sh
(Nemusíte to do okna terminálu vypisovat ručně, stači to odtud zkopírovat pomocí CTRL+C a kliknout do okna SSH terminálu PRAVÝM tlačítkem myši).
Následně souboru autostart.sh přiřadíme právo spouštění:
chmod +x /storage/.config/autostart.sh
a otevřeme ho v editoru nano
nano /storage/.config/autostart.sh
a upravíme ho tak, aby měl tento obsah:
#!/bin/sh
(
python /storage/downloads/shutdown.py &
)&
Vypínací tlačítko Raspberry Pi pro LibreELEC
Rezistor u LED diody bude mít velikost třeba 270 Ohmů, velikost můžete vyzkoušet, závisí na použité barvě LED diody a požadovaném jasu. Napětí na výstupu je 3.3V, maximální povolený proud z jednoho výstupu je 16 mA, tedy rezistor pro LED diodu můžete v případě potřeby zmenšit i na 100 ohmů. Některé modré a bílé LED diody nemusí svítit nebo budou svítit málo, protože pro plný jas potřebují napětí až 3.5V, které není k dispozici.
Poznámka: LibreELEC - zastavení HDD při nečinnosti
Pokud máte k Raspberry připojený HDD a chcete, aby se po deseti minutách nečinnosti zastavil, stačí nainstalovat doplněk
System tools (Systém / Nastavení / Doplňky / Instalovat z repozitáře / LibreELEC Add-ons / Doplňky programů) a následně zajistit jeho automatické spouštění přidáním dalších tří řádků do výše vytvořeného souboru autostart.sh:
(
/storage/.kodi/addons/virtual.system-tools/bin/hd-idle start
)
Program HD-IDLE bez parametrů zastaví po deseti minutách nečinnosti všechny HDD připojené k Raspberry. Pokud vám výchozí nastavení (10 minut / všechny disky) nevyhovuje, možné parametry najdete na stránce programu hd-idle
http://hd-idle.sourceforge.net/
Poznámka 2: Migrace z OpenELEC na LibreELEC
Protože mi do LibreELEC 7.0.2 nešel po čisté instalaci nahrát plugin iVysílání ČT (součást českých doplňků Kodi
http://kodi-czsk.github.io/repository/ - je to doplněk Kodi, tedy by měl fungovat v OpenELEC i v LibreELEC), nainstaloval jsem OpenELEC 6.0.3, do něj české doplňky, aktivoval jsem plugin iVysílání a zkusil jsem migrovat na LibreELEC 7.0.2 metodou popsanou na stránce
https://libreelec.tv/downloads/, to značí uložením migračního .tar souboru do adresáře /storage/.update/ a restratu Raspberry.
První překvapení bylo, že migrace trvala několik (8) hodin.
Následně mě čekalo další překvapení, že po spuštění LibreELEC v naprosté většině menu chyběl text. Bylo nutno se "poslepu" doklikat do menu " Systém ( = poslední menu vpravo, ale zrovna toto menu nechybělo ) / Nastavení ( = první záložka zleva) / Vzhled ( = první menu shora ) / Mezinárodní ( = druhé menu shora )", tady nastavit jazyk na prvním řádku shora "Czech". Objevilo se hlášení o instalaci jazykového balíčku a pak už bylo všechno v pořádku. Následně jsem nastavil rozlišení obrazovky a zkalibroval ji.
Zmigrovaly se uživatelská nastavení, nainstalované doplňky, playlisty a dokonce i mnou vytvořené skripty pro startovací tlačítko. I ten doplněk iVysílání ČT, kvůli kterému jsem toto martýrium podstoupil, se zmigroval v pořádku a funguje.
Co jsem si všiml,
po migraci zůstaly nainstallované doplňky na původních cestách, tedy je rozdíl, jestli doplněk do LibreELECu nově nainstalujeme, nebo zmigrujeme, tedy pozor na to při psaní skriptů pro startovací tlačítko.