< All Topics
Print

Send data via MQTT

The following code sends temperature data measured by a DHT11 connected to an ESP32 to an Adafruit.IO feed:

import network
from machine import Pin
import os
import sys
from umqtt.robust import MQTTClient
from time import sleep
from dht import DHT11

# ADAFRUIT IO connection related
# 
ledPin = Pin(8, Pin.OUT, value=1)

# A randomly created MQTT clientID
# https://io.adafruit.com/api/docs/mqtt.html#adafruit-io-mqtt-api)
#
random_num = int.from_bytes(os.urandom(3), 'little')
mqtt_client_id = bytes('client_'+str(random_num), 'utf-8')

# Your IO.ADAFRUIT.COM account data
#
ADAFRUIT_IO_URL = b'io.adafruit.com' 
ADAFRUIT_USERNAME = b'p4xxxxr'
ADAFRUIT_IO_KEY = b'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
ADAFRUIT_IO_FEEDNAME = b'DemoFeed'

# Establ. connection to AdafruitIO MQTT via unsecure TCP port 1883
# Set parameter ssl from "ssl=False" to "ssl=True" for SSL connection
#
client = MQTTClient(client_id=mqtt_client_id, 
                    server=ADAFRUIT_IO_URL, 
                    user=ADAFRUIT_USERNAME, 
                    password=ADAFRUIT_IO_KEY,
                    ssl=False)
try:            
    client.connect()
except Exception as e:
    print('could not connect to MQTT server {}{}'.format(type(e).__name__, e))
    sys.exit()

# send temperature measured by the DHT11 sensor to Adafruit IO via MQTT
#
# format of feed name:  
# "ADAFRUIT_USERNAME/feeds/ADAFRUIT_IO_FEEDNAME"
mqtt_feedname = bytes('{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, ADAFRUIT_IO_FEEDNAME), 'utf-8')
PUBLISH_PERIOD_IN_SEC = 10

dht11sensor = DHT11(Pin(5))

# endless loop
while(True):
    # get new sensor values
    dht11sensor.measure()
    temp = dht11sensor.temperature()
    sleep(1)
    hum = dht11sensor.humidity()
        
    # send temperature value to ADAFRUIT IO    
    try:
        client.publish(mqtt_feedname, bytes(str(temp), 'utf-8'), qos=0)
        #sleep(PUBLISH_PERIOD_IN_SEC)
        for i in range(1, 300):
            ledPin.value(0)
            sleep(0.1)
            ledPin.value(1)
            sleep(0.9)
    except KeyboardInterrupt:
        print('Ctrl-C pressed...exiting')
        client.disconnect()
        sys.exit()

Table of Contents