Galileo Project: Lav en skærm for at spore dagene, indtil MAKE hits Newsstands - 💡 Fix My Ideas

Galileo Project: Lav en skærm for at spore dagene, indtil MAKE hits Newsstands

Galileo Project: Lav en skærm for at spore dagene, indtil MAKE hits Newsstands


Forfatter: Ethan Holmes, 2019

Følgende er et tilpasset uddrag fra den kommende bog, Kom i gang med Intel Galileo.

Brug af Intel Galileo til netværksprojekter i hjemmet er en naturlig pasform. Med Arduino pin kompatibilitet, netværk og Linux er det en kraftfuld, men fleksibel bord. Da vi udforsker det tilsluttede hjem i denne uge, vil jeg gerne dele et Galileo-projekt, der passer til dette tema. Jeg tror, ​​at det tilsluttede hjem ikke kun drejer om at skifte omskiftere og at få temperaturen, men det handler også om at vise information til beboeren.

Jeg har oprettet en simpel hjemmeside kaldet Hvor mange dage, indtil jeg kommer ud? som tjener et enkelt formål: det fortæller dig, hvor mange dage, indtil næste nummer af MAKE Magazine forventes at ramme aviskiosker. Dataene indlæses i en database af mig baseret på produktionskalendere, som jeg modtager som MAKE Bidragende redaktør. Den serveres af et gratis niveau i Google App Engine, og kildekoden til webstedet er tilgængelig på Github, hvis du vil se på, hvordan jeg lavede det.

Når du går til http://nextmakemagazine.appspot.com/ i din webbrowser, vil du se, at oplysningerne er formateret til at blive set og forstået af et menneske, men serveren er også konfigureret til at tale direkte til enkle mikrocontrollere ved at strippe væk al den ekstra stil og sprog og kun returnere antallet af timer, indtil næste nummer frigives. Du kan se dette, hvis du går til URL http://nextmakemagazine.appspot.com/simple

Din Galileo kan bruge sin internetforbindelse via Ethernet til at oprette forbindelse til denne webadresse, tage de data, den modtager, og evaluere, hvordan den skal vises. Lad os først sørge for, at den kan oprette forbindelse til serveren.

BEMÆRK: For dette projekt skal du starte op af Galileos SD-kortbillede, som du kan downloade her.

Test af forbindelsen

  1. Tilslut din Galileo via et Ethernet-kabel til dit netværk. Du kan enten slutte den direkte til en ledig port på din router, eller hvis du er tilsluttet til Ethernet, skal du sætte den i en aktiv jack.
  2. Tilslut din Galileo til magten.
  3. Slut computeren til Galileo via USB-klientporten.
  4. Inden for Arduino IDE skal du vælge Filer → Eksempler → Ethernet → WebClient.
  5. Klik på Upload.
  6. Åbn serielt skærmbillede.

Hvis dit bestyrelse lykkedes at forbinde til en server, vil du se, at tekststart vises i den serielle skærm (som vist nedenfor). I dette eksempel programmeres din Galileo til at gøre en Google-søgning efter udtrykket "Arduino." Når HTML-svaret fra Googles server er modtaget, sender det disse tegn til Serial Monitor.

Nu hvor du er sikker på, at netværksforbindelsen virker, skal du få din Galileo til at oprette forbindelse til, hvor mange dage der kommer til at komme ud? server:

  1. Opret en ny skitse og indtast koden nedenunder
  2. Upload koden og åben derefter den serielle skærm.

Hvis det fungerede, skal du se antallet af timer, indtil MAKE kommer ud trykt hvert femte sekund i serielt skærm.

void setup () {} void loop () {Serial.println (getHours ()); forsinkelse (5000); } int getHours () {char output [5]; system ("curl http://nextmakemagazine.appspot.com/simple> response.txt"); FIL * fp; fp = fopen ("response.txt", "r"); fgets (output, 5, fp); fclose (fp); returnere atoi (output); }

Den første ting du måske bemærker i koden ovenfor er, at loop-funktionen kun har to linjer kode. Forsinkelsen (5000) er, hvad der sikrer, at hver gentagelse af sløjfen kun sker hvert femte sekund. Men hvad med serial.println (getHours ()) ;? Den inderste funktion, getHours (), er faktisk defineret lige under loop-funktionen.

