Första person WiFi körning av Roombas och andra IR RC fordon (8 / 8 steg)
Steg 8: Avancerade: att lägga till stöd för dina egna enheter
Om du har nya enheter att stödja (andra robotar, TV, etc.), måste du veta de IR-koderna för din enhet. IR-Server stöder Pronto formatkoder så har du Pronto-kompatibel fånga hårdvara, kan du bara använda det. Jag själv avkodas Thames och Kosmos koderna med en Brainlink enhet (SurplusShed hade dem till försäljning).
Vad du behov till har i handen är antingen en Pronto-kompatibel hex sekvens eller också följande information:
- Bärfrekvensen (vanligtvis runt 38 khz)
- brast sekvens för varje funktion: detta är en sekvens av på och off tider i mikrosekunder
- tid i mikrosekunder att pausa mellan åter sända en burst sekvens när efterlikna en knapp är nedtryckt (vanligtvis 20000-100000 mikrosekunder)
Med hjälp av ovanstående information, kan du generera IR-Server-kompatibel kontroll frågor. För Pronto koder är formatet:
? ir = REPEAT: pronto: xxxx xxxx xxxx + + xxxx +...
där REPEAT är en av:
- oändlig : upprepa tills en stoppkod skickas
- count = x : upprepade gånger (x är ett positivt heltal)
- tid = x : upprepa x mikrosekunder (x är ett positivt heltal)
- när : spela en gång
xxxx xxxx xxxx + + xxxx +... är den Pronto hex koden med utrymmen ersättas med plustecken för webbanvändning. Till exempel anger webben Pronto koden för Roombas ren funktion som
0000 0069 0000 0008 0071 0027 0023 0071 0023 0071 0023 0071 0071 0027 0023 0071 0023 0071 0023 030B
Du kan sedan skapa IR-Server fråga:
? ir = tid = 500000: pronto: 0000 + 0069 + 0000 + 0008 + 0071 + 0027 + 0023 + 0071 + 0023 + 0071 + 0023 + 0071 + 0071 + 0027 + 0023 + 0071 + 0023 + 0071 + 0023 + 030B
Detta spelar den ren kod i en halv sekund (500000 mikrosekunder).
Om du har raw-data, i stället är din format:
? ir = REPEAT: raw: repeatpause:carrier:xxx:xxx:xxx:...
Här REPEAT är samma som för den Pronto koder, repeatpause är ett icke-negativt heltal anger hur många mikrosekunder att pausa mellan repetitioner (ignoreras om REPEAT när)--jag rekommendera att försöka 20000 som en start, och bärare är bärare frekvensen i Hz. Slutligen, burst sekvensen xxx:xxx:xxx:... är en sekvens av nummer Ange omväxlande på och av gånger i mikrosekunder. Således:
? ir = count = 12: raw: 20000:38000:400:200:400:200:300:150:100
begäranden som brast sekvensen sändas ut tolv gånger med 38000 Hz bärare, med en 20000 mikrosekund paus i mellan. Sekvensen är sedan 400 mikrosekunder på 200 av, 400 på, 200 av, 300 på, 150 off, 100 på.
Det finns också en speciell fråga:
? ir = stopp
som stoppar en föregående play kommando med oändlig, antal eller tid REPEAT.
Innan du gör någon HTML-redigering, rekommenderar jag att testa koderna genom inställning av IR Server ansluten till en sändare och manuellt avger koderna via en webbläsare. Exempelvis om IR-Server är på 168.1.1.49:7080, kan du släppa ut min raw exempelkoden genom att gå till:
http://168.1.1.49:7080/ir.html? IR = count = 12: raw: 20000:38000:400:200:400:200:300:150:100
Obs att det ingen spelar roll vilken webbsida du sätter för "ir.html"--koden kommer fortfarande vara utsänt. För största effektivitet, kan du göra "empty.html".
När du har arbetat ut frågan koder för din enhetsfunktioner, måste du skapa en HTML-fil kontrollera den. När du har installerat IR-Server, är dess HTML-filer i katalogen mobi.omegacentauri.irserver i telefonens internminne. Här hittar du en massa filer som du kan redigera det (om du vill uppdatera dem med de officiella versionerna, tryck på Meny och skriv över i IR-Server). Filen roomba.html är en bra början. Kopiera det till en ny fil (t.ex. xyzzy.html) och redigera den för att få typ av layout som du vill att enheten ska ha, och att redigera koder.
Den grundläggande tanken är att när IR-servern får en begäran med en av de ? ir = fråga koder, det avkodar koden och spelas upp. Begäran kan läggas till en HTML-fil, men filen empty.html är mest effektivt. Också, för effektivitet, i stället för att utfärda en GET -begäran, kan du bara utfärda en HEAD -begäran.
Filen roomba.html innehåller lite javascript för att avge förfrågningar på lämpliga knapptryckningar. Det finns två typer av knappar. Upprepande knappar spela en kod flera gånger tills man släpper knappen. Dessa använder en oändlig läge, och har både ontouchstart och onmousedown kod att arbeta på både touch och musen baserat beten. (Jag är en erfaren C programmerare och en något erfarenhet java programmerare, jag är helt ny till javascript, så jag inte kan göra saker på bästa sätt.) Icke-repeat knappar spela en kod för en viss tid så att den inte får missa, och göra det via onclick. Det finns olika javascript-funktioner till appellen för dessa.
Du kommer att märka att det finns särskilda förenklade ? ir önska Roomba och Thames och Kosmos koder. För dessa, bara ett enda decimaltal måste anges i stället för en burst sekvens, och blir kodad enligt protokollen Roomba och Thames och Kosmos (se den IRCommand klassen i IR-Server källa för hur det här fungerar).
Lägga nya HTML-filen i katalogen mobi.omegacentauri.irserver på telefonens internminne. Du kan komma åt den direkt efter namnet, eller du kan lägga till en länk till den i filen controllers.html .