Bluetooth távirányító (3.0)
2018. február 24. írta: eNeS

Bluetooth távirányító (3.0)

Mivel a Raspberry Pi3/Zero W-n a WiFi mellett beépített Bluetooth 4.0 vezérlő is van, egyszerű megoldásnak tűnik a távoli vezérlésére egy bluetooth-os távirányító.

AB Shutter 3 néven fut a következő tesztegyed, bár ezt a modellt eredetileg arra tervezték, hogy Android/iOS telefonokon fényképet lehessen készíteni selfie bottal, engem ez nem tántorít el az alternatív felhasználási módok keresésétől.

abshutter3.jpg

Ennek a modellnek a HASZNÁLATA NEM AJÁNLOTT állandóan bekapcsolt módban, mert 1-2 héten belül lemeríti teljesen az elemet! Ajánlott helyette pl egy BLE eszköz.

A CR2032 gombelem a hátulján levő - nem túl könnyen - leszedhető fedél alatt található és cserélhető. Illetve az elem kiszedése után ezen a ponton kis nyomással tudjuk lepattintani az egész fedlapot, ha kíváncsiak vagyunk mi van benne.

abshutter_inside.jpg

Belül egy AB1126/27A Bluetooth 3.0 kompatibilis HID vezérlő kacsintgat.

Értelemszerűen az oldalán található ON/OFF kapcsolóval lehet be illetve kikapcsolni, bekapcsolás után villogással jelzi, hogy párosítható üzemmódban van, ha kialszik a kék LED, akkor csatlakozott.

A kék LED egyébként a gombok bármelyikének megnyomásakor is világít.. érdekessége, hogy leírás szerint 5 percenként alvó üzemmódba lép és csak gombnyomásra tér magához. Egy párszor nálam is előfordult, miszerint serény villogásba fogott és csak több gombnyomással később sikerült újra felépítenie a kapcsolatot, úgyhogy a megbízhatósága még kicsit kérdéses számomra. Viszont már több órája nem produkálja ezt a jelenséget, vagy nem lép alvó módba azóta, vagy elég gyorsan magához tér. Mivel az ébresztőóra lekapcsolására akarom használni az egyik gombot, praktikus lenne, ha rögtön reagálna és továbbítaná a gombnyomás tényét az okosórámnak...

A telefonnal vagy számítógép grafikus felületén végzett Bluetooth párosítás nem túl nagy kihívás, inkább a Linux (Raspbian) parancssorból válik érdekessé:

Bemelegítésként egy kis frissítés után a bluez csomag telepítése és a DBUS engedélyezése szükséges: (ha még nem történt meg)

sudo apt-get update
sudo apt-get install bluez
sudo update-rc.d -f dbus defaults

A parancssori párosításhoz a távirányítót be kell kapcsolni, majd az alábbi parancsokat kell kiadni: (vastag betűvel kiemelve a beírandó parancsok, normál betűtítpussal a rendszer válaszai)

sudo bluetoothctl
[NEW] Controller B8:27:EB:20:9D:BB BlueZ 5.23 [default]
[bluetooth]# agent on
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:20:9D:BB Discovering: yes
[NEW] Device 62:02:20:00:06:E3 AB Shutter3
[bluetooth]# pair 62:02:20:00:06:E3
Attempting to pair with 62:02:20:00:06:E3
[CHG] Device 62:02:20:00:06:E3 Connected: yes
[CHG] Device 62:02:20:00:06:E3 Modalias: usb:v05ACp022Cd011B
[CHG] Device 62:02:20:00:06:E3 UUIDs:
00001124-0000-1000-8000-00805f9b34fb
00001200-0000-1000-8000-00805f9b34fb
[CHG] Device 62:02:20:00:06:E3 Paired: yes
Pairing successful
[CHG] Device 62:02:20:00:06:E3 Connected: no
[bluetooth]# trust 62:02:20:00:06:E3
[CHG] Device 62:02:20:00:06:E3 Trusted: yes
Changing 62:02:20:00:06:E3 trust succeeded
[bluetooth]# connect 62:02:20:00:06:E3
Attempting to connect to 62:02:20:00:06:E3
[CHG] Device 62:02:20:00:06:E3 Connected: yes
Connection successful
[bluetooth]# exit
Agent unregistered
[DEL] Controller B8:27:EB:20:9D:BB BlueZ 5.23 [default]

 A "scan on" kiadása után várni kell egy kicsit, és ha megtalálta az eszközt, "AB Shutter3" néven látható, a mellette levő 12 betű/szám kombinációval lehet a továbbiakban hivatkozni, ez nálam 62:02:20:00:06:E3 de mindenki a sajátját helyettesítse be természetesen. :)

