Skicka data till Thingspeak

Skicka data till Thingspeak

I detta kapitel ska vi skicka data till en webbtjänst, så att informationen blir lättillgänglig över internet. 

Obs! Koden i detta kapitel är anpassad för webbtjänsten Thingspeak och hur den fungerar i skrivande stund. Funktionaliteten kan förändras med tiden. 

Thingspeak

I Anslut Arduino till wifi visade vi hur vi kan använda en server för att göra information tillgänglig för webbläsare på det lokala nätverket. Vi kan också komma åt den informationen över internet om vi först öppnar rätt port i routern och kopplar routern till en dynamisk DNS-tjänst (hur detta görs behandlas i Hur funkar det?-seriens nätverksdel). 

Nu vill vi göra mer än att publicera information på en webbsida. Vi vill ladda upp värden till en webbtjänst som både lagrar och visar värdena för oss. För detta ändamål är webbtjänsten Thingspeak perfekt. Precis som namnet avslöjar får Thingspeak saker att prata med internet. Tjänsten bygger på öppen källkod. Webbsidan thingspeak.com används frekvent av maker-rörelsen och drivs av amerikanska Mathworks (kända för programmet Matlab).

Vi börjar med att skapa ett konto på Thingspeaks webbsida (gratis).

På Thingspeak sparas datan i så kallade kanaler. En kanal kan i sin tur innehålla flera fält. Det är till fälten som vi sparar datan. Om vi sätter temperatursensorer i alla rum i huset kan vi skapa en kanal som heter Hemma hos oss och ha följande fält i den:

  • vardagsrum (field1)
  • sovrum (field2)
  • kök (field3)
  • badrum (field4)
  • tvättstuga (field5)
  • hall (field6).

Det går att ha upp till åtta fält per kanal. 

Vi som är ägare av kanalen kan själva välja vad kanalen ska heta, vilken beskrivning den ska ha, huruvida den ska vara kopplad till geografiska koordinater samt om den ska vara publik eller ej. Om den är publik kan andra personer se datan. 

Vi som kanalägare kan också exportera all data som vi vill analysera närmare i t.ex. Microsoft Excel eller Mathworks Matlab.

Skicka data till Thingspeak

I följande exempel vill vi skicka slumpmässig data till en Thingspeak-kanal för att testa funktionaliteten. Vi skapar därför en ny kanal som vi kallar My Data. I kanalen skapar vi ett fält som vi kallar Data. Vilket namn vi väljer spelar ingen större roll, för all kod kommer ändå att adressera fältet som field1.

Thingspeak har ett så kallat API (Application Programming Interface) som gör att andra applikationer kan skriva till (och läsa från) kanalerna. För att vårt program ska kunna göra det måste vi hämta en API-nyckel för vår kanal. Den ligger under API-fliken på webbsidan.

Hårdvarumässigt behåller vi samma kopplingar som i Anslut Arduino till wifi. Vi måste dock uppdatera sketchen lite. 

I den översta delen av sketchen skriver vi ungefär samma sak som tidigare, men vi lägger till Thingspeak-relaterad information. Vi skapar en ny klient (den som ansluter till Thingspeak). Vi sparar information om att vi vill ansluta till thingspeak.com med vår API-nyckel. Vi anger också hur ofta vi vill att vår klient ska skicka data till Thingspeak. Vi sätter värdet till 30000 millisekunder (30 sekunder), vilket kanske är onödigt ofta. Den högsta tillåtna uppdateringsfrekvensen är var 15:e sekund. 

Vi deklarerar och initierar även en long-variabel vid namn myData. Det är den variabelns värde som vi ska skicka till Thingspeak.

Del 1/4 av Thingspeak.ino

I loop-funktionen skapar vi en while-loop som skickar information om anslutningen till Serial monitor. Det är mycket användbart vid felsökning. 

Vi skapar även en if-sats som undersöker om det har gått tillräckligt lång tid sedan vi senast skickade data till Thingspeak. Om det har gått mer än 30 sekunder (tiden vi valde tidigare) uppdaterar Arduinon myData-variabeln med ett pseudoslumpat värde och skickar det till Thingspeak. 

Del 2/4 av Thingspeak.ino

För att skicka data till Thingspeak skapar vi funktionen sendThingspeak.

Del 3/4 av Thingspeak.ino

Del 4/4 av Thingspeak.ino

När vi har kompilerat och laddat upp koden till vår Arduino börjar den skicka data till Thingspeak. Observera att datan inte betyder något speciellt. I Bygg en internetuppkopplad ­klocktermometer ska vi börja skicka väsentlig data.

Senast ändrad: 2017-02-28