Arduinolyzer.js: Förvandla din Arduino till en logik Analyzer (4 / 8 steg)
Steg 4: Node.js Server
Här är serverns huvuduppgifter:
- Initiera serieporten och starta Arduino
- Starta en HTTP-server
- Servera den index.html -sidan (och alla statiska sidor från "/")
- Svara på AJAX POST till "/ starta" genom att leverera data till Arduino via serieport objektet
- Registrera en motringning för att lyssna till Arduino för slutförande
- Får och paketera Arduino data till en JSON objekt och skicka den till klienten via socket.io
Detta sker i ett hundratal rader kod tack vare befintliga npm moduler. Som servern accepterar en kommandoradsparameter, namnet på serieporten (/ dev/tty * på mac/unix och COM * på Windows).
[Varning: detta är min första gången du använder serialPort paketet. Jag hade inte några problem, men jag har inte den känslan av att verkligen förstå det ännu, i det som gör mig illa till mods. Ibland har Felsökningskonsolen konstiga tecken i den när Arduino startar. Det kan bero på den TTY inte att spolas, eller det kan bero på något jag inte förstår om seriell port timing. Behaga låta mig veta om du har några problem.]
Innan server.js startar HTTP-tjänsten med Express app lyssnare, initierar det seriell port som första argument på kommandoraden. Det måste finnas en tre sekunder timeout väntar på enheten för att starta upp. Jag lade till ytterligare förebyggande åtgärder för att vänta på "initierade" strängen från Arduino innan användaren kan skicka data.
Klient till Server-kommunikation
Det finns bara två ändpunkter exponeras av servern, POST till "/ starta" och få från "/".
Klienten till servern samtal via AJAX hanteras av en formidabel formulärobjektet. Express app slutpunkten "localhost: 8080 / start" fångar POST överföring via formulärobjektet, som kommer in som text JSON objekt inföding. Jag egentligen behöver inte ett objekt, jag kunde ha använt en textsträng, men jag lämnade viss flexibilitet. Jag ens registrera inte en .on() återuppringning med objektet POST, jag helt enkelt hänvisa till parametern "fält" under parse() samtalet.
Sidan index.html serveras med hjälp av Express statisk sida server modul. Allt i allmänheten / mapp kan serveras på så sätt inklusive CSS- och JS moduler.
Server till Arduino kommunikation
Eftersom klienten färdigformaterade kommandosträngen, servern helt enkelt skriver det till den seriella porten som-använder serialport.write() via objektet analyzer .
Arduino till Server-kommunikation
Svaret från Arduino kommer i på den seriella porten .on('data') motringning i objektet analyzer
Server till klientkommunikation
Data återuppringning hanterar också förpackning data till en JSON objekt och skjuta den till klienten via ett socket.io tryck. (Detta är alla mycket spännande och uppfriskande jämfört gör web push tillbaka i slutet av 1990-talet!)
Jag la några log kommandon så att jag kan titta på dataströmmar från både Arduino och klienten. Jag använder också morgan paketet för att spårar HTTP-begäranden.