A párosítást elég egyszer elvégezni, de a kapcsolódást minden rendszerindításkor el kell végezni, én ezt úgy oldottam meg, hogy az .xsessionrc szöveges fájlból indítom a kapcsolódásra készített shell szkriptet, így a grafikus felület indulásakor mindig végrehajtódik. (de ízlés szerint crontab vagy más indítóállományban is elhelyezhető, ami a bluetooth szolgáltatás indulása után indul)
A shell szkriptből kétfélét is csináltam, ízlés szerint használható. (természetesen az eszköz címét módosítani kell mindenhol)

bt_connect1t.sh tartalma:

echo -e "connect 62:02:20:00:06:E3\nquit" | bluetoothctl

 bt_connect2.sh tartalma: (ez kicsit okosabb, mert kapcsolódás előtt megnézi van-e kapcsolat)

#!/bin/bash
text="$(echo -e 'info 62:02:20:00:06:E3\nquit' | bluetoothctl | grep 'Connected' | cut --only-delimited --delimiter=' ' --fields=2)"
if [ "$text" = "no" ]; then
echo "no" > /dev/null
echo -e "connect 62:02:20:00:06:E3\nquit" | bluetoothctl
else
echo "yes" > /dev/null
fi

Ha a távirányító abbahagyta a villogást, akkor vagy sikerült kapcsolódni, vagy megunta a próbálkozást és lement sleep módba, mely esetben újra ki-be kell kapcsolni. Hogy melyik eset történt meg, arról az alábbi parancs kimenetét tanulmányozva tudunk meggyőződni. (Connected: yes)

echo -e 'info 62:02:20:00:06:E3\nquit' | bluetoothctl

Illetve a dmesg | tail parancs kimenetében meg kell jelennie valami ilyesminek:

input,hidraw1: BLUETOOTH HID v1.1b Keyboard [AB Shutter3]

A működéséről az alábbi paranccsal tudunk egyszerűen meggyőződni:

sudo showkey -k

Ez a lenyomott billentyűk kódját adja meg, SSH-n keresztül is működik sudo-val. Mivel egyszerűen bluetooth billentyűzetként azonosítja magát, a szoftveres feldolgozás nem túl bonyolult, mintha gombnyomást várnánk.

Gomb Keycode Megnevezés Hexa érték Decimális érték
iOS 115 VOLUME_UP 0x1000072 16777330
Android 28 ENTER 0x1000004 16777220

 

A gombokra írt iOS/Android feliratoknak sok jelentősége nincsen, az iOS feliratú gombbal rögtön működött a telefonomon (Android) levő OpenCamera alkalmazás, mivel a hangerő emelés gomb lenyomást szimulálja. Sajnos PC-n a hangerő növelése speciális multimédia gomb, amit jó eséllyel az operációs rendszer, de legalábbis a grafikus felület már "lefoglalt" tehát a billentyűkód megérkezik, de nem továbbítja a futó programoknak, hanem a hozzá társított feladatot saját hatáskörben végzi. (Ha ez a hiba, az abból látszik, hogy a fenti showkey parancs kiírja a kódot, de a saját programunk mégsem lát ebből semmit)
Ezen némi küzdelem után úgy tudtam segíteni, hogy az "XF86AudioRaiseVolume" nevű eseményt töröltem az Enlightenment Beviteli beállítások->Billentyűkombinációk közül, de ennek mikéntje az adott felhasználói felülettől függ. Immár a python PyQT szkriptem megkapja a fenti kódokat a keypressed eseményekre. Példának okáért a nagy gombbal állítom le az ébresztést, a kicsivel meg a lámpát kapcsolgatom.

Hogy meddig bírja folyamatos üzemben, egy elemről az még tesztelés alatt. Ezért a 250 forintos árért, amiben egy CR2032 gombelem is benne van, szerintem ár/érték arányban verhetetlen eszköz egyébként.

UPDATE 1: a vele együtt szállított CR2032 elemmel 2 napig ment folyamatos ON állásban, most tettem bele egy újat, kíváncsi vagyok jobb lesz-e az eredmény.

UPDATE 2: teljesen új CR2032 elemmel se húzta 2 hétnél tovább napi egyszeri használat mellett folyamatosan bekapcsolt állapotban - ezzel kapcsoltam le az ébresztést reggelente. Nem annyira gazdaságos, akárhogy is nézem.

Kapcsolódó irodalom:

A bejegyzés trackback címe:

http://bitekmindenhol.blog.hu/api/trackback/id/tr5513693672

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.