Sende data til Thingspeak

Sende data til Thingspeak

I dette kapittelet skal vi sende data til en nettjeneste, slik at informasjonen blir lett tilgjengelig over internett.

Obs! Koden i dette kapittelet er tilpasset nettjenesten Thingspeak og måten den fungerer på i skrivende stund. Funksjonaliteten kan endres over tid. 

Thingspeak

I Koble Arduino til wifi viste vi hvordan vi kan bruke en server til å gjøre informasjon tilgjengelig for nettlesere på det lokale nettverket. Vi kan også få tilgang til den informasjonen over internett hvis vi først åpner riktig port på ruteren og kobler ruteren til en dynamisk DNS-tjeneste (se nettverksdelen av Hvordan virker det?-bokserien hvis du vil vite hvordan dette gjøres).
Nå skal vi gjøre mer enn å publisere informasjon på en nettside. Vi skal laste opp verdiene til en nettjeneste som både lagrer og viser verdiene for oss. Nettjenesten Thingspeak er perfekt for dette formålet. Som navnet tilsier får Thingspeak ting til å snakke med internett. Tjenesten bygger på åpen kildekode. Nettsiden thingspeak.com brukes flittig av maker-fellesskapet og drives av amerikanske Mathworks (kjent for programmet Matlab).

Vi begynner med å opprette en konto på nettsiden til Thingspeak (gratis).

På Thingspeak lagres dataene i såkalte kanaler. En kanal kan i sin tur inneholde flere felt. Det er i feltene vi lagrer dataene. Hvis vi plasserer temperatursensorer i alle rom i huset, kan vi lage en kanal som heter Hjemme hos oss og ha følgende felt i den:

  • stue (field1)
  • soverom (field2)
  • kjøkken (field3)
  • baderom (field4)
  • vaskerom (field5)
  • gang (field6).

Det er mulig å ha opptil åtte felt per kanal.

Vi som er eiere av kanalen, kan selv velge hva den skal hete, hvilken beskrivelse den skal ha, hvordan den skal være koblet til geografiske koordinater, og om den skal være offentlig eller privat. Hvis den er offentlig, kan andre personer se dataene.

Som kanaleiere kan vi også eksportere alle data som vi vil analysere, til for eksempel Microsoft Excel eller Mathworks Matlab.

Sende data til Thingspeak

I følgende eksempel vil vi sende tilfeldige data til en Thingspeak-kanal for å teste funksjonaliteten. Vi lager derfor en ny kanal som vi kaller My data. I kanalen lager vi et felt som vi kaller Data. Det spiller ingen rolle hvilket navn vi velger, for all kode vil uansett adressere feltet som field1. 

Thingspeak har et såkalt API (Application Programming Interface) som gjør at andre applikasjoner kan skrive til (og lese fra) kanalene. Vi må hente en API-nøkkel for kanalen vår for at programmet vårt skal kunne gjøre det. Den ligger under API-fanen på nettsiden.

På maskinvaren beholder vi samme koblinger som i Koble Arduino til wifi. Vi må imidlertid oppdatere skissen litt.

I den øverste delen av skissen skriver vi omtrent det samme som sist, men vi legger til Thingspeak-relatert informasjon. Vi lager en ny klient (den som kobler til Thingspeak). Vi lagrer informasjon om at vi vil koble til thingspeak.com med API-nøkkelen vår. Vi angir også hvor ofte vi vil at klienten skal sende data til Thingspeak. Vi setter verdien til 30 000 millisekunder (30 sekunder), noe som kanskje er unødvendig ofte. Den høyest tillatte oppdateringsfrekvensen er hvert 15. sekund.

Vi deklarerer og initierer også en long-variabel ved navn myData. Det er den variabelens verdi vi skal sende til Thingspeak.

Del 1/4 av Thingspeak.ino

I loop-funksjonen lager vi en while-løkke som sender informasjon om tilkoblingen til Seriell overvåker. Det er veldig nyttig ved feilsøking.

Vi lager en if-setning som undersøker om det har gått lang nok tid siden vi sist sendte data til Thingspeak. Hvis det har gått mer enn 30 sekunder (tiden vi valgte tidligere), oppdaterer Arduinoen myData-variabelen med en pseudotilfeldig verdi og sender den til Thingspeak.

Del 2/4 av Thingspeak.ino

Vi lager funksjonen sendThingspeak for å sende data til Thingspeak.

Del 3/4 av Thingspeak.ino

Del 4/4 av Thingspeak.ino

Når vi har kompilert og lastet opp koden til Arduinoen, begynner den å sende data til Thingspeak. Merk at dataene ikke betyr noe spesielt. I Bygge et internettilkoblet klokketermometer skal vi begynne å sende meningsfulle data

Sist endret: 2017-09-08