Anslut Arduino till wifi

Anslut Arduino till wifi

För att kunna bygga en internetuppkopplad produkt måste vi först och främst ansluta den till ett nätverk. I det här kapitlet ska vi se närmare på hur det går till.

Obs! Wifi-modulen i detta kapitel har en firmware som koden är anpassad för. Om tillverkaren av wifi-modulen ändrar i firmwaren kan koden behöva uppdateras.

Nätverkshårdvara för Arduino

Det finns två sätt att ansluta ett utvecklingskort till nätverk: trådbundet eller trådlöst. Trådbunden anslutning åstadkoms enklast genom att ansluta en nätverksshield med nätverksport till utvecklingskortet. Eftersom en trådbunden anslutning gör placeringen mindre flexibel kommer vi att använda en trådlös lösning i stället. 

Nätverksshield

För att ansluta vårt utvecklingskort till ett trådlöst nätverk använder vi en wifi-modul som bygger på chippet ESP8266. Modulen har stöd för att överföra data i upp till 150 Mb/s med Wireless N (på 2,4 GHz-bandet). Mer information om vad detta innebär finns i Hur funkar det?-seriens nätverksdel. 

Wifi-modulen passar inte direkt på kopplingsplattan. Vi ansluter den därför via en liten kopplingsadapter. Både wifi-modulen och kopplingsadaptern följer med i bokens tillhörande komponentkit. 

Wifi-modul

Konfigurera wifi-modul för Arduino

Arduinon vill kommunicera med wifi-modulen via seriellporten på GPIO-stift 0 och 1 (RX och TX). Det är samma port som vi har använt tidigare för att skicka data till Serial monitor på datorn. Det går inte att använda samma seriellport för båda ändamålen, vilket ställer till lite problem då vi vill kunna använda seriellporten för felsökning. 

Vi kan lösa portkonflikten med hjälp av ett bibliotek som heter SoftwareSerial. Det låter oss kommunicera med wifi-modulen på andra GPIO-stift än 0 och 1. Wifi-modulen är dock förinställd för att kommunicera med datahastigheten 115200 Bd och SoftwareSerial-lösningen fungerar enbart med 9600 Bd. Vi måste därför ändra en inställning i wifi-modulen, vilket vi gör på följande sätt. 

Vi börjar med att ladda upp Blink-sketchen till vår Arduino (för att kunna kommunicera direkt till wifi-modulen). Vi hade kunnat använda vilken sketch som helst, under förutsättning att sketchen inte använder Serial.

Blink.ino

Efter att vi har laddat upp Blink-sketchen ansluter vi wifi-modulen till vårt utvecklingskort enligt kopplingen nedan. Tänk på att nätaggregatet måste vara strömförsörjt (antingen med ett 9 V-batteri eller med en nätadapter). Nätaggregatet behövs eftersom wifi-modulen drivs på 3,3 V och utvecklingskortet kan inte ge tillräckligt med ström på den spänningen. De två motstånden på 10 resp. 22 kohm bildar en spänningsdelare som sänker spänningen från 5 V till 3,3 V. Detta för att skydda wifi-modulens ingång.

Varning! Driv inte wifi-modulen på 5 V.

Illustration gjord med komponenter från Fritzing (fritzing.org). CC BY-SA 3.0

Sedan öppnar vi Serial monitor och ställer in den med följande inställningar.

  • Datahastighet: 115200 Bd (hastigheten som wifi-modulen har ur förpackningen)
  • Radbrytningar: NL & CR (acceptera alla radbrytningar)

I indatarutan längst upp skriver vi AT för att kontrollera om vi kan kommunicera med wifi-modulen.

Om vi kan kommunicera med wifi-modulen svarar den "OK".

När vi har säkerställt att vi kan kommunicera med wifi-modulen skickar vi följande kommando. 

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

Obs! Det är viktigt att det skrivs korrekt. 

Wifi-modulen bekräftar att den har tagit emot det. 

Vi avslutar med att starta om wifi-modulen med följande kommando.

AT+RST

När denna konfiguration är klar vill vi säkerställa att allt gick rätt. Det gör vi genom att ändra datahastigheten i Serial monitor till 9600 Bd och skriva AT-kommandot igen (för att se om vi får något svar). Om vi får ett svar fungerar allt som det ska. 

Anslut Arduino till wifi

