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.
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.
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:
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.