---
# System prepended metadata

title: Luftfuktighet - och temperaturmätning i hemmet med DHT11

---

# Luftfuktighet - och temperaturmätning i hemmet med DHT11

Sofie Haaga - sh223zk


---

**Beskrivning av projektet**

Jag har valt att göra en mätstation i hemmet som registrerar luftens fuktighet och temperatur med en dht11-sensor.

I projektet har en Pycom/Lopy4 används, koden är skriven i Micropyton i Atom. Datan som skickas från Pycom-utrustningen går via WiFi till Adafruit.


---

**Tidsuppskattning**

Uppskattningsvis tar det ett par timmar för att få allt att fungera (om man vet vad man sysslar med). Men det beror på hur mycket förkunskaper man har sedan tidigare.

Det tog ett par dagar för att få allt att fungera för mig.


---

**Målsättning**

Jag valde att göra en luftmätstation hemma eftersom jag inte har det sedan tidigare och har ofta funderat på hur inomhusklimatet i hemmet är. Jag tyckte det att det verkade som ett bra nybörjarprojekt samt att det skulle ge mig en  iblick i hur en iot-enhet kan skapas med hårdvara samt mjukvara för att sedan kopplas upp till en molntjänst som visar de registrerade värdena.

Mätstationen ska mäta temperatur samt luftfuktighet inomhus och kommer. 


---

**Lista på material som användes**

* Pycom Lopy4 - Utvecklingskort som kan använda LoRa, Sigfox, Bluetooth samt WiFi

* Pycom Expansion Board - Kopplas ihop med Lopy4 för att underlätta ihopkopplingen med sensorer

* 3st Jumper kablar (male-female) - kablar som används för att koppla ihop sensorn med Pycomenheten

* Micro usb-kabel - usbkabel som används för att pycomenheten ska få ström

* Antenna - en antenn som förstärker wifi-signalen

* DHT11 sensor - mäter luftfuktighet samt temperatur

Alla varor köptes från electrokit. Lopy4, Expansion Board, jumperkablar, micro usb-kabel och antenn köptes i ett paket och kostade  995 kr (ca 100 euros)tillsammans. 

DHT11 sensorn köptes tillsammans med ett sensorkit och kostar ca 40 kr om det köps fristående.


---

**Datorinställningar**

På Pycoms hemsida under ”Documentation” fanns information om hur man startar upp ett projekt. Atom användes som utvecklingsmiljö (IDE) och hämtades från Atoms hemsida. En länk till detta fanns under Documentation. 

Ett pycom-paket, Pymakr, installerades som plug-in i Atom för att kunna utveckla programvara till Pycom/Lopy4. 

Koden för DHT11-sensorn samt Adafruit hämtades från GitHub och skrevs över till Pycom/Lopy4. 


---

**Ihopsättning**

Lopy4-enheten ansluts till Pycoms Expasion Board (v3.0) genom att placera lopy4 över Expasion Boarden och pressa till den.

DHT11-sensorn ansluts sedan till Expasion Boarden via 3 male-female jumperkablar.

En kabel för ström (3.3v), en för jord (GND) och en för data (P3). 


Kablarna ansluts från DHT11-sensorn till Expansion Borden enligt bilden nedan.


