Bygga din egen Wifi-radion (6 / 14 steg)
Steg 6: Kommunikation med ASUS
Kommunikation med routern kan tyckas vara en lite skrämmande (ja det gjorde jag), särskilt när du är ny till den. Men det är inte så svårt som det verkar.Skicka kommandon till routern
Först måste vi bestämma vad vi vill ha radion att göra. Vi vill i princip att den:
- spela
- pausa
- Stanna
- ändra station
- Ändra volymen
Om vi tittar in i listan med kommandon för mpc ser vi att:
- kommandot för att spela = mpc spela
- kommandot för paus = mpc pausa
- kommandot för stopp = mpc stoppa
- kommandot för volymen = mpc volym [+/-] num (numeriskt värde)
Byte av stationen är lite svårare. För att kunna ändra till en annan station, måste mpc känna det är adressen. Enklaste sättet att göra detta är att förbelasta alla våra favorit stationer i en spellista på spelaren. Så i början av vår kod kommer vi lägga till kommandot:
mpc lägga till adressen för varje station som vi vill förspänning i routern.
Innan vi börjar lägga till stationer, kunde vi utfärda en mpc klart . Detta tar bort alla tidigare listor, bara i fall vi gjort några förändringar i vår lista.
Efter allt detta är gjort, kan vi ändra stationen med kommandot mpc spela num , där num är placera av stationen i våra extra spellista.
I Bascom, skicka dessa kommandon till routern är mycket lätt. Allt är gjort med tryck:
Skriva ut "mpc spela" eller skriv ut "mpc volym + 5"
Det finns ingen anledning att lägga till en Carridge avkastning (CR eller ASCII-013) till kommandot som Instruktionen Skriv ut har tillagt att av sig själv.
Så som ni kan se, skicka kommandon till routern är inte svårt alls!
Begära och ta emot information från routern
Begära och ta emot information från routern är lite svårare. Återigen, vi måste du bestämma vilken information vi vill ha från routern. När du läser del 6 på www.mightyohm.com, ser du att det finns massor av info som du kan få, men vi vill bara veta:
- namnet på stationen
- titeln på låten
- volymen
Begäran för att få station och titel görs med följande kommando:
echo "låt" | nc localhost 6600 | grep -e "^ titel:" -e "^ namn:" (bakgrund kapital T och N)
och för volymen:
echo "status" | nc localhost 6600 | grep -e "^ volym:" (Inget kapital här)
Så i bascom som skulle ge:
Skriva ut "echo"; Chr(34); "låt"; Chr(34); " | NC localhost 6600 | grep -e "; Chr(34); "^ Titel:"; Chr(34); " -e " ; Chr(34); "^ Namn:"; Chr(34); ">/dev/TTS-/ 0"
och
Skriva ut "echo"; Chr(34); "status"; Chr(34); " | NC localhost 6600 | grep -e "; Chr(34); "^ volym:"; Chr(34); ">/dev/TTS-/ 0"
Igen finns det ingen anledning att lägga till en CR.
När vi skickar en av dessa förfrågningar, vi kommer att få något i våra buffert omedelbart. Nu behöver vi att arrangera alla data i vår buffert till nyttiga saker.
Lyckligtvis för oss etiketter routern dess information. Innan stationname lägger Namn:, före titel titel och innan volym volym. Så ska vi låta vår kod söka för lämplig etikett och läsa bufferten från den punkten tills den stöter på en CR eller bufferten är tom. Efter all info är ur bufffer, tömma vi helt enkelt bufferten så att den kan användas för en annan begäran.
Så vi börjar med att läsa bufferten till en sträng. Efter det kan vi helt enkelt rengöra bufferten så att det finns inga oönskade tecken kvar. Vi kommer att titta i vår sträng för en av etiketterna med den var = INSTR (sträng, substr) uttalande. Detta kommer att returnera positionen för vår etikett i vår huvudsakliga sträng.
läge = Instr (Uart_in_string, "namn:")
Detta ger oss positionen för det första tecknet i etiketten. Om du inte vill lägga till etikett onto din skärm, sedan bara lägga det belopp du behöver börja läsa bakom märket. I detta fall:
läge = position + 6
Härifrån måste vi avgöra hur länge uppgifterna är. Så från den punkt positionen börjar vi läsa ett tecken i taget tills vi hittar en CR eller tills vi nådde det sista tecknet i strängen. Vi använder den var = MID (var1, st [, l]) uttalande där var1 = källan, st = startpunkt och jag = mängden tecken att läsa. Så i vårt fall:
Längd = 0
Göra
INCR längd
Läge = Position + längd
Temp = MID (Uart_in_string, Position, 1)
Slinga tills Temp = Chr(13) eller Temp = ""
Så nu vet vi längden på våra data och det enda som är kvar för att göra, är att extrahera data från Källsträngen. Igen med mitten av uttrycket:
Namn = Mid (Uart_in_str, position längd)
Samma sak kommer att fungera för titeln och volymen.
Nu vi inte diskutera men hur att läsa från bufferten och töm den. Läsning från bufferten görs med var = INKEY(). Detta kommer att returnera ASCII-värdet i den första byten i bufferten och ta sedan bort tecknet från bufferten. Vi bara lägga till varje enda mottagna tecken tillsammans till en sträng som innehåller hela eller en del av bufferten.
Göra
Uart_buffer = Ischarwaiting() Ischarwaiting() berättar hur många tecken det väntar i bufferten
Om Uart_buffer > 0 då
Uart_in = Inkey()
Uart_in_str = Uart_in_str + Chr(uart_in) Chr förvandlas det verkliga tecknet ASCII-värdet
Slut om
Loop tills Uart_buffer = 0 eller Len(uart_in_str) = 255 Len ger oss längden på ett snöre
För att tömma bufferten, bara läsa allt till en sträng tills Ischarwaiting() = 0
Detta var allt du behövde veta för att kommunicera med din router. Hela resten av koden är mestadels kosmetiska: grafiska grejer och så vidare.