• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Zdravím hosta! Přihlášení Registrace


Hodnocení tématu:
  • 0 Hlas(ů) - 0 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
RPi- ovládání pomocí GPIO tlačítek ? (vyřešeno)
#1
Měl bych dotaz, jestli nemá někdo zkušenost s mapováním tlačítek. Mám v plánu vytvořit z RPi radio, které se bude převážně ovládat přes telefon. Rád bych ale k rpi připojil pár tlačítek, kterým bych přiřadil základní funkce jako play, stop, next,  či spuštění konkrétního souboru - streamu. Ideálně kdyby to šlo přes OpenELEC/LibreELEC, případně Raspbian-Kodi. Díky za reakce.
RPi 2 - BerryBoot - LibreELEC 7.0.2 + Retropie 4.0.2 + Raspbian PIXEL + LibreELEC Krypton 7.90.006
 
Citovat
#2
Jelikož to je linux, tak to bude fungovat pod Lirc. poohlédni se po lirc.conf ten bude pravděpodobně ve /storage/.config a po lircmap.xml ve usr/share/xbmc/system u openelec to bude asi ve /storage/.kodi/userdata/. V tvém případě pokud vše funguje tak budeš chtít pouze přemapovat tlačítka, takže tě bude zajímat jen lircmap.xml. Není to žádná věda kdysi jsem si dělal celý ovladač ještě pod MythTV a nedávno upravoval pod Kodi pár tlačítek, takže to je otestované že to maká.
 
Citovat
#3
Toto [Only registered and activated users can see links Click here to register] nebo toto [Only registered and activated users can see links Click here to register] by ti nenahodilo nějaký nápad?
Openelec 6.0.3 + Raspberry 2B
Kodi 17beta6 Krypton + Win10Pro InsiderPreview +  virtual PC
Kodi Jarvis + Lenovo Yogatablet 10 FHD + Android
Kodi Jarvis + NB Lenovo ThinkPad E540 + Win10Pro
NAS Synology 215j 3TB Raid1
Router Turris
 
Citovat
#4
Díky za rady, v Libreelec/Openelec by se mělo nastavení ukládat pod složkou keymaps ( /storage/.kodi/userdata/keymaps ) více zde : [Only registered and activated users can see links Click here to register]

Nějak se mi ale nedaří dohledat zda lze k tlačítku přiřadit spuštění konkrétního souboru a ještě by mě zajímalo jestli lze zjistit že dané tlačítko se systémem komunikuje je aktivní např. příkazem ?

Jinak pro mé účely by mohl stačit modul s LCD a tlačítky :

   
RPi 2 - BerryBoot - LibreELEC 7.0.2 + Retropie 4.0.2 + Raspbian PIXEL + LibreELEC Krypton 7.90.006
 
Citovat
#5
Teď si říkám ty si měl na mysli hardwarové tlačítka? Já pochopil že to místní ovládání pořešíš pomocí IR.

Odesláno z mého Passport pomocí Tapatalk
 
Citovat
#6
jj, uvažoval jsem o HW tlačítkách nebo nějakém modulu. Prozatím hledám informace a pak se rozhodnu pro finální řešení.
RPi 2 - BerryBoot - LibreELEC 7.0.2 + Retropie 4.0.2 + Raspbian PIXEL + LibreELEC Krypton 7.90.006
 
Citovat
#7
No tak tady se musíš rozhodnout zda jít cestou pythonu, bashe. U rasbianu obojí jde jednoduše a u openelec to budeš mít malinko složitější. Podporu pythonu si povolíš jako doplněk a u bashe budeš muset ke GPIO přistupovat malinko neohrabaně. Až budu na PC napíšu sem přímo příklady ať to nemusíš hledat.

Odesláno z mého Passport pomocí Tapatalk
 
Citovat
#8
Takže pokud se vydáš cestou pythonu musíš si aktivovat doplněk RPi.GPIO a pak ve scriptu zavolat knihovnu
Kód:
import sys
sys.path.append('/storage/.kodi/addons/python.RPi.GPIO/lib')
import RPi.GPIO as GPIO

a pak samo sebou říct jaké označení GPIO budeš používat
Když se bude používat číslování hardwarových pinů konektoru, nastaví se příkaz na:
Kód:
GPIO.setmode(GPIO.BOARD)

Pokud se bude používat označení signálů jako v procesoru, nastaví se:

Kód:
GPIO.setmode(GPIO.BCM)

no a pak by si čekal na stisk tlačítka požadovaného pinu s pullup odporem
Kód:
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_UP)
print "cekam na stisk tlacitka"
GPIO.wait_for_edge(8, GPIO.FALLING)
print "tlacitko bylo stisknuto"
U raspbianu je vše totožné jen není třeba aktivovat doplněk. Ohledně použití bashe je situace složitější/jednodušší... podle toho jak co komu vyhovuje 6
U openelecu jsem nebyl schopen přistoupit ke GPIO jinak, než přímo/složitě.
Takhle nastavíš pin4 jako výstup a nahodíš ho

