# IoT for Temperature-reading
> skapad av Ton de Boer
LNU konto: td222jk
Ett kort projekt för att visa hur en Raspberry Pico W kan användas för att ta in information från en sensor och hur man sedan kan publicera och läsa ut denna data.
Tiduppskattning: 2-3 timmar
## Projektmål
Målet med detta projekt är att skapa en fungerande temperatur läsare för min lägenhet, för att kunna läsa ut och presentera vad temperaturen i rummet är och hur den förändras över dagen.
En av anledningarna till att jag valde just detta projekt har varit för att lära mig mer om kommunikationen mellan olika aparater. I detta exempel använder jag en Raspberry Pico W som läser in data via en fysisk sensor och skickar ut den samlade informationen trådlöst.
Jag tror detta kommer ge mig en fördjupad insikt i hur IoT-devices är byggda, och ge mig kunskapen som krävs för att bygga ihop mina egna mer komplexa system hemma.
## Material
Följande lista ger en överblick över allt material som användes för projektet, vart dom köptes, samt butikens pris.
| Artikel | Pris | Butik |
| -------- | -------- | -------- |
| Raspberry Pi Pico (mikroprocessor) | 98 kr | ElektroKit|
| USB-A-cabel (anslutningskabel/strömförsörjning) | 39 kr | ElektroKit|
| DHT11 sensor (Luft/temp mätare) | 49 kr | ElektroKit|
| Breadboard (kopplingsbräda för montering) | 69 kr | ElektroKit|
| Jump wires (kablar för kontakt)| 49 kr | ElektroKit|
## Dator Setup
Detta projekt skapades i en Windows-miljö, och instruktionerna är formade därefter, men detta projekt kan också enkelt återskapas i en Linux eller Mac-miljö.
Jag har valt Visual Studio Code som min IDE för att skriva, testa och köra koden.
VS Code finns tillgängligt för Windows, Mac samt Linux och kan fritt laddas ner från deras officiella webbplats:
code.visualstudio.com
Vi använder oss också utav Visual Studio Code-tillägget Pico-W-Go, som ger automatisk kodkomplettering och möjliggör kommunikation med din Raspberry Pi Pico.
Detta tillägg kräver även de ytterligare VS Code-tilläggen Python, Intellicode och Pylance.
Dessa kan enkelt installears genom att köra koden härunder i terminalen.
:::info
**Run in terminal:**
==code --install-extension ms-python.python
code --install-extension ms-python.vscode-pylance
code --install-extension VisualStudioExptTeam.vscodeintellicode==
==code --install-extension paulober.pico-w-go==
:::
## Fysisk Installation
Instruktioner för att koppla upp en DHT11 till en Raspberry Pico W med hjälp av en såkallad Breadboard och jump wires.
1. Anslut VCC (spänning) på DHT11-sensorn till 3V3 anslutningen på din Pico (Pin 36).
2. Anslut GND (jord) på DHT11 till GND (jord) på Pico (Pin 38).
3. Anslut DATA-pinnen på DHT11 till en GPIO-pin på Pico
Steg 1 och 2 förenklas med hjälp av en Breadboard för lättare anslutning. Se exempelbild nedan för hur man kan sätta upp Raspberry Picon och DHT11-sensorn på en breadboard

Dom olika färgade linjerna på bilden representerar hopptrådar som används för att ansluta DHT11-sensorn och Raspberry Picon till en breadboard samt till varandra.
Röda linjen innebär att kontakten är för spänning.
Bruna linjen står för jordning.
Gröna linjen representerar data-överföring.
## Raspberry Pico Initiering
Installeringen av Raspberry Pico W är snabb att utföra och kan sammanfattas i 4 enkla steg.
### 1. Anslutning av Pico W
Använd en mikro-USB-kabel för att ansluta Pico W till din dator.
Håll ned BOOTSEL-knappen när du ansluter. Detta aktiverar läget för USB-masslagringsenhet, enheten bör dyka upp under namnet RPI-RP2.
### 2. Överföring av Firmware-fil
Dra och släpp den tidigare nedladdade .uf2-firmware-filen till lagringsenheten.
När överföringen är klar kommer enheten att koppla från och automatiskt återanslutas.
### 3. Configure Project in VS Code
Öppna en mapp i VS Code där du planerar att arbeta med projektet.
Tryck på Ctrl+Shift+P (eller motsvarande på din plattform) och välj "Pico-W-Go > Configure Project".
Denna åtgärd importerar autokompletteringsstubbar och projektinställningar till mappen.
Skapa en fil med namnet main.py i samma mapp.
### 4. Överföring av Data till Enheten
Använd samma Ctrl+Shift+P-kommando för att komma åt kommandopanelen.
Välj "Pico-W-Go > Connect" för att etablera en anslutning till enheten.
Utför "Pico-W-Go > Upload project" för att överföra din kod till Pico W.
## Platform
Jag har valt att använda mig av Adafruit som platform att publicera min data på.
Anledningen för detta är dels att platformen introducerades i kursen, men framförallt för att den är användarvänlig, med mycket dokumentation och online stöd att hitta för konfigureringen.
## Kod
Koden är relativt simpelt byggd, så att även nybörjare kan följa koden steg för steg.
Importer som krävs för koden
```javascript=1
import machine
import time
import network
import dht
from umqtt.simple import MQTTClient
```
Konfiguration av sensor:
```javascript=6
sensor1 = dht.DHT11(machine.Pin(2))
```
Nätverkanslutning (WiFi) och funktion för uppkoppling. Printar även ut nätverks konfigurationen.
```javascript=7
WIFI_SSID = 'your_wifi_ssid'
WIFI_PASSWORD = 'your_wifi_password'
def connect_to_wifi(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('Connecting to network...')
wlan.connect(ssid, password)
while not wlan.isconnected():
pass
print('Network config:', wlan.ifconfig())
```
Adafruit och MQTT inställningar för uppladning och presentation av data.
```javascript=19
AIO_SERVER = "io.adafruit.com"
AIO_PORT = 1883
AIO_USER = "your_username"
AIO_KEY = "your_aio_key"
AIO_CLIENT_ID = "RaspberryPiPico"
AIO_TEMPERATURE_FEED = "your_username/feeds/temperature"
def connect_to_mqtt():
client = MQTTClient(AIO_CLIENT_ID, AIO_SERVER, user=AIO_USER, password=AIO_KEY, port=AIO_PORT)
client.connect()
return client
def send_data(client, topic, message):
client.publish(topic, message)
```
Main funktionen:
```javascript=6
def main():
connect_to_wifi(WIFI_SSID, WIFI_PASSWORD)
while True:
sensor1.measure()
temperature = sensor1.temperature()
print('Temperature:', temperature, 'C')
client = connect_to_mqtt()
send_data(client, AIO_TEMPERATURE_FEED, str(temperature))
send_data(client, AIO_HUMIDITY_FEED, str(humidity))
client.disconnect()
time.sleep(4)
```
## Överföring av Data
Data överförs var 4:e sekund över WiFi via MQTT protokollet.
## Presentation av Data

Updated every 4 seconds
## Slutgiltiga Design
