RaspberryPi mám doma už hodně dlouho. Před nějakou dobou jsem měl k PI dobastlenou meteostanici a teď jsem zatoužil po chytrém rádiu. Protože jsem na hardware úplně levý, tak mi pomáhali kamarádi, kterým bych chtěl tímto poděkovat. Hlavně Petrovi. Díky!

Uvnitř je krabičky je RasbperryPi Model B. K němu je připojený MAX7219 a 5 obyčejných tlačítek. Pak už se přidá jenom připojení k domácí síti a repráčky a je hotovo.

CPU

RaspberryPi Model B je z roku 2012, má 512 MB RAM a pomalý procesor. Celkově je příliš pomalý na jakékoliv GUI. Nějakou dobu jsem na něm provozoval OwnCloud, ale i to bylo utrpení.

Displej

Za 200,- jsem někde z Číny pořídíl LED Display MAX 7219 s rozlišením 32 x 8 bodu. V balení je hotový plošňák s ledkama a kabel, který se dá rovnou zapojit na SPI (GPIO header). Je k tomu jednoduchá knihovna v Pythonu, která si umí natáhnout terminálový font a jednoduše na displej poslat libovolný text:

Hello world from MAX7219

MAX 7219 je vlastně jenom čip, který umí řídit LED matici 8×8. V tomhle případě jsou to 4 bloky propojené za sebou. Na youtube jsem viděl i 12 bločků propojených do sebe což dá 48 x 16 nebo 32 x 24 bodů. Nevím jestli by šlo takhle udělat i větší displej.

Při inicializaci je potřeba nastavit uspořádání bloků:

serial = spi(port=0, device=0, gpio=noop())
device = max7219(serial, cascaded=4, block_orientation=-90, rotate=0)

device.contrast(40)

Tlačítka

Poměrně jednoduchým způsobem lze přes GPIO připojit tlačítka. Po tom co jsem pracně vypájel tlačítka ze staré klávesnice, tak jsem zjistil, že tlačítko nepůjde použít v kombinaci s univerzáním pájivým polem, protože kontektory mají špatnou rozteč. Ano, opravu jsem měl hodně starou klávesnici se spínači. V klávesnicích se teď bežně používá gumová membrána. Nakonec jsem za pár korun koupil tlačítka z GME.

Čtení stavu tlačítka nebo zachycení přerušení je poměrně jednoduché. Jde to udělat buď blokujícím čtením stavu (while true …) nebo přes přerušení. Je potřeba počítat s tím, že tlačítka můžou udělat zákmit a přerušení se vyvolá víckrát.

import RPi.GPIO as GPIO # Import Raspberry Pi GPIO library
GPIO.add_event_detect(10,GPIO.RISING,callback=button_callback)

Krabička

Na to v jaké to má být krabičce jsem na začátku ani nepomyslel. Přitom je to jedna z nejdůležitějších věcí celého návrhu. Původně jsem chtěl použít hotovou krabičku a vyříznout do ní pár otvorů. Nakonec vznikl takový pěkný 3D model.

Software

Poslední úkol je software, který to bude celé ovládat. Samozřejmostí je použití paměti a tmpfs, aby vydržela sd karta. K tomu by se němelo zapmenout další nastavení jako ‘noatime’ pro souborový systém ext4.

Co to má vlastně ukazovat nebo dělat?

Hodiny. Raspberry PI nemá RTC, ale já to chci používat připojené k internetu. NTP čas je vlastně lepší.

Určitě na tlačítko ukázat IP Adresu. Připojím to a dostanu adresu z DHCP, nechci připojovat HDMI a klávesnici, abych mohl upravit zdroják.

Počet nepřečtených mailů a kalendář. Google api má docela pěkné přiklady programování. Tuším, že by dalo použít i KDE Connect pro sdílení notifikací.

Zobrazovat počasí. Naštěstí je v Raspbianu asciiweather, který se dá použít pro zobrazení základních informací. Pravděpodobně by se dal použít parser metaru.

METAR LKTB 291200Z 16009KT 9999 FEW048 05/M02 Q1008 TEMPO RASN RMK REG QNH 0997=

Asi to budu mít zatím v kanclu na stole, takže bych tam mohl zobrazovat informace z Jiry (počty hotových ticketů, počet dní do konce sprintu, počet dní bez nehody) nebo informace o selhávajícím buildu z CI.

Další zajímavou vlastností je přehrávání hudby. Raspberry má audio jack, ale já mám momentálně volné pouze Bluetooth reproduktory. Když odejdu od Desktopu, tak se zamkne a kolegové musí buď trpět nebo připojit sluchátka, které přehrávání ztlumí. I první modely PI by si měli poradit s dekódováním MP3. Při troše snahy to s mplayerem to snad je řešitelné. Očekává se

  • párování bluetooth
  • nějaký zdroj dat. Pravděpodobně vyhraje online stream nějakého internetového rádia. Případně se dá zkusit spotify klient.
  • zobrazit jméno skladby a interpreta na displej by bylo fajn.
  • ovládání – měnit hlasitost / přepínat stanice / zastavit přehrávání

Funkcí je víc než tlačítek, takže bude potřeba více úrovňové menu, ve kterém se bude přecházet mezi položkami. Vzdálené ovládání z mobilu třeba přes webové rozhraní by se taky hodilo. Celé je to potřeba udělat nějak asynchronně, aby byla uživatelsky příjemná a hlavně rychlá odezva.

Zatím se na tom usilovně pracuje, ale časem bude určitě všechno na githubu. Pokud máte tip co se s tim dá dělat nebo hotový software nebo framework od kterého se odpíchnout, tak sem s ním.

Update: asi by bylo fajn nezačínat od nuly. V článku na rootu se zminují o podobném zařízení. V komentářích potom doporučují volumio nebo hifiberry a hifiberryOS.

Loading

By Jozef Mlích

Software Developer at GreyCortex, NemoMobile contributor, Micro light aircraft pilot, OpenAlt Conference organizer