from machine import Pin, Timer
import network
import time
from umqtt.robust import MQTTClient
import sys
import dht
sensor = dht.DHT22(Pin(4)) # DHT11 Sensor on Pin 4 of ESP32
led1=Pin(2,Pin.OUT) # Onboard LED on Pin 2 of ESP32
temp = 0
WIFI_SSID = 'Wokwi-GUEST'
WIFI_PASSWORD = ''
mqtt_client_id = bytes('client_'+'12321', 'utf-8') # Just a random client ID
ADAFRUIT_IO_URL = 'io.adafruit.com'
ADAFRUIT_USERNAME = 'learnpracticaliot' # your own Adafruit Username, get it from Key Icon
ADAFRUIT_IO_KEY = 'aio_HqfU40RxeZld8rxJ1QljsomDIwWY'
TOGGLE_FEED_ID = 'led1' # sunscribe topic 'led1' and LED1 will be controlled by Adafruit IO
TEMP_FEED_ID = 'temperature' # Publish topic to adafruitIO by ESP32 after measureing the temperature
HUM_FEED_ID = 'humidity' # Publish topic to adafruitIO by ESP32 after measureing the Humidity
def connect_wifi():
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.disconnect()
wifi.connect(WIFI_SSID,WIFI_PASSWORD)
if not wifi.isconnected():
print('connecting... to your WiFi')
timeout = 0
while (not wifi.isconnected() and timeout < 10):
print(10 - timeout)
timeout = timeout + 1
time.sleep(1)
if(wifi.isconnected()):
print('connected')
else:
print('not connected')
sys.exit()
connect_wifi() # Connecting to WiFi Router
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()
def cb(topic, msg): # Callback function
print('Received Data: Topic = {}, Msg = {}'.format(topic, msg))
recieved_data = str(msg,'utf-8') # Recieving Data
if recieved_data=="OFF":
led.value(0)
if recieved_data=="ON":
led.value(1)
temp_feed = bytes('{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, TEMP_FEED_ID), 'utf-8') # format - learnpracticaliot/feeds/temperature
hum_feed = bytes('{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, HUM_FEED_ID), 'utf-8') # format - learnpracticaliot/feeds/temperature
toggle_feed = bytes('{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, TOGGLE_FEED_ID), 'utf-8') # learnpracticaliot/feeds/led1
client.set_callback(cb) # Callback function
client.subscribe(toggle_feed) # Subscribing to particular topic
def sens_data(data):
sensor.measure() # Measuring DHT22
temp = sensor.temperature() # getting Temperature data
hum = sensor.humidity() # getting Humidity data
client.publish(temp_feed,
bytes(str(temp), 'utf-8'), # Publishing Temprature to adafruit.io
qos=0)
client.publish(hum_feed,
bytes(str(hum), 'utf-8'), # Publishing Temprature to adafruit.io
qos=0)
print("Temp - ", str(temp),"Deg.Celsius")
print("Hum - " , str(hum), "%")
print('Msg sent to Adafruit IO Successfully...')
timer = Timer(0)
timer.init(period=5000, mode=Timer.PERIODIC, callback = sens_data)
while True:
try:
client.check_msg() # non blocking function
except :
client.disconnect()
sys.exit()