ImPrinter: elektriska Imp trådlös, internet-ansluten termoskrivaren (6 / 7 steg)

Steg 6: imPrinter: Vad är koden?



Om imp och agent koden ser lite udda till du, oroa dig inte! Programmering imp innebär några nya idéer, men API-referens är en stor hjälp, och den rika API gör de flesta hårdvara uppgifter till mycket intuitivt one-liners. För att verkligen förstå vad som händer i din imp firmware, kan inte du slå bara läsa koden och hänvisar till API-referens, men låt oss ta en snabb titt på några av de riktigt intressanta bitarna som hjälper dig att komma igång. Vi börjar med imp firmware (thermalprinter.device.nut).

Vår enhet firmware startar med en klassdefinition för klassen "skrivare". Klasserna är lite mer användbar i situationer där du vill skapa flera instanser av något, men detta ger ett trevligt sätt att strukturera vår kod. De flesta saker enhet firmware måste göra här skapas som metoder i klassen skrivare. Skrivaren också håller reda på sina egna aktuella inställningar.

Inuti skrivaren klassens konstruktor se vi en cool one-liner konfigurera UART (Universal Asynchronous ta emot och sända) hårdvara i den integrerade havspolitiken:

Hardware.uart57.configure (19200, 8, PARITY_NONE, 1, NO_CTSRTS);

Detta sätter upp UART maskinvaran på stift 5 och 7, konfigurerar överföringshastigheten till 19200 (bitar per sekund), 8 databitar per ord, ingen paritetsbitar, en stoppbit och ingen flödeskontroll; bara om de enklaste UART inställningar du kan använda.

Nedan klassdefinitionen för skrivaren registrerar enheten några callbacks för agenten. Vi kan tänka på dessa som krokar, var och en att ge agenten ett sätt att berätta att enheten ska göra något. Agent callbacks registreras med "agent.on()", som tar två argument: en sträng, som ska skickas av agenten att berätta enheten som motringning ska användas; och en funktion som anropas när agenten skickar strängen:

agent.on ("Skriv ut", function(buffer) {< br > server.log ("enhet: skriva ut ny buffert från agent:" + buffert); < br > myPrinter.print(buffer); < br >});

Titta på firmware, kan vi se att vi har registrerat callbacks för alla möjliga saker; togglande fet eller understruken text, berättar om försöksläkemedlet att börja hämta en bild från agent med "pull" callback (som du hittar som en metod i klassen skrivare), mata ett visst antal rader, etc.

När agent callbacks registreras alla, och klasserna definieras, vi instansiera klassen skrivare för att skapa en skrivare objekt, och vi är redo att gå. Enhetens firmware är främst händelsestyrd; bitar av det kallas till handling när agenten signaler är det dags att göra något.

initiera Skrivarobjektet på globalt definitionsområde
minskrivare <-skrivare (hardware.uart57, 19200); < br >

Agent firmware är ungefär samma, men även kortare, med några intressanta bitar kastas i för HTTP interaktioner. Låt oss ta en titt:

Vi köra hela igång med en definition av funktionen printLogo - vi får se detta registrerad som en callback för händelsen "logotyp" lite längre ner. En mycket användbar bit här är bilden av hur man gör en HTTP GET-begäran från din agent:

lokala reqURL = "http://electricimp.com/docs/attachments/images/examples/resources/ei_logo_tinyprinter.bmp"; < br > lokala req = http.get(reqURL); < br > imageData = req.sendsync () .body;

Vi gör en request-objektet med "http.get(reqURL), skicka sedan den, som returnerar ett http svar objekt. Kroppen av svar objektet innehåller bilddata - det är så enkelt är det!

Efter lite arbete med bilddata, ser vi agenten skickar en händelse till enheten. Här måste vi skicka flera parametrar till enheten, så vi packa dem i en array och sedan skicka arrayen med händelsen:

lokala imageParams = [imageSize, imageWidth, imageHeight];
Device.send ("downloadImage", imageParams);

