# 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 ![](https://hackmd.io/_uploads/rJ9JXg023.png) 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 ![](https://hackmd.io/_uploads/ByzzXUZpn.png) Updated every 4 seconds ## Slutgiltiga Design ![](https://hackmd.io/_uploads/HkJimL-6h.png)