Koble Arduino til wifi

Koble Arduino til wifi

For å kunne bygge et internettilkoblet produkt må vi først og fremst koble det til et nettverk. I dette kapittelet skal vi se nærmere på hvordan det går til.
Obs! Wifi-modulen i dette kapittelet har en fastvare (firmware) som koden er tilpasset for. Hvis produsenten av wifi-modulen gjør endringer i fastvaren, kan det hende koden må oppdateres.

Nettverksmaskinvare for Arduino

Det er to måter å koble et utviklingskort til et nettverk på: kablet eller trådløst. Kablet tilkobling gjøres enklest ved å koble et nettverksshield med nettverksport til utviklingskortet. Siden en kablet tilkobling gjør plasseringen mindre fleksibel, bruker vi en trådløs løsning i stedet. 

nettverksshield

For å koble utviklingskortet til et trådløst nettverk bruker vi en wifi-modul som bygger på brikken ESP8266. Modulen har støtte for å overføre data i opptil 150 Mb/s med Wireless N (på 2,4 GHz-båndet). Du finner mer informasjon om hva dette innebærer, i nettverksdelen i Hvordan virker det?-bokserien.

Wifi-modulen passer ikke direkte på koblingsbrettet. Vi kobler den derfor til via en liten koblingsadapter. Både wifi-modulen og koblingsadapteren er inkludert i bokens medfølgende komponentpakke.

Wifi-modul

Konfigurere wifi-modul for Arduino

Arduinoen vil kommunisere med wifi-modulen via seriellporten på GPIO-pinne 0 og 1 (RX og TX). Det er samme port som vi har brukt tidligere til å sende data til Seriell overvåker på datamaskinen. Det er ikke mulig å bruke samme seriellport til begge formål, noe som er et problem ettersom vi vil bruke seriellporten til feilsøking.

Vi kan løse portkonflikten ved hjelp av et bibliotek som heter SoftwareSerial. Det lar oss kommunisere med wifi-modulen på andre GPIO-pinner enn 0 og 1. Wifi-modulen er imidlertid forhåndskonfigurert for å kommunisere med datahastigheten 115 200 Bd, og SoftwareSerial-løsningen fungerer bare med 9600 Bd. Vi må derfor endre en innstilling i wifi-modulen, og det gjør vi på følgende måte.

Vi begynner med å laste opp Blink-skissen til Arduinoen vår (for å kunne kommunisere direkte med wifi-modulen). Vi kunne ha brukt en hvilken som helst skisse, forutsatt at den ikke bruker Serial.

Blink.ino

Når vi har lastet opp Blink-skissen, kobler vi wifi-modulen til utviklingskortet vårt i henhold til koblingen nedenfor. Husk at strømforsyningen må få strømtilførsel (enten med et batteri på 9 V eller med en strømadapter). Strømforsyningen er nødvendig fordi wifi-modulen drives med 3,3 V, og utviklingskortet ikke kan gi tilstrekkelig med strøm på den spenningen.

Advarsel! Ikke driv wifi-modulen med 5 V.

Illustrasjon laget med komponenter fra Fritzing (fritzing.org). CC BY-SA 3.0

Deretter åpner vi Seriell overvåker og angir følgende innstillinger:

  • Datahastighet: 115 200 Bd (hastigheten som wifi-modulen har som standard)
  • Linjeskift: NL & CR (godta alle linjeskift)

I inndataruten øverst skriver vi AT for å kontrollere om vi kan kommunisere med wifi-modulen.

Hvis vi kan kommunisere med wifi-modulen, svarer den "OK".

Når vi har verifisert at vi kan kommunisere med wifi-modulen, sender vi følgende kommando. 

AT+UAR_DEF=9600,8,1,0,0

Obs! Det er viktig at det skrives riktig.

Wifi-modulen bekrefter at den har mottatt det.

Vi avslutter med å starte wifi-modulen på nytt med følgende kommando:

AT+RST

Når denne konfigurasjonen er klar, vil vi kontrollere at alt gikk bra. Det gjør vi ved å endre datahastigheten i Seriell overvåker til 9600 Bd og skrive AT-kommandoen igjen (for å se om vi får noe svar). Hvis vi får svar, fungerer alt på riktig måte. 

Koble Arduino til wifi

Når konfigurasjonen er klar, kan vi begynne å bruke wifi-modulen. Det gjør vi ved å koble den til utviklingskortet på følgende måte. Legg merke til at kablene for TX (send data) og RX (ta imot data) er omvendt sammenlignet med forrige kobling. 

