# Uppkopplad termometer
*Författare: Sofie Vedö (sv222jh)*
I denna guide går jag igenom hur man själv kan göra en uppkopplad temperaturmätare. Den läser av temperaturen på platsen du sätter den och skickar upp datan till pycoms webbplattform för att hantera pycoms enheter.
## Beskrivning av projektet
Jag har valt detta projekt då jag ville komma igång med att bygga en IoT-enhet utan för stora svårigheter, då jag inte har någon tidigare erfarenhet. Samtidigt vill man ju göra något man kan ha nytta av. Genom att ha en "uppkopplad termometer" kan jag lätt ta reda på hur varmt det är i sovrummet, barnvagnen eller matkällaren utan att jag själv behöver gå och kolla.
Jag tror också att det är en bra början för en nybörjare som mig för att lära grunderna vilket är huvudmålet. Samtidigt som den är utbyggningsbar för att mäta ännu mer saker - kanske slutar det med en hel väderstation?
### Du behöver
| Enhet | Varför |
| -- | -------- |
| 1 LoPy4 | Själva "datorn". Det är via denna allt kopplas |
| 1 Expansion board | För att kunna koppla upp LoPy via USB. Underlätta kopplingar |
| 1 MCP9700 TO-ps| Temperatursensorn |
| 1 Breadboard | Underlättar kopplingar |
| 3 Kopplingstrådar| Underlättar kopplingar |
| 1 Li-Po Batteri | För att kunna placera vart du vill, utan tillgång till annan strömkälla |
Allt detta ovan ingick i electrokits [basic bundle](https://www.electrokit.com/produkt/lnu-1dt305-tillampad-iot-lopy4-basic-bundle/), men går även att köpa separat.
Batteriet är köpt på [Kjell och Company](https://www.kjell.com/se/produkter/el-verktyg/arduino/tillbehor/luxorparts-li-po-batteri-37-v-med-kontakt-1200-mah-p87924?gclid=Cj0KCQjwiYL3BRDVARIsAF9E4Gf7fZP8OhXqwvaU9Ue9X4_12vHSLPcqVMMpSZHewj0nBt-voD2F5EsaAhmXEALw_wcB&gclsrc=aw.ds)
Uppskattad kostnad: ca 1 000 SEK
Uppskattad tid: ca 4 timmar
## Förberedelser
### Uppdatera din Expansion Board
Det rekommenderas att man uppdaterar sin expansion board innan man kopplar in LoPy-enheten. Det finns en bra guide på Pycoms hemsida att följa här: [Updating firmware](https://docs.pycom.io/pytrackpysense/installation/firmware/)
### Koppla lopy till Expansion Board
När du ska koppla på din lopyenhet är det viktigt att du sätter den på rätt håll på din expansion board. Resetknappen ska vara åt samma håll som USB-porten - då är pycom-loggan läsbar från samma håll och texten "makr" uppochned.
Var noga så att alla små pins åker ned i hålen på expansion boarden. Du ska inte behöva ta i och det ska klicka till när den sitter rätt.
### Förbered din programmeringsmiljö
För att din lopy-enhet ska kunna läsa ut, hantera och skicka data från sensorer behöver du berätta för den hur det ska gå till. Detta görs via kodning i micropython.
För att hålla ordning på koden och kommunicera med din lopy rekommenderar jag att du laddar ner ett program för detta, ett sk. IDE. I detta fall rekommenderar jag Atom då de har ett bra och användarvänligt plugin för pycom. Det finns dessutom bra plugins för GitHub i fall du senare vill versionshantera din kod.
[Ladda ner atom.io här](https://atom.io/)
**Installera pymakr plugin:**
* Öppna Atom
* Gå in på File - Settings
* Klicka på "Packages"
* Sök efter pymakr, installera
*Du kan slå på/av pymakr plugin via Packages - Pymakr - Toogle Pycom Console*
### Förbered din lopy
* Gå in och skapa ett konto på [Pybytes](https://pybytes.pycom.io/)
* Tryck på Add Device, lägg till via USB
* Välj att du vill koppla på WiFi
* Välj ett namn
* Välj ett WiFi (eller lägg till) *OBS! Kan inte vara ett 5GHz-nätverk*
* Spara.
* Du får nu 2 alternativ
* Aktivera via Firmware uppdaterare. *(Detta kan du göra redan nu om du vill)*
* Aktivera via Pymakrs plugin *(Följ stegen nedan)*
### Koppla upp din lopy
* Koppla in din enhet med USB till datorn
* I pymakrs plugin finns en knapp "Connect Device". Klicka på den
* Välj att koppla upp dig till den port du har din enhet i (i mitt fall COM3)
* Här har du möjlighet att styra vad du vill göra:

* Om du inte redan gjort det vill vi uppdatera lopy med Wifiuppgifter. Kopiera därför aktiveringssträngen från pybytes och klistra in i textredigeraren.
* Du bör få ett liknande bekräftelsemeddelande:

Nu är du redo att gå vidare till nästa steg
## Koppla ihop
### Sensorn

Bild, hämtad [här](https://www.electrokit.com/uploads/productfile/41011/21942e-2.pdf)
**V DD (1)** - Ger ström till sensorn, Kopplas till 3V3 på Expansion Board.
**V OUT (2)** - Värdet som läses ut, kopplas till pin på expension board(ex. P19)
**GND (3)** - ska kopplas till GND på expansion board
Eftersom pins på sensorn är små och sitter i "fel" ordning används en breadboard.
[Klicka här](https://docs.pycom.io/datasheets/development/lopy4/) för att få hjälp att välja rätt pin
### Koppling

## Platform
Jag använder pybytes plattform för att visa data. Det är ett enkelt sätt att få tillgång till datan. Denna kan sedan kopplas vidare med integrationer till ex. Microsoft Azure eller Google Cloud.
### Ta emot data
* Gå in på Devices
* Markera din enhet för att visa. Här ser du dashboarden, här ska vi anpassa
* Gå in på signals
* Tryck på "define new signal"
* Välj vilken signal du väljer att skicka (ex. 1)
* Döp den till ett relevant namn (ex. temperatur)
* Spara
### Visualisera data
* Gå in på signalen
* Tryck på "Create new display"
* Välj mellan
* Tabell
* Stapel
* Linje
* Välj namn
* Hur många mätpunkter du vill ha med (pull size)
* Tidsskala
* Övrigt utseende
* Tryck på Create för att spara
* För att lägga till på dashboard:
* Tryck på "edit"
* Kryssa i "Display on dashboard"
* Spara
På dashboarden kan du flytta runt dina diagram genom att trycka på "organize"
## Koden
``` python=1
import machine
import time
import pycom
pycom.heartbeat(False)
adc = machine.ADC()
apin = adc.channel(pin='P19')
while True:
millivolts = apin.voltage()
degC = millivolts * 3.7 /1024.0
degC = degC - 0.5
degC = degC / 0.01
degRounded = round(degC, 2)
print(degRounded)
pybytes.send_signal(1, degRounded)
if degC > 30.0:
pycom.rgbled(0x7f0000) #röd
elif degC > 25.0:
pycom.rgbled(0xff9933) #orange
elif degC > 20.0:
pycom.rgbled(0x7f7f00) #gul
else:
pycom.rgbled(0x0000ff) #blå
time.sleep(15*60)
```
Använda källor:
[Uträkning volt => temp](https://starter-kit.nettigo.eu/2010/how-to-measure-temperature-with-arduino-and-mcp9700/)
[Läsa av data från Pin](https://www.losant.com/blog/how-to-read-the-tmp36-temperature-sensor-with-pycom-and-sigfox)
[Ändra färg på lampa](https://docs.pycom.io/firmwareapi/pycom/pycom/)
## Sändning av data
Data skickas var 15:e minut. Temperaturen ändras inte så snabbt, och därför räcker det med ett kortare intervall.
Eftersom jag bor för långt bort från ett LoRa-nätverk används endast Wifi för att sända information. Dock öppnar sändning över LoRa upp för ytterligare möjligheter, ex. att ha en mätare utanför eller mobilt (ex. om du vill kolla hur varmt det är i bilen)
Data skickas med hjälp av pycoms plugin direkt till pycom.
## Presentation av data

*Bildförklaring. Exempel på min dashboard, här med testdata*
En av nackdelarna med att använda pybytes är begränsningarna i hur man presenterar data. Det går att sätta upp grundläggande diagram, men det lämnar en del att önska.
Jag har valt att visa data med linjediagram för senaste dygnet och veckan. Sedan har jag kompletterat med en tabell för senaste dygnet.
Fördelen med presentera data på pycom är att det går snabbt och lätt att komma igång. Kanske ingenting man presenterar för en kund, men för att få ut data för eget bruk fungerar det väldigt bra så länge man inte vill kunna göra något specifikt.
Jag har också lagt in en mer lokal presentation av datan. Ledlampan på enheten ändrar färg beroende på hur varmt det är. På detta sätt kan man se ungefär hur varmt det är utan att behöva logga in. Ska denna funktion vara påslagen bör man nog ha den kopplad till en strömkälla, då räcker inte batteriet så länge.
### Spara data
Datan sparas i pycoms databas i en månad. För att öka denna tiden behöver man själv spara ned till en databas. Detta kan ex. göras med hjälp av integrationer.
## Slutord
Jag själv har tyckt att detta varit ett roligt projekt och jag har definitivt fått mersmak. Det är tråkigt att inte kunnat lägga så mycket tid på projektet, och helt ärligt har det varit en liten uppförsbacke också då jag inte alls har kunskap om datateknik & elektronik sedan tidigare.
I slutänden är jag nöjd med projektet och det är kul att kunna "bygga" något eget, och jag märker att det är lätt att spinna vidare och komma på nya idéer!
### Resultatet

*Bildbeskrivning: Det (nästan) färdiga resultatet. Tanken är att gömma allt så bara lampan syns*
### Kan det göras bättre?
Det finns en del som hade kunnat göras annorlunda. Som nämnt ovan hade man genom att skicka data via LoRa kunnat göra en mer mobil enhet.
Näst på tur för mig blir att koppla ihop med fuktsensor för att ha bättre koll på mina växter. Få varningar om de behöver vatttnas och om de står för varmt eller kallt.
Eftersom jag tycker det är roligt med statistik och programmering tänker jag också att man kan vidareutveckla det visuella och istället skicka datan till en databas för att sedan rita upp egna diagram.
En sak är säker - någon vidareutveckling kommer att ske!