Infraraudona avietė

Posted: 2013-04-15 in Darbeliai
Žymos:, , ,

Vakar nusprendžiau įgyvendinti dalį savo Raspberry Pi „tiuningo“ planų — padaryti uogą valdomą televizoriaus ir seno grotuvo pulteliu.

Tokie visokie grotuvai (ar, tiksliau, medijos centrų programos), kaip XBMC bei PLEX patys moka reaguoti į sukonfigūruotus pultelius. Bet aš nenoriu nei XBMC, nei PLEX. Juo labiau, kad PLEX avietiniam kompiuteriui yra tik klientas — jam dar reikia atskirai ir serverio, kuris medijos srautus tiektų. Kitaip sakant, prie avietės — dar vieno pagalbinio kompiuterio. Nesąmonė.

Kartu su Raspbian OS komplektuojamas labai paprastutis grotuvėlis — omxplayer. Jis „įžymus“ tuo, kad išnaudoja avietėje integruotą vaizdo dekodavimo procesorių ir gali rodyti net ir pilnos raiškos HD filmus beveik neapkraudamas centrinio procesoriaus. O ir tas centrinis procesorius tokių duomenų kiekio paprasčiausiai nepavežtų.

Kokia mano mintis? Ogi paprasta: sureguliuoti nuotolinio valdymo pultelį taip, kad galėčiau jo klavišus baksnodamas naršyti po LXDE aplinką, atsidaryti katalogus, pasirinkti filmus ir paleisti omxplayer. Na, ir patį omxplayer valdyti — sustabdyti filmą, išjungti jį, padidinti/sumažinti garsą ir pan. Ko tam reikia? Reikia, kad nuotolinio pultelio komandos būtų paverstos… klaviatūros klavišų paspaudimais. Na, kad pultelis „apsimestų“ klaviatūra. Rodyklėmis galima naviguoti, „Enter“ paspaudus — įeti į katalogą ir paleisti filmą, tarpo klavišu sustabdyti rodymą, +/− klavišais keisti garso lygį ir panašiai.

Pradėjau skaityti internetus apie pultelių ir daviklių prijungimą. Pirmas dalykas, kuris man nepatiko — branduolio kompiliavimas su papildomu palaikymu. Atseit, standartinis lirc (Linux infraraudonų daviklių apdorojimo paketas) kažkoks ne toks geras. Dar ir Raspbian OS tas branduolio tiuningas neaprašytas. Nusprendžiau eiti savo keliu ir išbandyti standartinį paketą.

Pirmiausia išsikrapščiau vieną turimą infraraudoną davikliuką ir prijungiau prie jo laidelius:

Infraraudonųjų spindulių daviklis su prijungtais laideliais

O paskui, aišku, prijungiau ir prie paties kompiuteriuko. Sprendimas kol kas laikinas, koncepcijai išbandyti, taip sakant:

Infraraudonasis daviklis, prijungtas prie Raspberry Pi GPIO elektrodų

Sudiegiau lirc. Skaitau toliau — reikia nurodyti, kuris iš GPIO elektrodų bus naudojamas duomenims iš daviklio nuskaityti. Aš prijungiau prie 18 elektrodo, taigi prie branduolio modulių reikia nurodyti papildomą naują lirc modulį ir nurodyti elektrodą. Redaguoju /etc/modules failą ir pridedu (pagal dokumentaciją) tokias eilutes:

lirc_dev
lirc_rpi gpio_in_pin=18

Pabandom užkrauti modulį:

sudo modprobe lirc_rpi

Patikrinu, ar prie aparatūros atsirado naujas įrenginys:

ls -l /dev/lirc*

Hmm, nieko nerasta. Ai, taigi branduolio modulis… perkraunu avietę. Perkrovęs patikrinu dar kartą — atsirado /dev/lirc0. Ok, įrenginys jau yra.

Paleidžiu komandą mode2 -d /dev/lirc0 ir pradedu maigyti pultelio mygtukus. Į ekraną pasipila skaičiukų srautas:

pulse 1748
space 485
pulse 1758
space 525
pulse 1712
space 507

Ir taip toliau… Aišku, iš šitų skaičiukų man pačiam jokios naudos, bet užtai žinau, kad lirc modulis užkrautas, daviklis prijungas ir signalai iš pultelio kompiuterį pasiekia sėkmingai. Toliau lieka tik derinimas.

Pirmiausia reikia suderinti pultelius. Tam lirc pakete yra puiki programėlė, pavadinta irrecord. Ją paleidus paprašoma įvedinėti klavišų pavadinimus, o paskui spausti atitinkamus pultelio klavišus. Kitaip sakant, suderinti pultelį, kad lirc mokėtų jį atpažinti ir žinotų, kokie klavišai jame yra. lirc tinklalapio nuorodose galima rasti visą archyvą įvairių, jau suderintų visokių televizorių ir grotuvų pultelių — tik parsisiųsk konfigūracinį failą ir naudok. Deja, man šis variantas netiko, nes pultelis ypač specifinis ir bandymai jo modelį atkapstyti baigėsi niekuo. Na ir nieko, turėsiu smagumą pats jį susiderinti.

