Egy ideje nem esett már szó nagyobb DIY projektről, íme hát egy újabb.
Morfondíroztam egy ideje, mi lenne a megfelelő felhasználási célja a 4 magos Orange Pi One lapkának, és nemrég adta magát a lehetőség egy videokép-megjelenítési feladatra. A kedvenc RPI Zerom egymagos processzora ehhez sajnos kevés, be kellett látnom, előkaptam hát az Orange lapkát!
Szerencsére normál méretű HDMI kimenet van rajta, az kapott egy HDMI-VGA átalakítót is hirtelen, mert bár VGA monitorokkal Dunát lehet rekeszteni, a HDMI monitorokat viszont még nem hajítják az ember után.
Alkatrészlista:
Eszköz | Bruttó ár |
Orange Pi One (*) | 4951 Ft |
USB Wifi stick, külső antennával (*) | 929 Ft |
HDMI->VGA átalakító (*) | 733 Ft |
AC-DC 12V1.25A táp (*) | 1190 Ft |
DC-DC 12V->5V 15W step down átalakító (*) | 883 Ft |
Nyomógomb (*) | 644 Ft |
Billenőkapcsoló (*) | 374 Ft |
Buzzer 3V (*) | 383 Ft |
3.3V relémodul (*) | 600 Ft |
MOSFET kapcsoló 15A trigger (*) | 252 Ft |
410C5 Kötődoboz IP56 150x110x70mm (*) | 1186 Ft |
Ventilátor 60x60x15 DC4.5-13.8V (*) | 2198 Ft |
Védőrács 60x60 (*) | 255 Ft |
Kétoldalas protolap 3x7cm (*) | 312 Ft |
PWM Trigger Mosfet kapcsoló 15A (*) | 300 Ft |
Karos Wago 3-as (*) | 3 x 140 Ft |
Ellenállás 100ohm | 20 Ft |
Ellenállás 4.7Kohm | 20 Ft |
C14 beépíthető aljzat (*) | 298 Ft |
C13 beépíthető aljzat (*) | 298 Ft |
Összesen: | 16246 Ft |
Talán az árakon is látszik, hogy egyes alkatrészek Kínából rendelve ugyan olcsóbbak szoktak lenni, viszont a szállítási idők kiszámíthatatlansága miatt mostanában előtérbe helyeztem a helyi forrásokat. Főleg a ventilátor aránytalanul drága (bár a Sunon márka és a vapo csapágy hosszú élettartamot ígér), de méretben nem találtam szimpatikusat olcsóbban. Nagyobb dobozba téve persze egy régi PC tápventillátort is használhattam volna...
A tápegység résznél a 12V->5V átalakító kiváltható akár olcsóbb, cirka 300Ft-os lappal is, de nekem ez volt kéznél... másrészt az ACDC 12V tápegység és a step down átalakító együtt kompletten kiváltható lenne egy cirka 3200Ft-os Meanwell RS-15-5 tápegységgel.
Ventilátor nélkül a konstrukciót nem javaslom kivitelezni, egyrészt a Orange is termeli a hőt, másrészt ez a fajta rácsos táp hajlamos 100 fok fölé melegedni huzamos használatnál, ha a teljesítmény csúcson van járatva. (Bár az Orange Pi One tesztjéből tudható, hogy kb 5W-ot eszik átlagosan, így a 15W-os tápegységnek bőven elegendőnek kell lennie, extrém melegedés nélkül)
Felmerülhet, hogy mi lenne, ha vennénk ebben az árban egy Androidos TV-re köthető médialejátszót, és azzal végeznénk el a feladatot? Igen, valóban, ezt az utat is végigjártam már egy Hikvision kamera kapcsán, amit a gyári iVMS-4500 alkalmazásával egy androidos médiaboxon tettem ki TV-re. Némi küzdelem után sikerült automatizálni a program indulását és leállását, viszont a TV-t, no azt kézzel kellett ki-be kapcsolni hozzá. Másrészt, ha az alkalmazás lefagyott, és nem egyszer volt ilyen, random időközönként, jöhetett a táp le-táp fel. Mivel az Android platformon a távmenedzselés sem egyszerű, legalábbis én nem találtam rá olyan működő alternatívákat, mint linuxon az SSH és szükség szerint VNC. (az android vnc alkalmazás meg egy vicc) Az iVMS alkalmazás ráadásul kisfelbontású telefonokra van optimalizálva, ami kifejezetten amorfnak hat egy FullHD-s felbontású TV-n. Mostanában ráadásul androidos tableten azt figyeltem meg, hogy néhány naponta elveszi a fókuszt az előtérben futó alkalmazástól, valószínűleg valami frissítés, vagy értesítés kapcsán, ez is elég zavaró. Ezen okokból állandó megjelenítés céljára nem igazán tartom alkalmasnak ezt az Android vonalat.
Az XMEye kameráknál nem lehet automatizálni az Androidos alkalmazás belépését, az azért nem alkalmas ilyesmire.. mással még nem próbálkoztam.
Node, vissza a tárgyra! Van egy rakat alkatrészünk, nézzük hogy férnek a dobozba:
A képen látható, hogy bár az Opi One LAN-os, én egy Wifi-sticket toltam bele, ezzel vezeték nélküli RTSP megjelenítővé előléptetve. Ha akad LAN kábel a közelben, nyilván stabilabb és gyorsabb a kapcsolat. :)
Bekötés:
Ahogy talán a képből is látható, de a bekötési rajzból már bizonyosan, egy kapcsoló szabályozza, hogy eljut-e a fázis a 12V tápegységig, illetve a Dc reléig, ami a monitor felé menő tápellátást biztosítja. A 12V-os tápot eléggé elítélhető, ám fantasztikusan működő módon következő lépésben 5V-ra alakítom, majd ráengedem az Orange PI megfelelő GPIO-ira, ezzel megtáplálva, valamint továbbkötöm a MOSFET kapcsolóra, ami a ventillátort tudja majd üzemeltetni. (12V-os a ventilátor, így éppen 12V-ról is mehetne, de 5V-ról járatva halkabb)
Maga a relé 3VDC tekercsfeszültségű, mert mint azt már tudjuk, a Raspberry és az Orange Pi is 3.3V GPIO vezérlésekkel dolgozik, amire az álmoskönyv szerint nem elegáns ráengedni az 5V-ot, és természetesen kimenetként sem lenne biztosított a rendes működés, ha 5V-os eszközt akarunk 3.75V alatti jelszinttel vezérelni...
A GPIO16/PC4 vezérli a relé állapotát, a GPIO26/PA21 pedig bemenetként sasolja a rá kötött nyomógombot, hátha kérjük a relé állapotának módosítását kézzel. Felhívnám a figyelmet a gomb mellett levő 4.7KOhm felhúzó+ellenállásra (OrangePi-ben nincs beépített, ezért külső ellenállást kell használni), ami HIGH szinten tartja a nyomógombot alapállapotban, amíg meg nem nyomják, akkor lesz LOW.
A csipogó a GPIO32/PG8-ra van kötve egy 100 Ohm-os áramkorlátozó ellenálláson keresztül, a MOSFET relé vezérlése pedig a GPIO36/PG9 lábra van kötve, ez indítja és állítja le a ventillátort szükség esetén. (ezt úgy állítottam be egyébként, hogy 65 fok felett bekapcsol, majd 60 fok alatt lekapcsol)
Ez a hardver összeépítés után a működés elméleti része, nézzük a szoftvert, ami egy Armbian Linux és egy RPIEasy lett, amit felkészítettem immár az Orange PI GPIO-k kezelésére is.
Íme a hardver lábkiosztás beállítása RPIEasy-ben:
Továbbá ezek az egyszerű eszközök kerültek felvételre benne:
A "System Info" eszköz ahhoz kell, hogy tudjam hány fokos az Orange, a többi GPIO-ról írtam feljebb.. amiről nem szóltam eddig, az a megjelenítés, ez a 6. eszköz a listában. Pontosabban a 6. sorban levő eszköz futtatja szükség esetén, mivel meglehetősen célspecifikus, ezért nem integráltam a kép megjelenítését végző kódot az RPIEasy-be.
A 6-os eszköz 0 vagyis OFF állapotában kilövi a runuser paranccsal indított feladatokat, ami elég általános feltétel, de jelen projektnél tökéletesen működik. Az 1-es vagyis ON állapotban a runuser a pi felhasználó nevében - ennek ugyanannak a felhasználónak kell lennie, amiben a grafikus felület, pl az XFCE automatikusan bejelentkezett! - futtatja a camdisplay.py megjelenítőt. (az XFCE telepítéséről Armbianra külön nem szeretnék írni, én parancssorból tettem meg, de az armbian-config segítségével is megoldható)
A camdisplay.py -be kézzel be kell ütnünk azt az RTSP útvonalat, amin a kamerán mozgóképe, vagy azt a HTTP útvonalat, amin az állóképe elérhető. (mindkettő megadható, ekkor először az RTPS-t próbálja, majd a HTTP-re tér át vészmegoldásként) A két állapot között a Toggle gombra kattintva, vagy a taskvalueset paranccsal tudunk váltani. Mivel OpenCV szükséges az RTSP dekódoláshoz, ezért először azt is telepítsük fel a 'sudo apt install python3-opencv' parancs segítségével.
A szükséges camdisplay.py az alábbi címen érhető el:
https://github.com/enesbcs/camdisplay
Ebben az rtspurl és snapurl változókban adhatjuk meg IP kameránk, vagy az IP rögzítő RTSP elérési útját, a snapurl-ben pedig az állókép elérési útját, utóbbi nem kötelező, de ha az RTSP valamiért nem megy, vészmegoldásnak jó.
Dahua rögzítő esetén az RTPS útvonal ilyesmi a 3. csatornára:
rtsp://RÖGZÍTŐ_IP_CÍM:554/cam/realmonitor?channel=3&subtype=0
Az állókép pedig így érhető el a 3. csatornáról:
http://RÖGZÍTŐ_IP_CÍM/cgi-bin/snapshot.cgi?channel=2
Gyártónként ezek természetesen mind mások, a VLC segítségével tudjuk tesztelni, hogy az RTSP valóban megfelelően működik. Ha nem tudjuk hogyan lehet ezt elérni, érdemes az iSpy adatbázisában szétnézni.
Felmerülhet a kérdés, hogy nem lehetne-e kiváltani a camdisplay.py-t magával a VLC-vel? De igen, kicsit finomhangolni kell a beállításait és ugyanúgy el lehetne indítani a 6-os taszk segítségével. :)
Az eszköz működését az alábbi RPIEasy Rules kód vezérli:
on System#Boot do rtttl,32:d=4,o=5,b=125:e,b,a,b,d6,2b. taskvalueset,3,1,1 taskvalueset,6,1,1 endon on startdisp do taskvalueset,3,1,1 taskvalueset,6,1,1 rtttl,32:d=4,o=5,b=140:8e,8c,8e,8c endon on stopdisp do taskvalueset,6,1,0 taskvalueset,3,1,0 rtttl,32:d=4,o=5,b=140:8e,8c endon on pwrbtn#State do if [relay#State]<1 event,startdisp breakon endif if [relay#State]>0 event,stopdisp breakon endif endon on sa#temp do if [sa#temp]>65 and [fan#State]<1 taskvalueset,5,1,1 breakon endif if [sa#temp]<60 and [fan#State]>0 taskvalueset,5,1,0 breakon endif endon on Clock#Time=Mon,07:45 do event,startdisp endon on Clock#Time=Tue,07:45 do event,startdisp endon on Clock#Time=Wed,07:45 do event,startdisp endon on Clock#Time=Thu,07:45 do event,startdisp endon on Clock#Time=Fri,07:45 do event,startdisp endon on Clock#Time=Mon,17:30 do event,stopdisp endon on Clock#Time=Tue,17:30 do event,stopdisp endon on Clock#Time=Wed,17:30 do event,stopdisp endon on Clock#Time=Thu,17:30 do event,stopdisp endon on Clock#Time=Fri,17:30 do event,stopdisp endon
Előre szólok: az rtttl implementálva van az RPIEasy-ben (Nokia csengőhang) és reagál is Orange Pi alatt, viszont az Orange Pi-ben nincs hardveres PWM támogatás, így a hanghatás inkább egy rozsdás fűnyírót idéz. :) Raspberry Pi-vel rendesen működik.
Végezetül egy jó tanács: Mivel mégiscsak Orange-ről van szó, a watchdog alkalmazást ne felejtsük el feltenni, hogy alkalomadtán újraindítsa magát, amikor megfagy. ;) Raspberry alatt a watchdog pár pillanat alatt beállítható és remekül működik, Orange Pi alatt ez még nem igazán úgy működik, ahogy kellene.
Illetve aki szeret kényelmesen szerelni, egy mérettel nagyobb dobozt válasszon, ez éppen passzos.
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.