Den første linje i funktionsdefinitionen angiver, at vores funktion kaldes getHours og vil returnere et helt tal som følge heraf. Når funktionen kaldes fra opsætnings- eller sløjfefunktionerne, udføres koden inde i funktionen. For getHours vil den bede om data fra serveren, gemme svaret i en fil og derefter læse filen og returnere en heltalværdi, der repræsenterer det antal timer, du skal vente, indtil et nyt udgave af MAKE er tilgængeligt.

Med Linux-kommandoen skal du skrive dataene til en fil og derefter have Arduino-skitsen læs den fil, der kun er en måde, så du kan få data i din skitse. Jeg var sikker på at vise denne unikke Galileo-funktion, fordi det er en effektiv måde at forbinde forskellige dele af et projekt sammen, da der er så mange måder at læse og skrive filer på.

Der er en anden interessant ting, der foregår i den kode. Lad os sige, at serveren sendte et svar på 45. Det sender faktisk to ASCII-tegn, en 4 og en 5. Når Arduino læser disse tegn, vil den ikke forstå dem som heltalet 45, men snarere to byte, der repræsenterer tegnene 4 og 5. Dette betyder, at hvis du skal lave matematik med værdien, skal du konvertere dem til et helt tal. Det er hvad funktionen atoi () er til. Det vil se på rækken af ​​tegn og udgive deres værdi som et helt tal, som du kan bruge til aritmetik.

Parsing JSON med Python

Hvor mange dage indtil der kommer ud? server gør ovenstående eksempel ret nemt, fordi det leverer et enkelt stykke data. Andre tjenester kan give et par forskellige stykker data struktureret i et format kaldet JSON, eller JavaScript-objekt notation.

JSON er blevet standardformatet til overførsel af strukturerede data via internettet. Hvis du vil kunne læse data fra et websted, der tilbyder JSON, skal du analysere det. Da dette ville være svært at gøre med Arduino-koden, kan du bruge andre sprog til at gøre dette job og videregive de relevante oplysninger til Arduino kode.

For at forhåndsvise JSON-data kan du besøge http://nextmakemagazine.appspot.com/json i din webbrowser.

{totalTimer: 1473, volumenNumber: "38", daysAway: 61}

Svaret vil sandsynligvis være sammen på en linje, men hvis du skulle tilføje linjeskift og indrykning, ville det ligne eksemplet ovenfor. Der er tre nøgle / værdi par: antal timer indtil næste nummer, næste volumen nummer og antal dage indtil næste nummer.

Koden nedenfor bruger Python programmeringssprog for at oprette forbindelse til serverens JSON-feed på http://nextmakemagazine.appspot.com/json og analyserer volumennummeret og antallet af timer.

Import json import urllib2 httpResponse = urllib2.urlopen ('http://nextmakemagazine.appspot.com/json') jsonString = httpResponse.read () jsonData = json.loads (jsonString) Udskriv "Volume", jsonData ['volumeNumber'] , "vil blive frigivet i", jsonData ['totalHours'], "hours."
  1. Opret forbindelse til Galileos kommandolinje ved hjælp af SSH, Telnet eller seriel
  2. Skift til rodens hjemmekatalog
# cd / home / root /
  1. Start teksteditoren vi med filnavnet _json-parse.py_ for at oprette den fil.
# vi json-parse.py
  1. Langs venstre side af skærmen ses en kolonne af tildes (~). Indtast bogstavet I for at indtaste indsætningsmodus. En "I" vises i nederste venstre hjørne af skærmen.
  2. Indtast koden ovenfra i vi.
  3. Tryk på escape-tasten for at skifte fra indsættilstand til kommandotilstand. "I" i nederste venstre hjørne forsvinder, og i stedet vil du se et punktum.
  4. Type ": x" og tryk enter for at gemme filen og forlade vi.
  5. Test scriptet ved at udføre koden fra kommandolinjen.
# python json-parse.py

Hvis du har alt rigtigt, skal du se følgende output på kommandolinjen:

Volumen 38 vil blive frigivet i 1473.0 timer.

Som du kan se fra eksemplet ovenfor, er det ikke særlig svært at analysere JSON-responsen fra et websted, når du har Python tilgængelig for dig på Galileo. Nu skal du blot forbinde svaret fra Python til din Arduino kode.

