. : New eShop! - Mobilní verze - Pandatron.cz - Pandatron.sk - Diskuzní fórum - Zakázkový vývoj : .
 
Projekt WiFi rádia VI - Komunikace s MPD
7. října 2010 - 9:51 | Pandatron | Projekt WiFi rádia VI - Komunikace s MPD | Komentářů: 0  

Projekt WiFi rádia VI - Komunikace s MPD

Konfigurace a použití MPD plus MPC, příprava portu pro připojení displeje a vytvoření jednoduchého skriptu pro získání názvu přehrávané skladby. To vše nás čeká v následujícím pokračování seriálu o konstrukci internetového rádia.

V současné době máme sestaveno kompaktní síťové zařízení, které umožňuje bezdrátové připojení k síti WiFi a přehrávání 16-bit 44kHz stereo streamu na sluchátka nebo externí reproduktory (po doplnění o zesilovač). Docela působivé, vezmeme-li si, že naše zařízení bylo původně levným bezdrátovým routerem!

Co chybí?
Stále nám však v rádiu chybí něco dost podstatného. V původním návrhu bylo určeno, že půjde o zcela samostatné zařízení. Konzolový přístup je tedy v pořádku, a umožňuje ovládání pomocí iPhone, ale mnohem lepší by byla možnost zobrazení stanice, která právě hraje, stejně jako možnost změny stanice bez použití jiného počítače nebo mobilního zařízení. Tedy použití levného znakového displeje a několika ovládacích prvků.

Co je tedy potřeba pro vytvoření uživatelského rozhraní?

Na základě našich požadavků, kladených na uživatelské rozhraní, je třeba zajistit dvě věci:

1. Zobrazit informace o tom, co právě mpd přehrává
2. Zajistit uživatelský vstup, který by mpd řekl, kterou stanici má přehrávat dále

Stejně tak bude v konečném zařízení dostupné i ovládání hlasitosti. V jeho případě se však jedná o jednoduchou funkci, samozřejmě především z pohledu hardwaru. V tomto díle se tady zaměříme pouze na první požadavek – a tím je displej.

Poznámka: Následující kroky předpokládají, že máte přístup k shellu OpenWrt přes spojení telnet nebo ssh a nepoužíváte k tomu FTDI USB - sériový kabel. Důvod k tomu je zřejmý, sériový port routeru totiž později použijeme pro spojení s další elektronikou!

Prvním krokem je tady získání informace o právě přehrávané stanici.

Povídejme si s mpd:
MPC – konzolově ovládaný klient, který jsme si nainstalovali v předchozím díle. Jeho schopností je poskytování dostatku informací o aktuální skladbě, stačí se ho jednoduše zeptat:

  root@OpenWrt:~# mpc
  SLAY Radio: Jogeir Liljedahl - Terra Cresta
  [playing] #1/5  22:36/0:00 (100%)
  volume: 60%   repeat: on    random: off

MPC poskytuje informace o playlistu, hlasitosti a povelech, odeslaných na MPD server, běžící na routeru. Na webové stránce o mpd je k dispozici ucelený přehled komunikačního protokolu a přehled dostupných instrukcí. Ve výchozím nastavení poslouchá mpd povely na portu 6600. Na ten je možné přistupovat vzdáleně a to pomocí některého z celé řady klientských programů, nebo lokálně, otevřením spojení telnet na portu 6600. Odesílané povely jsou v následujícím kódu zvýrazněny:

  root@OpenWrt:~# telnet localhost:6600
  OK MPD 0.13.0
  status
  volume: 60
  repeat: 1
  random: 0
  playlist: 14
  playlistlength: 5x
  fade: 0
  state: play
  song: 4
  songid: 4
  time: 2348:0
  bitrate: 192
  audio: 44100:16:2
  OK
  currentsong
  file: http://relay3.slayradio.org:8000/
  Name: SLAY Radio
  Title: Jogeir Liljedahl - Terra Cresta
  Pos: 0
  Id: 0
  OK

Aktuální připojení bude automaticky přerušeno přibližně po minutě nečinnosti.

Jak sami vidíte, je zde k dispozici velké množství informací, včetně několika shodných s mpc, uvedených již dříve. Výhodou přímého přístupu mpd je však především Název streamu (the Name: line) a umělce/alba (the Title: line). Oba údaje jsou od sebe navzájem odděleny novým řádkem, což nám skvěle poslouží jako záchytný bod pro snadné nalezení dat připojeným mikrokontrolérem.

Rovněž je možné přistoupit k mpd i pomocí nc příkazů. Použití nc umožňuje snadný přenos dat z jiných povelů k MPD a rozbor výsledků.

  root@OpenWrt:~# echo "currentsong" | nc localhost 6600
  file: http://relay3.slayradio.org:8000/
  Name: SLAY Radio
  Title: Jogeir Liljedahl - Terra Cresta
  Pos: 0
  Id: 0
  OK

Mimochodem, OpenWrt využívá i program s názvem busybox, emulující UNIX shellové prostředí – tedy včetně společných povelů. Obsáhlá dokumentace je k dispozici na této stránce, mějte však na paměti, že ne všechny povely jsou součástí výchozí instalaci busybox OpenWrt.

Pokud však chceme získat jen jméno a název aktuální skladby, můžeme použít příkaz UNIX grep, poskytující nám právě tyto dva řádky:

  root@OpenWrt:~# echo "currentsong" | nc localhost 6600 | grep -e "^Title: " -e "^Name: "

  Name: SLAY Radio
  Title: Jogeir Liljedahl - Terra Cresta