Kód:
echo "4" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio4/direction
echo "1" > /sys/class/gpio/gpio4/value
pin je pak vhodné pokud ho nepožíváš pustit
Kód:
echo "4" > /sys/class/gpio/unexport
 v případě vstupu
Kód:
echo "4" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio4/direction
a stav si přečteš
Kód:
cat /sys/class/gpio/gpio4/value
V tomhle přístupu ke GPIO jsem nepřišel na způsob aktivace interního pullup odporu. U raspbianu to je lepší, buď opět jde použít stejný přístup ke GPIO, nebo elegantně v případě výstupu dám 0
Kód:
raspi-gpio set 4 op dl
nebo 1
Kód:
raspi-gpio set 4 op dh
stav čteš
Kód:
raspi-gpio get 4
vstup
Kód:
raspi-gpio set 4 ip
s pullup
Kód:
raspi-gpio set 4 ip pu
s pulldown
Kód:
raspi-gpio set 4 ip pd
Osobně radši používám bash, protože je default shell v každém linuxu a na to moje scriptování bohatě dostačující.
 
Citovat
#9
Opět díky za užitečné informace, sice ne všem řádkům rozumím, ale časem to snad dám 4 .
Ještě k těm tlačítkům, pokud jsem to správně pochopil není třeba používat odpor externě, ale je možné ho aktivovat přímo na RPi ?

Jestli správně počítám, tak přes GPIO by mělo jít namapovat až 17 tlačítek :
   
RPi 2 - BerryBoot - LibreELEC 7.0.2 + Retropie 4.0.2 + Raspbian PIXEL + LibreELEC Krypton 7.90.006
 
Citovat
#10
Ano u raspberry lze využít interní odpor. A tlačítek při použití sériové linky můžeš mít kolik chceš. Pokud by si využíval jen GPIO tak zatím používám jen ty zelené, takže jak si psal 17, ale myslím si, že jdou v případě nouze použít i ty ostatní.

Odesláno z mého Passport pomocí Tapatalk
 
Citovat
#11
OK, objednal jsem si testovací sadu, tak jak dorazí hned začnu laborovat.
RPi 2 - BerryBoot - LibreELEC 7.0.2 + Retropie 4.0.2 + Raspbian PIXEL + LibreELEC Krypton 7.90.006
 
Citovat
#12
Ovládání pomocí GPIO tlačítek mám již vyřešeno 82. 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 6 .

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é:
Kód:
mkdir skript

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
Kód:
python test.py

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: [Only registered and activated users can see links Click here to register]

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 knihovně
import RPi.GPIO as GPIO  #importuji GPIO knihovnu
import time  #importuji time knihovnu pro časovací instrukce
import os  #mimo jiné potřeba pro zadávání příkazů, v našem případě funkcí
GPIO.setmode(GPIO.BOARD)  #použiji HW označení pinů

#nastavení konkrétních pinů a připojeni vnitřního Pull-Up odporu(integrován 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:  #vytvoření nekonečné smyčky, která neustále kontroluje, zda bylo tlačítko stisknuto
  if not ( GPIO.input(29) == False ):  #po stisknutí tlačítka ...
      os.system('kodi-send --action="Action(left)"')  #...se spustí tento příkaz(pohyb vlevo)
  time.sleep(1)  # odrušení zákmitů při rozpínání tlačítka po dobu 1s
  if not ( GPIO.input(31) == False ):
      os.system('kodi-send --action="Action(right)"')  #pohyb vpravo
  time.sleep(1)
  if not ( GPIO.input(33) == False ):
       os.system('kodi-send --action="Reboot"')  #restart
   time.sleep(1)
  if not ( GPIO.input(35) == False ):
       os.system('kodi-send --action="ActivateScreensaver"')  #spořič obrazovky
   time.sleep(1)
  if not ( GPIO.input(37) == False ):
       os.system('kodi-send --action="RunAddon(plugin.video.sosac.ph)"')  #spoštění doplňku Sosáč
   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á 4 .
RPi 2 - BerryBoot - LibreELEC 7.0.2 + Retropie 4.0.2 + Raspbian PIXEL + LibreELEC Krypton 7.90.006
 
Citovat
#13
No vida a nějaké foto rádia nebude? Jinak jsem jen tak okrajově testnul nezelené GPIO konkrétně 2 a 3. Použitelné jsou, jen tyhle dva jsou po zapojení raspberry pod napětím a shodil jsem je až ve scriptu. Zajímavá vlastnost, která se může někdy hodit.

Odesláno z mého Passport pomocí Tapatalk
 
Citovat
#14
Zatím žádné není, takže není co fotit  6 . Přestavbu chci řešit až nahradím současné RPi 2, každopádně už vím jak na to. Ještě pořeším nějakej informační displej, zatím nejsem pevně rozhodnut, ale dnes dorazil první kandidát (HD44780), tak uvidím co z něj zítra vykouzlím...
RPi 2 - BerryBoot - LibreELEC 7.0.2 + Retropie 4.0.2 + Raspbian PIXEL + LibreELEC Krypton 7.90.006
 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)