Hur man gör en fjärrkontroll kännande web-docka av hacka Twitter, Google, Skype, Arduino och bearbetning! (5 / 16 steg)
Steg 4: Hur Twitr_janus talar med text till tal (i bearbetning)
Öppna data på tal
En viktig punkt som jag försöker testa med Twitr_janus var om jag kunde få en marionett tala öppna data över webben. Från början var det tänkt detta skulle bara vara tweets från konto på Twitter och detta var hur Twitr_janus fick sitt namn.
Twitr_janus gjorde verkligen framgångsrikt tala tweets, strippad från Twitter API med bearbetning.
Att göra Twitr_janus tala tweets gjordes utan att använda API keys och parsning API strängen i stället för att referera till fält korrekt. Detta skulle undvika att behöva registrera dig som en Twitter utvecklare, etc. Denna råa metod hade vissa begränsningar, till exempel tweets med styrtecken, förvirrad analysera skript leder till meddelanden att trunkeras När att avkodas.
Analysera modellen fungerade mycket bättre med Google spreadsheets, där rådata kan läggas med extra stopp data för att analysera processen med hjälp av uttryck i fälten kalkylblad. Google kalkylbladsdata var inte bara lätt att använda för tal, var det möjligt att enkelt använda det för ögongloben kontroll. Eftersom Google spreadsheet metoden är lättare och mer mångsidig av två metoder, är detta vad som beskrivs nedan.
Hur data skickas, kodade och avkodas, steg för steg
Det hjälper för att tänka igenom flödet av data...
Innan på detta tyckte jag att det är bra att klottra ner ett flödesschema över att få en känsla för de byggstenar som behövs. Mun och TTS-representerar funktionen av text till tal-konvertering.
Detta är inte en teknisk ritning!
Del 1 - att ange data i Google kalkylark
Det fanns tre datadelar som behövs skickas från spreadsheed, till avkodas av bearbetning. Dessa var de två variabler eyeballUpDown_stop (kolumn F) och eyeballLeftRight_stop (kolumn G) som är kodade placering av data. Senare en gång avkodas skulle de användas för att driva servon med en Arduino bifogas marionett huvudet. Den tredje delen av data var text_stop, vilket är vad som skulle bearbetas ytterligare bearbetning för att skapa text till tal.
I den slutliga versionen sändes bara två bitar av data. Taldata, och ett enda ögongloben datavärde. Detta kan orsaka viss förvirring när man tolkar koden! (eyeballUpDown användes, men inte bytt namn),
En enda ögongloben position variabel kan användas i stället för två eftersom data som skickas bara representerade en av 25 positioner. Även om två kontrollvärden behövs av Arduino att placera ögonglober (en för upp/ner servo, en för vänster/höger servo) användes den enda variabeln skickas att få tillgång till motsvarande värdepar, lagras i en matris inuti Arduino skiss.
I cellerna, kan du se att data har föregåtts av ¬ karaktär. Detta läggs till oavsett data anges manuellt med en concatonating cell uttryck. Det används som ett stopp tecken för att avgränsa data strängarna senare. Dessa tecken visas i RSS-flöde och bearbetningsskriptet använder dem för att berätta där en dataenhet slutar och nästa börjar. (kontroll-karaktär avgränsningen)
Från början var data anges manuellt i fält på kalkylbladet, enligt nedan. Detta är inte perfekt, eftersom du måste veta de exakta värdena att skicka, vilket är svårt att komma ihåg och lätt att röra upp...
För att undvika manuellt skriva in data i kalkylbladet, användes inbyggda Google form. Detta är tillgängligt för alla Google spreadsheet användes.
Dock krävs standardformulären som Google ögongloben numeriska positionering värden anges exakt, så det behövs ändras.
För att skapa en mer användbar form med enkel kontroll över förinställda värden för variablerna ögongloben grundläggande överfördes html i formuläret till en webbsida (en html widget på en NetVibes sida), där det kunde vara pimped upp lite.
Formuläret i Netvibes som det såg ut för operatorn marionett
Fri text ingångar var bytte för radio knapp ingångar med förinställda värden och motsvarande texten läsbar ståndpunkten.
Viktigaste var att fortfarande använda Google ursprungliga fältnamnen så att alternativen data skulle alla vara sparken i samma cell i kalkylbladet när det nya formuläret lämnades
Du kan se detta i HTML-vy av formuläret nedan. Alla alternativ följer samma mönster som nedan
- XXX är ett värde som skickar data som motsvarar till den fysiska ögonglob ståndpunkten "positionxxx"
- Xxx värdet faktiskt ett referensnummer värde inom ett specifikt element av en matris (det finns 25 olika förinställda positioner, därav där som en alternativknapp som behövs för varje heltal mellan 1 och 25, används till referenc array värden mellan array [1] och array [25]
- positionxxx är en vanlig engelsk beskrivning att Visa operatorn, att tillåta dem att välja en målpositionen ögongloben
- "entry.1.single" är namnet på Google-fältet som måste hållas samma, så det kommer att sätta värde xxx i rätt cell i kalkylbladet. Detta är samma för varje alternativknapp, eftersom de olika värdena är effektivt val av värden att lägga i en fältet
Efter omarbetning form, skapades ett mer visuellt gränssnitt, så det var lättare att se var ögonglober skulle flytta, samtidigt tillåta tal text som ska anges.
Den andra linjen som är viktig som tas också från orginal Google form html är denna:
Det är formen överföringsåtgärd och måste hållas samma.
Denna teknik koppleri en enkel Google form har vissa fördelar:
- Det låter dig andra möjligheter som att lägga till kontinuerlig reglagen med hjälp av HTML 5 funktionen < input type = "range" / >
- Du kan skapa en metod för att injicera data till ett kalkylblad utan någon form av API-nyckel. Du behöver bara veta hur till tweak HTML-formulärkontroller och värden.
- Du kan mata in data i ett fält, men dra data ut från ett annat fält som använder indata, men ändras på något sätt att utvidga dess mångsidighet, som krävs
Nackdelen är
- på att skicka formuläret, tar Google dig tillbaka till den ursprungliga formen inte pimped formuläret, så du behöver göra en sidan uppdateras efter varje inlämning att ladda om du bildar
Formuläret i Netvibes - HTML-källkod (bilden nedan)
Del 2 - att få uppgifter i andra änden av webben
Den post som beskrivs ovan representerar den första länken i den ganska skräp dataflödesdiagram visas högst upp på sidan (även om den visar Twitter som datakälla, inte Google). Data träder steg händer på en anordning, används av operatören från Twitr_janus marionett huvudet. Det är i själva verket det primära gränssnittet.
I andra änden av webben, var Twitr_janus' huvud ansluten till en separat dator som kör sin bearbetning hjärnan skiss. Detta röstningen en RSS-data-feed från det publicerade kalkylbladet. För att få detta flöde, hade kalkylbladet att publiceras. När du publicerar ett Google-kalkylark, ges det en allmän RSS-flöde, med en särskild URL. Detta används senare i skriptet bearbetning för att tolka data. Den Url ser för en Google RSS kommer att se ut så här...
Och resultatet ser ut så här...
I RSS-utgång stopp tecken ¬ syns tydligt (andra från sista raden, innan fältnamn: "eyeballupdownstop", "eyeballleftrightstop" och "textstop" och motsvarande värden för 13, 22 och "Hej mitt namn är..."
Bearbetning skissen som är Twitr_janus' hjärna undersökningar denna URL upprepade gånger och använder ¬ tecken för att tömma data...
Här är den kod som parsning google kalkylark flöde för att extrahera kontrolldata och leds sedan vidare i en array. Det söker ¬ karaktär först, då den < karaktär String [] texty3 = dela (texty2 [4], "<'); bli av med avslutande text efter <
>>>
String [] texty = loadStrings(gssApiString);
String [] texty2 = dela (texty [0], "¬"); dra ut data med stopp tecken
gssText = texty3 [0];
gssTextLength = gssText.length();
<<<
Detta kontrolleras sedan i behandling mot den senaste mottagna datan. Om det är olika, har då en ny instruktion tagits emot.