ImPrinter: de elektrische Imp draadloze, internet-verbonden thermische printer (6 / 7 stap)

Stap 6: imPrinter: wat zit er in de code?


Als de GMB en agent code een beetje vreemd voor u lijkt, maak je geen zorgen! Programmering van het GMB omvat een paar nieuwe ideeën, maar de API reference is een grote hulp, en de rijke API maakt de meeste hardware taken in zeer intuïtief one-liners. Om echt te begrijpen wat er gaande is in uw firmware imp, je niet verslaan alleen het lezen van de code en het verwijzen naar de API reference, maar laten we een snelle blik op enkele van de echt interessante bits om u aan de slag te helpen. We beginnen met de firmware van de imp (thermalprinter.device.nut).

Onze apparaat firmware begint met de klassendefinitie van een voor de "printer" klasse. Klassen zijn een beetje meer handig zijn in situaties waar u wilt meerdere exemplaren van iets maken, maar dit levert een leuke manier om de structuur van onze code. De meeste van de dingen die de firmware van het apparaat moet doen hier worden gemaakt als de methoden van de klasse van de printer. De printer ook houdt spoor van eigen huidige instellingen.

Binnen de constructor van de klasse van de printer zien we een koele one-liner de UART (Universal Asynchronous ontvangen en zenden) om hardware te configureren in het GMB:

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

Dit stelt de UART-hardware op pin 5 en 7, configureert de baud-rate 19200 (bits per seconde), 8 data bits per woord, geen pariteit bits, 1 stopbit en geen datatransportbesturing; zowat de eenvoudigste UART instellingen die u kunt gebruiken.

Onder de klassendefinitie voor de printer registreert het apparaat sommige retouraanroepen voor de agent. We kunnen denken van deze als haken, elkaar geven de agent een manier om te vertellen van het apparaat om iets te doen. Agent callbacks zijn geregistreerd met "agent.on()", waarin twee argumenten: een tekenreeks, die zal worden doorgegeven door de agent om te vertellen het apparaat welke terugbellen te gebruiken; en een functie die wordt aangeroepen wanneer de agent die string stuurt:

 agent.on("print", function(buffer) {<br> server.log("Device: printing new buffer from agent: "+buffer);<br> myPrinter.print(buffer);<br>}); 

Kijkend naar de firmware, kunnen we zien dat we hebben geregistreerd callbacks voor allerlei dingen; gelijkwaardige vette of onderstreepte tekst, vertellen van het GMB om te beginnen met het downloaden van een afbeelding van de agent die met behulp van de "pull"-callback (die u vindt als een methode van de klasse van de printer), het voeden van een bepaald aantal lijnen, enz.

Wanneer de agent callbacks zijn al geregistreerd, en de klassen worden gedefinieerd, we instantiëren de klasse van de printer als een printerobject wilt maken en we zijn klaar om te gaan. De firmware van het apparaat is vooral gebeurtenisgestuurde; bits van het heten in actie wanneer de agent signalen is het tijd om iets te doen.

 // instantiate the printer object at global scope myPrinter <- printer(hardware.uart57, 19200);<br> 

De firmware van de agent is veel hetzelfde, maar zelfs korter, met een paar interessante stukjes gegooid in voor een HTTP-interacties. Laten we een kijkje nemen:

We het hele ding aftrap met een definitie van de printLogo functie - we zullen zien dat dit geregistreerd als een retouraanroep voor het evenement "logo" een beetje verder naar beneden. Een handig stukje hier is de illustratie van hoe te maken van een HTTP GET-aanvraag uit uw agent:

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

We maken een request-object met "http.get(reqURL), vervolgens verzenden, die een http response-object retourneert. Het lichaam van dat object response bevat de afbeeldingsgegevens - het is zo simpel als dat!

Na het doen van een beetje van het werk met de afbeeldingsgegevens, zien we de agent een gebeurtenis naar het apparaat sturen. Hier moeten we meerdere parameters naar het apparaat sturen, zodat wij hen in een array inpakken en verzend deze array met de gebeurtenis:

 local imageParams = [imageSize, imageWidth, imageHeight]; device.send("downloadImage", imageParams); 