Illustrasjon laget med komponenter fra Fritzing (fritzing.org). CC BY-SA 3.0

Nå kan datamaskinen vår kommunisere med utviklingskortet i 115 200 Bd. Utviklingskortet kan i sin tur kommunisere med wifi-modulen i 9600 Bd. Vi kommer til å bruke en tilkobling ved navn Serial for kommunikasjon mellom datamaskinen og utviklingskortet, og vi bruker en tilkobling ved navn Serial1 for kommunikasjon mellom utviklingskortet og wifi-modulen.

For å koble til et trådløst nettverk må vi først og fremst installere og inkludere de nødvendige bibliotekene (SoftwareSerial og WiFiEsp). Vi må også angi at det er GPIO-pinne 6 og 7 som skal brukes til kommunikasjon med wifi-modulen.

Del 1/4 av WifiTest.ino

I følgende kodesnutt angir vi navnet på det trådløse nettverket vårt (SSID) og passordet til det. Obs! Det er bare mulig å koble til 2,4 GHz-nettverk (ikke 5 GHz-nettverk).

Del 2/4 av WifiTest.ino

I setup-funksjonen starter vi de serielle kommunikasjonene, initierer wifi-modulen og prøver å koble oss til det trådløse nettverket. Hvis tilkoblingen lykkes, kalles funksjonen printWifiStatus.

Del 3/4 av WifiTest.ino

PrintWifiStatus skriver ut navnet på det trådløse nettverket som Arduinoen er koblet til, og hvilken IP-adresse Arduinoen har blitt tildelt. Dette vises i Seriell overvåker.

Del 4/4 av WifiTest.ino

Tips! Har du problemer med å initiere wifi-modulen? Bryt i så fall strømmen helt først (gjelder både strømforsyning og USB).

Vi kan prøve å kommunisere med Arduinoen via nettverket ved hjelp av programmet Ping, som er innebygd i både Windows og Mac OS.

Vi åpner Ledetekst i Windows eller Terminal i Mac OS og skriver ping etterfulgt av IP-adressen til Arduinoen. Hvis vi får svar fra Arduinoen, vet vi at alt fungerer som det skal.

Kjøre en webserver på Arduino

En nettside består i bunn og grunn av HTML-kode (Hyper Text Markup Language). Vi går ikke gjennom HTML i denne boken, men vi viser hvordan en Arduino kan fungere som webserver for en HTML-side. Du kan se hvordan HTML-koden bak en hvilken som helst nettside ser ut, ved å høyreklikke på nettsiden i Google Chrome og velge Vis sidekilde.

Slik viser Google Chrome nettsiden kjell.com.
Slik ser HTML-koden bak nettsiden kjell.com ut.

Vi vil lage en enkel nettside som Arduinoen skal sende når noen går inn på webserveren dens. Vi skriver følgende HTML-kode.

<!DOCTYPE HTML>
<html>
  <head>
    <title>My Arduino</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    <p>We’re online!</p>
  </body>
</html>

website.html

I skissen kan vi gå ut fra koden vi skrev tidligere i dette kapittelet. Før setup-funksjonen må vi lage en ny webserver på port 80 (standardporten for ukryptert webtrafikk). Vi starter deretter webserveren i setup-funksjonen.

Del 1/2 av WifiWebserver.ino

Loop-funksjonen var tidligere tom, men nå fyller vi den med kode. Arduinoen skal først og fremst lytte etter nye tilkoblinger (klienter som vil laste ned nettsiden). Når en klient oppdages, skal Arduinoen sende all tilkoblingsinformasjon til Seriell overvåker. Deretter skal den sende nettsiden til klienten. Legg merke til at vi har gjort endringer i nettsidekoden (vi avslutter hver HTML-kodelinje med tegnet for linjeskift). Når nettsiden er sendt, venter Arduinoen i noen millisekunder og lukker deretter tilkoblingen.

Del 2/2 av WifiWebserver.ino

Når vi har lastet opp koden til Arduinoen, vises følgende nettside når vi går inn på IP-adressen med nettleseren vår. Legg merke til at vi må befinne oss på samme lokale nettverk som Arduinoen er koblet til.

Resultatet som vises i nettleseren. 
Resultatet som vises i Seriell overvåker.
Sist endret: 2017-09-08