Komunikace s externím zařízením:
Nyní, když už máme ověřený způsob získání informací o skladbě z mpd, musíme zajistit nějaký způsob zobrazení těchto informací na externím displeji. K tomu můžeme s výhodou použít dostupný sériový port (nebo libovolný jeden ze dvou), který je standardně součástí routeru a nabízí nám k tomu přímo ideální řešení. Integrovaná podpora sériového portu v OS Linux umožňuje přímý výstup dat z routeru před sériový port, pouze stačí zadat přesměrování do /dev/tts/0 na konec každého povelu:

  root@OpenWrt:~# echo "currentsong" | nc localhost 6600 | grep -e "^Title: "
  -e "^Name: " > /dev/tts/0
  root@OpenWrt:~#

Jak se však ukazuje, rychlost 115200 baudů, která je nastavena jako výchozí, je pro některá externí zařízení příliš vysoká. Chceme-li komunikovat například s obvodem AVR , je možné změnit rychlost sériového portu a to od své výchozí hodnoty 115200 až po minimum 9600 Bd. Tato konfigurace se provádí pomocí povelů stty.

Poznámka: Pokud používáte starší verzi OpenWrt je pravděpodobné, že v něm stty není instalováno. Bohužel, jediný mnou známý způsob snadné nápravy je kompletní reinstalace OpenWrt za novější verzi, neboť stty je součástí busybox a je zahrnuta v základní distribuci. Pomocí příkazového řádku si tak prosím zkontrolujte, zda je 'stty' příkaz podporován. Pokud tomu tak není, budete muset celý systém přeinstalovat (viz. předchozí díly).

Přenosová rychlost se tedy mění pomocí povelu:

  root@OpenWrt:~# stty 9600 < /dev/tts/0

Nyní, pokud je vše funkční, připojte k routeru svůj FTDI USB - sériový kabel a otevřete ho v terminálu s nastavením použité rychlosti. Tedy například 9600 Bd, 8N1. Opětovným zavoláním posledního mpd dotazu by se v terminálu měla vypsat přijatá odpověď:

  root@OpenWrt:~# echo "currentsong" | nc localhost 6600 | grep -e "^Title: "
  -e "^Name: " > /dev/tts/0

Výsledek v terminálovém oknu:

  Name: SLAY Radio
  Title: Jogeir Liljedahl - Terra Cresta

Nyní tedy máme zajištěn poměrně snadný způsob získání informace o aktuální skladbě a jejím přesměrování na sériový port.

Tato operace lze zautomatizovat pomocí jednoduchého skriptu:

  #! /bin/sh -
  # display.sh - Wifi Radio LCD display routines
  # 12/12/08    Jeff Keyzer    http://mightyohm.com
  # This shell script queries mpd for current song information and sends
  # relevant bits of it to the serial port, where an AVR-based LCD display
  # is waiting.
  #
  # For more information, visit
  # http://mightyohm.com/blog/
  #
  trap 'exit 1' SIGINT    # exit on ctrl-c, useful for debugging
  stty 9600 < /dev/tts/0  # set serial port to 9600 baud
                          # so we can talk to the AVR
  while true        # loop forever
  do
   echo "currentsong" | nc localhost 6600 | grep -e "^Title: " -e "^Name: " > /dev/tts/0
   sleep 1
  done

Zkopírujte si tento skript do souboru a uložte jej na router. Nebo si jej můžete stáhnout přímo s pomocí funkce wget:

  root@OpenWrt:~# cd ~
  root@OpenWrt:~# wget http://mightyohm.com/files/wifiradio/display.sh
  Connecting to mightyohm.com (72.32.209.132:80)
  display.sh           100% |*******************************|   668  --:--:-- ETA

S pomocí chmod se ujistěte, zda je skript spustitelný:

  root@OpenWrt:~# chmod ugo+x display.sh

Pokud nyní skript spustíte, měli by jste v připojeném sériovém terminálu vidět jméno a titul aktuálně přehrávané sklady a to každou sekundu.

  root@OpenWrt:~# ./display.sh

Skript bude nyní pracovat v nekonečné smyčce – jeho ukončení je možné pomocí současného stisku kláves Ctrl + C.

To by pro šestý díl našeho seriálu bylo vše! V příštím díle si k routeru připojíme sériový LCD displej s obvodem AVR, který si naprogramujeme.

Odkazy & Download:
Domovská stránka autora
Building a Wifi Radio
Wifi Radio Discussion Forum

Asus WL-520GU
OpenWrt
FTDI 232 - 3V3







GooglePlus1 FaceBook Twitter del.icio.us DiGG Google StumbleUpon Google Buzz Email RSS PDF Tisk

Komentáře:
Název příspěvku: Vaše jméno: host
                 
  Zakázat formátování [Zakáže kódování a nahrazování smajlíky.]
Připojit soubory
reklama:
AS433 AUREL
Anténa vertikální 433.92MHz, 50 ohmů, max. 50W, s koaxiálním kablíkem
od 189 Kč

Informace uvedené v článcích jsou platné v době jejich vydání a samotné články jsou určeny pouze jako zdroj informací. Autor článku ani správce webu nenesou žádnou zodpovědnost za případné újmy na majetku a zdraví. Názvy společností a výrobků, loga a další multimediální materiál mohou být ochrannými známkami příslušných společností.
RSS kanály: | |
+420 723 846 377
info@pandatron.cz
Všechna práva vyhrazena | mobilní verze | © Copyright 2000 - 2016 ISSN 1803-6007