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:

https://bitekmindenhol.blog.hu/api/trackback/id/tr7113693672

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.

Friss topikok

Címkék

433mhz (12) adc (1) ads1015 (2) ads1115 (1) ajtó (1) alkatrész (23) alternatív kapcsoló (1) am2320 (1) amg8833 (1) analóg (1) android (1) apds-9960 (1) arduino (1) arduinoeasy (5) automatizálás (3) basic (2) basic r3 (1) bemenet (2) bh1750 (1) blitzwolf (2) bluetooth (8) bridge (1) camhi (2) csengő (1) csináld magad (22) dht22 (1) digoo (1) diy (25) DIY (2) do-it-yourself (26) domoticz (8) ds18b20 (1) ds3231 (1) easpeasy (1) ebay (3) érintő (2) érintőkapcsoló (7) érzékelő (11) esp-01 (2) esp32 (2) esp8266 (18) espeasy (2) espurna (1) esp projekt (18) Eview7 (1) ewelink (1) feldolgozó (1) felhő (1) fényérzékelő (1) firmware (7) flame detector (1) flash (1) fogyasztásmérő (3) ftdi (1) füstérzékelő (1) gesture (1) gpio (1) hang (4) hangjelző (1) hc-sr501 (1) hőmérséklet (12) htu21 (1) impulzus relé (1) izzó (1) javascript (1) jelenlétérzékelő (2) kamera (14) keresztkapcsoló (1) kézmozdulat (1) kijelző (3) kimenet (18) konnektor (4) lan (3) lángérzékelő (2) led (3) linux (3) logic level converter (1) lua (1) lux (1) maple mini (2) mcu (3) mobil (1) mosfet (1) mozgás (4) mq-2 (2) MQTT (1) mqtt (1) működtető rendszer (5) nedvesség (1) neopixel (1) Node-RED (1) nvr (2) nyitás (6) okosház (5) okosizzó (2) okosotthon (9) oled (1) onvif (5) opencv (1) openwrt (3) orange pi (4) páratartalom (6) php (1) pow (1) programozás (7) projekt (22) proximity olvasó (1) python (1) raspberry (12) raspberry projekt (5) raspbian (1) rcwl-0516 (1) reed (1) relé (21) remote (2) rf (2) rgb (6) rögzítő (2) router (1) rpieasy (1) rtc (1) rtsp (1) shelly (10) shelly em (1) shutter (1) smartwise (1) solid state relay (1) sonoff (17) sonoff dual (1) SonOTA (1) soros (1) ssr (1) stm32 (4) szenzor (11) szilárdtest relé (1) szintillesztő (2) sziréna (1) szkript (2) szünetmentesítés (4) t1 (1) t4 (1) Tasmota (1) tasmota (2) távirányító (3) Telegram (1) termékteszt (60) termosztát (1) touch (2) ups (4) usb (5) usb hub (1) valós idejű óra (1) vezérlések (17) vezérlő (5) világítás (4) villanykapcsoló (12) webkamera (1) wiegand (1) wifi (21) ws2812 (1) xiaomi (6) xm (2) xmeye (2) yoosee (1) zigbee (8) zwave (3) Címkefelhő