Verder zien naar beneden we callbacks geregistreerd voor de gebeurtenissen van het "pull" en "imageDone" van het apparaat, dan een retouraanroep geregistreerd met "http.onrequest". Dit is een zeer nuttig stukje agent API: de functie hier geregistreerd zal worden aangeroepen wanneer een HTTP-aanvraag (van elke methode) is aangebracht in de agent URL in Apparaatinstellingen. Dit is hoe de agent omgaat met nieuwe gegevens uit de printer demo-website:

 http.onrequest(function(request,res){ 

Een zeer belangrijk deel hier, voor het verzenden van berichten naar de agent: als uw browser een bericht verstuurt, stuurt deze een Preflight-controle eerst om te zien welke methodes de geadresseerde ondersteunt. De ontvanger biedt deze informatie met haar antwoordheaders. Als dit niet laten zien dat de agent POST ondersteunt, de pagina zal niet sturen de hoofdtekst van het bericht, en het verzoek om de agent leeg! Hier is waar we deze headers om onze pagina te werken:

 res.header("Access-Control-Allow-Origin", "*");<br>res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); 

De agent doet een ander handig ding nadat de headers zijn ingesteld, maar een leesbevestiging moet worden verzonden: het bepaalt of gebruik de tekst bericht of afbeelding message handler op basis van het URL-pad waarop het verzoek is ingediend:

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

Laatst in de code van de agent zien we de callback geregistreerd voor het evenement "logo" van het apparaat:

 device.on("logo", function(value) {<br> printLogo();<br>}); 

Dat is de hele wedstrijd schieten! Het hele internet-verbonden printer, in minder dan 600 lijnen!

Gerelateerde Artikelen

Wordt - de (elektrische Imp aangedreven) Internet stopcontact aangesloten

Wordt - de (elektrische Imp aangedreven) Internet stopcontact aangesloten

Dit Instructable zal u tonen hoe te een PowerSwitch staart II tot een Elektrische Imp haak en bouwen van een eenvoudige webpagina voor het beheersen van het!De PowerSwitch kunt dat u overschakelen van netspanning werkt met een opto-geïsoleerde contro
Deuropener van de Garage van de elektrische Imp

Deuropener van de Garage van de elektrische Imp

Ik heb telling van het aantal keren die hebben zetten we af op een reis alleen om terug te keren om te controleren om te zien als we vergeten om het sluiten van de garagedeur verloren. Dit ' ible ziet u hoe de elektrische Imp verbinden met uw garaged
Maak uw eigen slimme licht met behulp van elektrische Imp

Maak uw eigen slimme licht met behulp van elektrische Imp

Maak uw eigen slimme licht met behulp van elektrische Imp. Leren hoe om te controleren en bewaken uw lichten vanaf mobiel, tablet en desktop in 15 minuten. $44 in hardware. Niveau van de ingang.Stap 1: HardwareVoltooi deze tutorial moet u de volgende
Elektrische Imp aan 8 elektrische verlichting met behulp van internet

Elektrische Imp aan 8 elektrische verlichting met behulp van internet

dit project maakt gebruik van de nieuwe (en super cool) elektrische Imp.  U kunt elektrische apparaten voor afstandsbediening 120VAC via WiFi, via het internet Imp Cloud.  Het Imp stuurt een seriële string van bits naar een "Seriële naar parallelle&q
Hoe meet je thermisch comfort met elektrische Imp en Ubidots

Hoe meet je thermisch comfort met elektrische Imp en Ubidots

Warme zomerdagen zijn leuk, toch? Maar de temperatuur is nog niet alles duurt voor ons lichaam te voelen; vochtigheid speelt ook een grote rol. In deze tutorial zullen we meten van temperatuur en relatieve vochtigheid van de omgeving en moet u een in
TempBug: internet-verbonden thermometer

TempBug: internet-verbonden thermometer

Laatste januari, hadden we wat moeite met de hitte in mijn kantoor. In het bijzonder de aard van de problemen waarin de warmte kan niet, u draai het omhoog, en het nog steeds niet op. Dit ging voor meer dan een paar dagen, en uiteindelijk een dag of
ImpBot: een Pan-Tilt elektrische Imp Robot

ImpBot: een Pan-Tilt elektrische Imp Robot

met systeemmenu (ControlBox), heb je een grote basis invoerapparaat duwen gegevens om de elektrische Imp-planner (en dus met het internet in het algemeen, via het HTTP-protocol uit het knooppunt), maar hoe zit het met uitvoerapparaten? Beheersing van
Aan de slag met Analog.IO en elektrische Imp

Aan de slag met Analog.IO en elektrische Imp

Analog.io is een nieuwe website gewijd aan het delen van gegevensstromen van internet van dingen aangesloten apparaten. Analog.io kunt u uw gegevens via een web-browser te bekijken, waar u ook in de wereld bent. U bepalen de gegevens die zijn uitgeze
Emma: een 8-cijferige alfanumeriek LED Display aangedreven door elektrische Imp

Emma: een 8-cijferige alfanumeriek LED Display aangedreven door elektrische Imp

Emma is een openbaar referentieontwerp voor een imp-aangedreven apparaat van elektrische Imp.Nog nooit gehoord van de elektrische Imp? Het is vrij netjes. "Het GMB" is een klein wifi-verbonden microcontroller ingepakt in de dezelfde vormfactor a
Internet-verbonden joystick

Internet-verbonden joystick

vorige week, ik heb gepost een demo op het opbouwen van impBot, een eenvoudige pan/tilt servo "robot" gecontroleerd via het internet met de elektrische imp. Op het moment, alles wat ik had voor controlerende genoemde robot een potentiometer in e
Elektrische Imp WiFi vooruitgang Display

Elektrische Imp WiFi vooruitgang Display

Wij vielen willekeurig in een ijs beloning systeem thuis. Brengen van goede cijfers binnenlandse middelen krijgen we om uit te gaan voor ijs. Niet zeker dat dit een politiek correcte beloningssysteem is, maar het is een evenement dat we allemaal graa
DMX uit de elektrische Imp

DMX uit de elektrische Imp

De elektrische Imp is een fantastisch kleine wifi-toegelaten microcontroller. Het is eigenlijk net als met een Arduino, een WiFi-schild en een Cloud-service in één pakket.Je krijgt niet net zoveel controle van de volledige processor als op de Arduino
Bedrading en programmeren van de elektrische Imp met een LCD-scherm

Bedrading en programmeren van de elektrische Imp met een LCD-scherm

hechten van een LCD-scherm aan een elektrische ImpWat is een elektrische Imp?Het is een Wifi aangesloten processor in een super klein pakket. Check de website voor meer informatie - Elektrische ImpIk kocht de Sparkfun seriële ingeschakeld 16 x 2 LCD
IMP-ERSONATOR: Arduino, elektrische Imp + Wave Shield = externe Sound File Player

IMP-ERSONATOR: Arduino, elektrische Imp + Wave Shield = externe Sound File Player

dit Instructable demonstreer hoe maak je een speler op afstand geactiveerd geluidsbestand.Het maakt gebruik van een elektrische Imp, een schild van Adafruit Golf en een Arduino UnoDe elektrische Imp kunt u snel verbinding maken met apparaten (met inb