![](https://i.imgur.com/YOM9InJ.jpg)

På bilden visas Expansion Board/lopy4 samt en DHT11-sensor. 

Pinnen på DHT11-sensorn för data kopplas in i Expasion Boarden i p3.

Den mellersta pinnen är för ström och kopplas in i Expansion Boarden vid 3.3v.

Pinnen längst till höger för sensorn, GND, står för ground och kopplas in i Expansion Boarden i GND.



---

**Plattform: Adafruit**

Plattformen som används är Adafruit vilket är en molntjänst för iot. 

Beslutet av plattform togs eftersom det är gratis att använda, och att det verkade användarvänligt. Jag har ingen tidigare erfarenhet av Adafruit eller någon annan plattform sedan tidigare, så till stor del valde jag Adafruit på grund av namnet Ada.

På plattformen finns olika layouts på mätare, grafer, och det går att skapa upp till 5 st dashboards med gratiskontot.

Gratiskontot på Adafruit.io ger användaren bland annat 30 data points per minute, 30 dagar med datalagring, samt 10 feeds. 

I detta projektet använder jag två feeds; temperatur och luftfuktighet.

Om projektet skulle skalas upp till en mätstation med över 10 mätvärden eller om användandet överskrider maxgränsen för gratiskontot kommer ett betalkonto behövas. 

Ett betalkonto kan köpas för 10$, vilket ger användaren oändligt många dashboards samt feeds, och en användning på 60 data points per minut samt 60 dagars datalagring.



---
**Koden i MicroPyton som skrevs i Atom**

Koden över visar importerna som behövs för att få programmet att fungera.

För att få WiFi att fungera behövs delen "WLAN" från  bibloteket "network".

"time" får "sleep"-kommandon att fungera.

"ubinascii" används för att konvertera maskinens unika ID till hexadecimalt.

"machine" används för att hämta LoPy's 6-bytes unika id (WiFi-kortets MAC-adress).

"dth" är för sensorn dht11. Notera att i importen heter den "dth". 

Delen "MQTTClient" hämtades från biblioteket "umqtt" vilket behövs för att protokollet MQTT ska fungera.

Biblioteket "dth" samt "umqtt" las manuellt till i /lib.
```
from network import WLAN
import time
import ubinascii
import machine
from dth import DTH
from umqtt import MQTTClient
import pycom
```

Nedanför visas koden som behövs för att få programmet att fungera med WiFi och Adafruit. (Hakparanteserna används inte i koden utan visar enbart vilka uppgifter som ska skrivas in.)

Uppgifter som behövs från Adafruit är bland annat användarnamnet samt namn på feeds. Det behövs även en nyckel som hämtas från Adafruit-kontot.




```
WIFI_SSID = '[nätverketsNamn]'
WIFI_PASS = '[nätverketsLösenord]'

AIO_SERVER = 'io.adafruit.com'
AIO_PORT = 1883
AIO_USER = "[namnetPåAnvändarkontotIAdafruit]"
AIO_KEY = "[nyckelnSomHämtasFrånAdafruit]"
AIO_CLIENT_ID = ubinascii.hexlify(machine.unique_id())
AIO_TEMP_FEED = '[användarnamn]/feeds/[namnPåFeedTemp]'
AIO_HUMIDITY_FEED = '[användarnamn]/feeds/[namnPåFeedHum]'

wlan = WLAN(mode=WLAN.STA)
```

Metod för att läsa av sensorvärde


```
def readSensor():
    result = th11.read()
    if result.is_valid():
        return result.temperature, result.humidity
```

Metod för att sända data till Adafruit

```
def sendData(datapoint, feed):
    print("Publishing: {0} to {1} ... ".format(datapoint, feed), end='\n')
    try:
        client.publish(topic=feed, msg=str(datapoint))
        print('Sent data to %s' % AIO_SERVER)
    except:
        print('Failed')
```

Metod för att ansluta till Wifi

```

def connectToWiFi(firstSetup):
    if firstSetup is False:
        try:
            wlan.disconnect()
            wlan = None
        except:
            print('Not connected so disconnect was not successful')


    wlan = WLAN(mode=WLAN.STA)
    wlan.connect(WIFI_SSID, auth=(WLAN.WPA2, WIFI_PASS), timeout=5000)

    while not wlan.isconnected():
        machine.idle()

    print('Connected to WiFi: %s' % WIFI_SSID)
    
```
Pycom-enhetens heartbeat/LED-blinkning stängs av.

Enheten ansluts till WiFi och en iteration körs som kontrollerar för uppkoppling till WiFi existerar, om inte så ansluts enheten på nytt.

Datan läses, och skickas till Adafruit-servern.

Enheten sätts i "sleep" i 20 minuter, sedan fortsätter iterationen.

```
pycom.heartbeat(False)
time.sleep(0.1)

connectToWiFi(True)

while True:
    if not wlan.isconnected():
        connectToWiFi(False)

    # DHT11
    th11 = DTH('P3',0)
    temperature, humidity = readSensor()

    client = MQTTClient(AIO_CLIENT_ID, AIO_SERVER, AIO_PORT, AIO_USER, AIO_KEY)
    client.connect()

    try:
        if None not in (temperature, humidity):
            time.sleep(0.1)
            sendData(temperature, AIO_TEMP_FEED)
            client.disconnect()
            client = None
            client = MQTTClient(AIO_CLIENT_ID, AIO_SERVER, AIO_PORT, AIO_USER, AIO_KEY)
            client.connect()
            time.sleep(0.1)
            sendData(humidity, AIO_HUMIDITY_FEED)
        else:
            print('Got none values from sensor')
    finally:
        client.disconnect()
        client = None
        print("Disconnected from Adafruit IO")

    time.sleep(1200)

```


---

**Dataöverföring**

Datan från mätstationen är uppkopplad via WiFi i hemnätverket. När Pycom-enheten läser av värden genom den inkopplade DHT11-sensorn skickas datan med protokollet MQTT till Adafruit-servern. 

Värdet läses av och skickas var 20:de minut.



---

**Presentation av data**

![](https://i.imgur.com/UJhgFsI.png)

![](https://i.imgur.com/0qwXLE7.png)

Bilden visar dashboarden i Adafruit, TempHum, som används för att visa luftfuktigheten samt temperaturen.

På bilden syns mätare för luftfuktighet och temperatur samt visar grafer med värden över tid.

Det finns flera olika gauges/mätare att välja mellan.

Luftfuktigheten varierar under året och är högre under sommaren samt lägre på vintern. Om luftfuktigheten inomhus överstiger 60% eller understiger 20% kommer mätaren ändra färg och "varna" för att luftfuktigheten är för hög respektive låg.

För hög luftfuktighet kan medföra att mikroorganismer får fäste och sprider sig vilket kan bidra till skadliga ämnen i luften.

Är luftfuktigheten för låg kan det bidra till att damm och andra partiklar förflyttar sig lättare i luften.


---

**Slutresultat**

Boxen som Lopy4 kom med målades om med sprayfärg.

Pycom-enheten monterades fast i boxen med skruvar, hål gjordes för att montera antennen, micro usb-kabeln samt DHT11-sensorn.

Bilder nedanför visar mätstationen när locket är stängt med DHT11-sensorn som sticker ut. Bilden nedanför visar innehållet med locket öppet.

![](https://i.imgur.com/j48k49G.jpg)
![](https://i.imgur.com/wTkG9ad.jpg)