När konfigurationen är klar kan vi börja använda wifi-modulen. Det gör vi genom att koppla in den på följande sätt till utvecklingskortet. Lägg märke till att kablarna för TX (sänd data) och RX (ta emot data) är omvända jämfört med föregående koppling. De två motstånden på 10 resp. 22 kohm bildar en spänningsdelare som sänker spänningen från 5 V till 3,3 V. Detta för att skydda wifi-modulens ingång.

Illustration gjord med komponenter från Fritzing (fritzing.org). CC BY-SA 3.0

Nu kan vår dator kommunicera med utvecklingskortet i 115200 Bd. Utvecklingskortet kan i sin tur kommunicera med wifi-modulen i 9600 Bd. Vi kommer att använda en anslutning vid namn Serial för kommunikation mellan datorn och utvecklingskortet samt en anslutning vid namn Serial1 för kommunikation mellan utvecklingskortet och wifi-modulen. 

För att ansluta till ett trådlöst nätverk måste vi först och främst installera och inkludera de nödvändiga biblioteken (SoftwareSerial och WiFiEsp). Vi måste också ange att det är GPIO-stift 6 och 7 som ska användas för kommunikation med wifi-modulen. 

Del 1/4 av WifiTest.ino

I följande kodsnutt anger vi namnet på vårt trådlösa nätverk (SSID) och lösenordet till det. Obs! Det går endast att ansluta till 2,4 GHz-nätverk (inte 5 GHz-nätverk).

Del 2/4 av WifiTest.ino

I setup-funktionen startar vi de seriella kommunikationerna, initialiserar wifi-modulen och försöker ansluta till det trådlösa nätverket. Om anslutningen lyckas anropas funktionen printWifiStatus.

Del 3/4 av WifiTest.ino

PrintWifiStatus skriver ut namnet på det trådlösa nätverket som Arduinon är ansluten till och vilken IP-adress som Arduinon har blivit tilldelad. Detta visas i Serial monitor.

Del 4/4 av WifiTest.ino

Tips! Har du problem med att initiera wifi-modulen? Bryt strömmen helt först i så fall (gäller både nätaggregat och USB).

Vi kan prova att kommunicera med Arduinon via nätverket med hjälp av programmet Ping, vilket finns inbyggt i både Windows och Mac OS. 

Vi öppnar Kommandotolken i Windows eller Terminalen i Mac OS och skriver ping följt av IP-adressen till Arduinon. Om vi får svar från Arduinon vet vi att allt fungerar som det ska.

Kör en webbserver på Arduino

En webbsida består i grund och botten av HTML-kod (Hyper Text Markup Langugage). Vi går inte igenom HTML i denna bok, men vi visar däremot hur en Arduino kan agera som webbserver för en HTML-sida. Du kan se hur HTML-koden ser ut bakom vilken webbsida som helst genom att högerklicka på webbsidan i Google Chrome och välja Visa sidkälla.

Så här visar Google Chrome webbsidan kjell.com.
Så här ser HTML-koden ut bakom webbsidan kjell.com.

Vi vill skapa en enkel webbsida som Arduinon ska skicka när någon går in på dess webbserver. Vi skriver följande HTML-kod.

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

website.html

I sketchen kan vi utgå från koden vi skrev tidigare i detta kapitel. Före setup-funktionen måste vi skapa en ny webbserver på port 80 (standardporten för okrypterad webbtrafik). Vi startar sedan webbservern i setup-funktionen.

Del 1/2 av WifiWebserver.ino

Loop-funktionen var tidigare tom, men nu fyller vi den med kod. Först och främst ska Arduinon lyssna efter nya anslutningar (klienter som vill ladda ned webbsidan). När en klient upptäcks ska Arduinon skicka all anslutningsinformation till Serial monitor. Därefter ska den skicka webbsidan till klienten. Lägg märke till att vi har förändrat webbsidekoden något (vi avslutar varje HTML-kodrad med tecknen för radbrytning). När webbsidan väl har skickats väntar Arduinon några millisekunder och stänger sedan anslutningen.

Del 2/2 av WifiWebserver.ino

Efter att vi har laddat upp koden till Arduinon visas följande webbsida när vi går in på dess IP-adress med vår webbläsare. Observera att vi måste befinna oss på samma lokala nätverk som Arduinon är ansluten till.

Resultatet som visas i webbläsaren.
Resultatet som visas i Serial monitor.
Senast ändrad: 2018-04-06