Ner ser vi ytterligare callbacks registreras för händelserna "pull" och "imageDone" från enheten, sedan en callback registrerade med "http.onrequest". Detta är en mycket användbar bit av agent API: funktionen registrerat här kommer att kallas när en HTTP-begäran (av någon metod) görs i den agent URL i Enhetsinställningar. Detta är hur agenten hanterar nya data från skrivaren demo webbplats:

http.OnRequest(function(Request,res) {

En mycket viktig del här, för att skicka inlägg till agent: när webbläsaren skickar ett inlägg, skickar den en preflight-kontroll först för att se vilka metoder de mottagande stöder. Mottagaren ger denna information med dess svarshuvuden. Om dessa inte visar att agenten stöder POST, sidan kommer inte att skicka meddelandet och begäran att agenten är tom! Här är där vi satt dessa huvuden för att vår sida ska fungera:

Res.header ("Access-kontroll-tillåta-ursprung", "*"); < br > res.header ("Access-kontroll-tillåta-Headers","ursprung, X-efterfrågades-med, innehållstyp, acceptera");
Res.header ("Access-kontroll-tillåta-metoder", "POST, få, alternativ");

Agenten gör en annan användbar sak efter rubrikerna är inställda, men innan svar skickas: den bestämmer om du vill använda text meddelande eller bild meddelande föraren baserat på URL-sökvägen som begäran gjordes:

om (request.path == "/ text") {

Senast i agent koden ser vi återuppringning registrerade för händelsen "logotyp" från enheten:

Device.on ("logotyp", function(value) {< br > printLogo(); < br >});

Det är skytte hela matchen! Hela internet-anslutna skrivaren, mindre än 600 linjer!

Se Steg
Relaterade Ämnen

IMUPPHÖJT - (elektriska Imp drivs) Internet ansluten växelströmsuttag

Detta Instructable visar hur man koppla en PowerSwitch svans II och en Elektrisk Imp och bygga en enkel webbsida för att kontrollera det!PowerSwitch kan du växla växelström med en opto-isolerade styrkretsen. Detta innebär att trådarna du ansluter til...

Elektriska Imp att kontrollera 8 elektriska lampor använder internet

detta projekt använder den nya (och supercool) elektriska Imp. Du kan fjärrkontrollen 120VAC elektriska apparater över WiFi, via internet Imp moln. Försöksläkemedlet skickar en seriell sträng av bitar till en "Följetong till parallell" digital u...

Kom igång med Analog.IO och elektriska Imp

Analog.IO är en ny webbplats för att dela dataströmmar från internet för saker anslutna enheter. Analog.IO kan du Visa dina data via en webbläsare, var du än är i världen. Du styr data som ritas genom en inbäddad enhet. Analog.IO är community driven...

Styrenhet: En internet-ansluten ratten för att styra... något!

Efter att sätta ihop ett halvdussin eller så elektriska Imp projekt, det slog mig att bara för den integrerade havspolitiken är kraftfull nog att hantera komplicerade uppgifter inte betyder att att göra en enkel sak Internetanslutning är mindre kraft...

Elektriska Imp Garage dörröppnare

Jag har tappat räkningen på hur många gånger har vi iväg på en resa bara för att vända tillbaka för att se om vi mindes att stänga garageporten. Detta "vänners kompatibla visar dig hur du ansluter den elektriska Imp till ditt garage dörröppnare, hur...

Internet-ansluten joystick

förra veckan, jag postat en demo på att bygga impBot, en enkel pan/tilt servo "robot" kontrolleras via internet med den elektriska imp. Vid tiden, allt jag hade för kontrollerande nämnda robot var en potentiometer i en låda, som gjorde den total...

ImpBot: en Pan-Tilt elektriska Imp Robot

med styrenhet, har du en bra grundläggande enhet driver data till den elektriska Imp planner (och därmed till internet i stort, via HTTP ut nod), men hur är utdataenheter? Kontrollera lamporna är ett bra trick, som vi såg i går, men det räcker inte a...

Emma: en 8-siffrig alfanumerisk LED skärm som drivs av elektriska Imp

Emma är en offentlig-domän referens design för en imp-drivna enheten från elektriska Imp.Aldrig hört talas om elektriska Imp? Det är ganska snyggt. "Imp" är en liten wifi-anslutna mikrokontroller packade upp i samma formfaktor som ett SD-kort. D...

Komma igång med elektriska Imp

elektriska Imp gör det lätt och roligt att få Internet-anslutning till dina enheter.Detta Instructables vägleder dig genom processen att skapa en elektrisk Imp konto, och få din första Imp online.Behöver du följande leveranser:1 x USB Mini kabel1 x A...

SnackBot: Internet ansluten godis maskinen!

Under 2013 Bay området Maker Faire, elektriska Imp distribuerade en häpnadsväckande 40-plus pounds av M & Ms med vår Internet ansluten SnackBot. Hundratals deltagare älskade det, så vi beslutade att dela hur vi byggde den.Våra SnackBot är uppbyggd kr...

Enkel trådlös temperatursensor uppdatera webbplatsen med elektriska imp och termistor

[Redigera 2014] Planeraren som användes av elektriska Imp inte längre används och inte tillgänglig längre. [/Edit]Detta är ett litet projekt att komma igång med den elektriska imp och en termistor så du kan se hur du kan få temperaturavläsningar uppd...

TempBug: internet-ansluten termometer

I januari hade vi lite problem med värmen på mitt kontor. Specifikt, typ av problem där värmen inte är på, du slår, och det fortfarande inte på. Detta pågick i mer än ett par dagar, och slutligen slutade en dag eller två efter att vi fick en e-tillkä...

IMP-ERSONATOR: Elektriska Imp + Arduino + Wave Shield = avlägsna ljud fil spelare

detta Instructable kommer att visa hur man gör en distans aktiverat ljudfil spelare.Den använder en elektrisk Imp, en Adafruit våg sköld och en Arduino UnoDen elektriska Imp kan du snabbt ansluta enheter (inklusive arduinos) till internet via ditt Wi...

Skapa din egen smart ljus med hjälp av elektriska Imp

Skapa din egen smart ljus med hjälp av elektriska Imp. Lär dig att kontrollera och övervaka dina lampor från mobil, Tablet PC och skrivbordet i 15 minuter. $44 i hårdvara. Posten nivå.Steg 1: hårdvaraFör att slutföra denna tutorial behöver du följand...

Elektriska Imp postlåda anmälningar

Jag ville få in i IoT sak ett tag. Jag tvekar mellan den integrerade havspolitiken och SparkCore och slutligen gick jag för den integrerade havspolitiken. Hittills har marknaden inte gott om enheter som dem.En cool och lätt projekt var att börja med...

Väder Buddy System använder elektriska Imp och Arduino vederbörlig

bara skicka en video av min kompis vädersystem som jag nyligen gjort. Den elektriska Imp används för att ansluta till internet och få väderinformation och Arduino Due skicka denna information till de respekterade delarna.Jag vet inte om bygget förtjä...

Bländande Fundraising tecken: 140 watt av Internet ansluten lysdioder

Bygga internet anslutna tecknet för att samla in pengar till en lokal välgörenhetsorganisation!Läs mer om high power LED, Arduino, Raspberry Pi & python, digital radio, ledningar & lödning och ett litet snickeri.Förhoppningsvis i 10 timmar eller s...

DMX från den elektriska Imp

Den elektriska Imp är en fantastisk liten wifi-aktiverad mikrokontroller. Det är i princip som att ha en Arduino, en WiFi-sköld och en molntjänst i ett paket.Du får inte så mycket full processor kontroll som på Arduino, dock, eftersom Cortex M3 gör a...

Elektriska Imp WiFi framsteg Display

Vi föll slumpmässigt till en glass belöningssystem hemma. Att få bra betyg hem medel får vi gå ut för glass. Inte säker på att detta är ett politiskt korrekt belöningssystem, men det är en händelse som vi alla ser fram emot. Naturligt, jag är en mott...