Dar vienas dalykas — paleidus irrecord progamėlę ji neleidžia įvesti bet kokių klavišų pavadinimų. Yra tam tikri standartai. Aš labai tingėjau tų standartų ieškoti, be to, kadangi nenaudosiu (kol kas) XBMC ar kitų programų, kurios tuos klavišus „skaito“, tai galiu užvadinti kaip noriu. Reikia tik papildomą raktelį nurodyti, kad programa nekreiptų dėmesio į klavišų pavadinimus ir užvadint, kaip tik pats noriu. Ai, dar prieš ją paleidžiant būtina sustabdyti lirc tarnybą (kitaip irrecord negalės pasiekti infraraudonojo įrenginio):

sudo /etc/init.d/lirc stop

O po to leidžiam ir irrecord:

sudo irrecord -d /dev/lirc0 --disable-namespace PLAYER

Taigi programa skaito tuos pačius skaičiukų srautus ir paverčia juos kodais. Aš visą savo senąjį egzotiškąjį pultelį suderinau, kiekvienam klavišui priskyriau po pavadinimą. Paskui dar pasiėmiau ir televizoriaus pultelį — jame yra suderinamų grotuvų per HDMI valdymo mygtukai. Tiems mygtumas priskyriau tokius pačius pavadinimus, kurie atitinka logiškus veiksmus: PLAY, STOP ir panašiai. Taigi, filmą žiūrint jį bus galima sustabdyti ir televizoriaus pulteliu — smulkmena, bet maloni.

Abiejų pultelių suderinimas įrašomas į failus. Dabar tų failų turinį reikia nukopijuoti į /etc/lirc/lircd.conf failą ir vėl paleisti lirc tarnybą. Dabar paleidžiu programėlę irw ir stebiu, kas gi darosi spaudinėjant atitinkamus pultelio klavišus. O darosi tai, kad programėlė puikiausiai pagauna pultelio klavišus!

00000000807f40bf 00 POWER PLAYER.conf
 00000000807f609f 01 UP PLAYER.conf
 00000000807f58a7 01 RIGHT PLAYER.conf
 00000000807fe01f 01 DOWN PLAYER.conf
 00000000807f48b7 01 LEFT PLAYER.conf
 00000000807f6897 00 ENTER PLAYER.conf
 00000000807fc837 01 STOP PLAYER.conf
 00000000807fe817 01 PAUSE PLAYER.conf
 00000000807f708f 00 SETUP PLAYER.conf

Kas toliau? O toliau reikia išmokyti kompiuterį reaguoti būtent į tam tikrus klavišus. O kadangi aš noriu, kad šitų klavišų paspaudimai virstų tarsi kompiuterio klavišų paspaudimais, tai turiu ieškoti ir atitinkamo sprendimo.

Kai kurios programos, kaip minėjau, pačios moka reaguoti į klavišų paspaudimus. Tiksliau, priimti komandas iš lirc tarnybos. Tą moka VLC grotuvas, XBMC medijos centras, MythTV, Amarok ir daugybė kitų medijos programų. Tačiau LXDE „langeliai“ ir omxplayer to tikrai nemoka. Kai kurios programos, jeigu jos jau yra paleistos, gali priimti tam tikrus signalus iš komandinės eilutės, tačiau ne tiesiogiai iš lirc. Tam lirc pakete yra tokia programėlė irexec. Ji moka „klausytis“ lirc signalų ir vykdyti nurodytas komandas — pavyzdžiui, įjungti grotuvą, perduoti jam signalą komandine eilute ar panašiai. Kitaip sakant, ši programėlė, „kabėdama“ fone ir sulaukus atitinkamo pultelio klavišo paspaudimo tiesiog įvykdo kitą komandą, paleidžia programą.

Beliko susirasti, kokia programa „apsimestų“ klaviatūra. Tokia programėlė yra xte iš XAutomation paketo. Ji skirta „robotizuoti“ Linux langines aplinkas, t.y. X Window System.

Ką gi, lirc moka perduoti komandas iš vartotojo naminio (arba specialaus sisteminio globalaus) failo .lircrc į atitinkamas programas. Aš viską sukonfigūravau savo pagrindiniam vartotojui, o irexec programėlę įdėjau į automatiškai įkraunamų sąrašą — bet būtent to pagrindinio vartotojo vardu. Na, ir irexec programai daviau truputį darbo:

begin
 prog=irexec
 button=POWER
 config=startx &