For at prøve det nu skal du først ændre json-parse.py:

  1. På Galileos kommandolinje skal du være sikker på at du stadig er i rodets hjemmekatalog:
# cd / home / root /
  1. Åbn filen til redigering i vi:
# vi json-parse.py
  1. Indtast bogstavet I for at indtaste indsætningsmodus. En "I" vises i nederste venstre hjørne af skærmen.
  2. Rediger filen, så den afspejler koden koden nedenfor.
import json import urllib2 httpResponse = urllib2.urlopen ('http://nextmakemagazine.appspot.com/json') jsonString = httpResponse.read () jsonData = json.loads (jsonString) udskriv jsonData ['daysAway']
  1. I Arduino IDE opretter du en ny skitse med koden fra koden nedenfor. Du kan se, at det ligner meget Arduino-koden ovenfor. I stedet for at kalde krølle fra kommandolinjen bruger den Python til at køre det script, du skrev.

void setup () {} void loop () {Serial.println (getDays ()); forsinkelse (5000); } int getDays () {char output [5]; system ("python /home/root/json-parse.py> /response.txt"); FIL * fp; fp = fopen ("response.txt", "r"); fgets (output, 5, fp); fclose (fp); returnere atoi (output); }

  1. Upload koden til tavlen, og åbn seriel skærmen.

Nu skal du se svaret fra serveren som antallet af dage, indtil næste udgave af MAKE kommer ud.

Tilslutning af en LCD tegnskærm

Hvor gode er disse oplysninger, hvis det kun kan ses i serielt skærm? Lad os tilslutte et LCD display til at udskrive disse oplysninger.

Ud over de dele, du har brugt, skal du også:

  • En standard 16 × 2 LCD tegnskærm, tilgængelig fra Adafruit, Sparkfun eller Maker Shed.
  • breadboard
  • Jumper ledninger
  • 10K eller 2K potentiometer

Sådan forbinder du LCD-skærmen med Galileo:

  1. Afbryd dit Galileo-kort fra din computers USB-port og fra strømmen.
  2. Indsæt LCD-skærmen i brødbrættet (loddehovedpindene på den om nødvendigt).
  3. Indsæt potentiometeret i brødbrættet.
  4. Brug jumperkablerne til at forbinde potentiometeret og LCD-skærmen til Galileo som vist i diagrammet herunder.

  1. Brug jumperkablerne til at forbinde LCD'et som vist i diagrammet nedenfor.

  1. Tilslut strøm til Galileo.
  2. Tilslut Galileo til din computer via USB.
  3. Fra Arduino IDE, uploade koden nedenfor.

#omfatte LiquidCrystal lcd (12, 11, 5, 4, 3, 2); tomrumsopsætning () {lcd.init (1,12,255,11,5,4,3,2,0,0,0,0); lcd.begin (16, 2); lcd.setCursor (3, 0); lcd.print ("dage indtil"); lcd.setCursor (0, 1); lcd.print ("MAKE er her!"); } tomrumssløjfe () {lcd.setCursor (0, 0); lcd.print (""); lcd.setCursor (0, 0); lcd.print (getDays ()); forsinkelse (30 * 60 * 1000); } int getDays () {char output [5]; system ("python /home/root/json-parse.py> /response.txt"); FIL * fp; fp = fopen ("response.txt", "r"); fgets (output, 5, fp); fclose (fp); returnere atoi (output); }

Nu kan du nemt holde tabs på, når næste nummer af MAKE vil ramme aviskiosker! Hold øje med udgivelsen af ​​Kom godt i gang med Intel Galileo til flere netværkstilsluttede Galileo-projekter!



Du Kan Være Interesseret

Droner, bots, kunst og fællesskab på den første årlige maker Faire Kuwait

Droner, bots, kunst og fællesskab på den første årlige maker Faire Kuwait


Bots_alive Opgraderer din gennemsnitlige robot til et elektronisk husdyr

Bots_alive Opgraderer din gennemsnitlige robot til et elektronisk husdyr


5 Uundværlige Shop Tools Du kan gøre dig selv

5 Uundværlige Shop Tools Du kan gøre dig selv


Minimalistisk ur fortæller tid med lysdioder

Minimalistisk ur fortæller tid med lysdioder