Terug naar blog
IoT

IoT sensoren uitlezen met Python en MQTT

Koen Vorsters

Koen Vorsters

Developer & Engineer

28 mei 202512 min leestijd

Tijdens mijn opleiding Electronica-ICT aan Thomas More heb ik heel wat uren doorgebracht met microcontrollers en sensoren. Mijn eigen huis is ondertussen volledig "smart" — ik weet exact wanneer de temperatuur in een kamer te warm of te koud wordt. In deze tutorial laat ik zien hoe je een compleet IoT-sensornetwerk opzet: van ESP32 tot Python dashboard.

Wat gaan we bouwen?

We bouwen een systeem waarin een ESP32 microcontroller temperatuur- en luchtvochtigheidsdata leest van een DHT22 sensor, deze via MQTT verstuurt naar een broker, en een Python service de data opslaat en visualiseert. De volledige keten, van hardware tot dashboard.

  • ESP32 microcontroller met DHT22 sensor
  • Mosquitto als MQTT broker
  • Python + paho-mqtt als subscriber
  • Real-time data opslag in SQLite
  • Optioneel: een simpel Flask dashboard

De hardware aansluiten

De DHT22 is een betaalbare sensor die zowel temperatuur als luchtvochtigheid meet. Sluit hem aan op de ESP32: VCC naar 3.3V, GND naar GND, en de data-pin naar GPIO 4. Een 10kΩ pull-up weerstand tussen VCC en data is aan te raden voor een stabiel signaal.

ESP32 firmware (MicroPython)

Ik gebruik MicroPython op de ESP32 — het laat je Python schrijven op een microcontroller, wat de drempel enorm verlaagt:

python
import dht
import machine
import time
from umqtt.simple import MQTTClient

# Sensor setup
sensor = dht.DHT22(machine.Pin(4))

# MQTT setup
client = MQTTClient("esp32", "192.168.1.100")
client.connect()

while True:
    sensor.measure()
    temp = sensor.temperature()
    hum = sensor.humidity()
    
    payload = f'{{"temp": {temp}, "humidity": {hum}}}'
    client.publish("huis/woonkamer/klimaat", payload)
    
    print(f"Verzonden: {temp}°C, {hum}%")
    time.sleep(30)  # Elke 30 seconden

MQTT Broker opzetten

Mosquitto is de meest gebruikte open-source MQTT broker. Met Docker draait hij in seconden:

bash
# Start Mosquitto met Docker
docker run -d --name mosquitto \
  -p 1883:1883 \
  -v mosquitto-data:/mosquitto/data \
  eclipse-mosquitto

# Test met command-line subscriber
mosquitto_sub -h localhost -t "huis/#" -v

Python subscriber en data opslag

Aan de server-kant schrijven we een Python service die luistert naar MQTT berichten en de data opslaat:

python
import json
import sqlite3
from datetime import datetime
import paho.mqtt.client as mqtt

# Database setup
conn = sqlite3.connect("sensordata.db")
conn.execute("""
    CREATE TABLE IF NOT EXISTS metingen (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        ruimte TEXT,
        temp REAL,
        humidity REAL,
        timestamp TEXT
    )
""")

def on_message(client, userdata, msg):
    data = json.loads(msg.payload)
    ruimte = msg.topic.split("/")[1]  # bijv. "woonkamer"
    
    conn.execute(
        "INSERT INTO metingen (ruimte, temp, humidity, timestamp) VALUES (?, ?, ?, ?)",
        (ruimte, data["temp"], data["humidity"], datetime.now().isoformat())
    )
    conn.commit()
    print(f"[{ruimte}] {data['temp']}°C, {data['humidity']}%")

client = mqtt.Client()
client.on_message = on_message
client.connect("localhost", 1883)
client.subscribe("huis/#")
client.loop_forever()

Van hobby naar productie

Dit basisopzet schaalt verrassend goed. In mijn eigen woning heb ik meerdere ESP32-sensoren in verschillende kamers, allemaal rapporterend aan dezelfde MQTT broker. De Python service verwerkt alles en ik kan patronen herkennen: wanneer wordt het te warm in de slaapkamer? Hoe lang duurt het om de woonkamer op te warmen?

Technologie is pas krachtig als het echte problemen oplost. Mijn smart home bespaart me niet alleen energie, het leert me ook hoe mijn huis "ademt".

De volgende stap? Alerts instellen (Telegram/email als de temperatuur onder 16°C zakt), historische grafieken in een webdashboard, en OTA (Over The Air) updates voor de ESP32 firmware zodat je niet meer fysiek bij elke sensor hoeft te komen.

Vond je dit artikel nuttig?

Ik schrijf regelmatig over AI, IoT, web development en DevOps. Neem gerust contact op als je vragen hebt.