end
begin
 prog=irexec
 button=SETUP
 config=pcmanfm /media/RASHD &
end
begin
 prog=irexec
 button=CLEAR
 config=xte 'key BackSpace'
end
begin
 prog=irexec
 button=PAUSE
 config=xte 'key space'
end

Čia tik dalis konfigūracijos. POWER mygtukas paleidžia grafinę aplinką. Tiesa, reikės čia kokį skriptuką parašyti, kad POWER mygtukas priklausomai nuo to, ar grafinė aplinka paleista, ją arba paleistų, arba iš viso kompiuterį išjungtų. O gal išjungimui reikės atskirą mygtuką priskirti, kad galėčiau išjungti prieš pernešdamas kompiuterį. O gal išjungimui reikės apskritai mygtuką prie kompiuterio įtaisyti. Fizinį.

Raspberry Pi su prijungtu infraraudonuoju davikliu

Aš čia viską parašiau taip, kaip jau beveik suprantantiems. Tačiau jeigu kam nors iš skaitytojų čia kiltų kokių nors tikrų klausimų, kreipkitės. Tikrai nesistengiau parašyti detalios instrukcijos, tik šiaip pablevyzgoti.

Vakar filmus su pulteliais jau ir žiūrėjom. WAF (Wife Acceptance Factor) kiek pagerėjo 😀

Reklama
Komentarai
  1. Tadas parašė:

    o tai ir daviklis turi buti suristas su distanciniu?

    • Darau, Blė parašė:

      IR protokole nėra jokio „surišimo“. Svarbu, kad daviklis ir pultelis dirbtų tuo pačiu protokolu. Dažniausiai sutinkamas protokolas yra NEC standarto. Iš mano namuose turimų pultelių visi yra NEC, tad ir daviklis gaudo juos visus sėkmingai. Kiekvienas pultelio klavišas siunčia tam tikrą kodą, o ką paskui tas kodas turėtų daryti — va čia jau kaip susitvarkysi.

      • Tadas parašė:

        Ir kaip sužinoti pultelio rušį?

        • Darau, Blė parašė:

          Nežinau, nei ar pultelis NEC, nei kaip „rūšį“ sužinot. Ieškoti būtų galima pagal tikslų pultelio modelį. Nors netgi tokia abstrakti gūglo paieška kaip „hp infrared remote protocol“ duoda kažkokių užuominų apie NEC.

          Reikia tiesiog imti ir bandyti. Įjungti daviklį, paleisti jį stebinčią programą ir spaudinėti pultelį…

          • Tadas parašė:

            Kada Kanors naujo su aviete darysi?

            • Darau, Blė parašė:

              Aš su ja beveik viską padariau, ko norėjau, dabar ji pati viską daro, ko man reikia. Iš artimiausių planų yra ją atnaujinti iki Debian Jessie, nes šiuo metu yra makalynė: dalis paketų iš Wheezy, o kai kas, ko reikia naujesnio — iš Jessie. Viskas būtų gerai, bet nustojo CUPS serveris veikti, tai gal kada prisėsiu jo sutvarkyti… bet pilnas atnaujinimas iki Jessie — pirmoj vietoj. Tik abejoju, ar tai aprašinėsiu.

              • Tadas parašė:

                nuva galvojau gal koki web serveriuka darysi dar išbandymui dar koki dalyką. Gaila aišku kad daugiau apie Aviete neberašysi.Aš tai jau taupausi pinigus ant avietes ir ruošiu visus dalykus, harda,microsd ir t.t pakalbėjau su tavim apie IR davikliuka ir šiandien kojeles susilitavau. Dėkuo kad papasakojai apie IR daviklius. Kreipsiuos dar jei ko nesuprasiu

                • Darau, Blė parašė:

                  Web serveriukas pas mane jau seniai sukasi. Apache Avietei per sunkus, o ir tokio galingo serverio man nereikia. Lighthttpd yra visai gerai, bet su juo reikėtų ir priedų bei pakankamai terlionės su konfigūracija. Kadangi mėgstu Python, tai pasidariau viską, ko man reikėjo, su Flask.

                  Va apie ką dar būtinai parašysiu, tai apie Flask ir RESTful aplikacijų kūrimą.

                  • Andrius parašė:

                    sveikas, sugalvojau savo avietei pritikyti pulteli, ir susiduriau problema kaip isdiegti pati LIRC, parasau install lirc bet ten dar ismeta visokiu uzrasu, ir man gaunasi kosmosos. gal butu imanoma sulaukti pagabos kaip zingsnis po zinsnio pasidaryti valdyma su pulteliu, aisku jeio nesunku pagelbeti. naudoju OPENELEC os. ir kai kurios komandos man kzkokdel netinka ir arba neveikia, ir galvoju kad neisirasau pacio LIRC. gal skype; dmb-220 ar per el pasta galetum pagelbeti

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s