from machine import Pin,unique_id
import time
from umqtt.robust import MQTTClient
import network
import sys
import ubinascii
import urandom as random
# import dht
# sensor=dht.DHT11(Pin(5)) #using D1
led = Pin(2, Pin.OUT)
ssid='Wokwi-GUEST'
password=''
# Adafruit IO configuration
ADAFRUIT_IO_URL = 'io.adafruit.com'
ADAFRUIT_USERNAME = 'raylee0106'
ADAFRUIT_IO_KEY = ''
FEED_ID_temp = 'bedroom.temp'
FEED_ID_humi = 'bedroom.humi'
FEED_ID_light = 'bedroom.light'
# CLIENT_ID = 'home'
def randint(min, max):
span = max - min + 1
div = 0x3FFFFFFF // span
offset = random.getrandbits(30) // div
val = min + offset
return val
def connect_wifi():
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
while station.isconnected() == False:
pass
print('Connection successful')
print(station.ifconfig())
# Callback function to handle messages from Adafruit IO
def sub_cb(topic, msg):
print(f"Received message: {msg} on topic: {topic}")
if msg == b'ON':
led.value(1)
print("LED turned ON")
elif msg == b'OFF':
led.value(0)
print("LED turned OFF")
def connect_to_adafruit():
# ESP32 unique ID
CLIENT_ID = ubinascii.hexlify(unique_id())
client = MQTTClient(client_id=CLIENT_ID,
server=ADAFRUIT_IO_URL,
user=ADAFRUIT_USERNAME,
password=ADAFRUIT_IO_KEY,
ssl=False)
try:
client.connect()
client.set_callback(sub_cb) # Set the callback function
print('Connected to Adafruit IO MQTT Broker')
ADAFRUIT_IO_FEED_LED = '{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, FEED_ID_light) # Replace with your
client.subscribe(ADAFRUIT_IO_FEED_LED) # Subscribe to the LED control feed
except Exception as e:
print('could not connect to MQTT server {}{}'.format(type(e).__name__, e))
sys.exit()
return client
connect_wifi() # Connecting to WiFi Router
client = connect_to_adafruit()
temp_feed = '{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, FEED_ID_temp) # format - learnpracticaliot/feeds/temperature
hum_feed = '{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, FEED_ID_humi) # format - learnpracticaliot/feeds/humidity
while True:
# sensor.measure()
# temp=sensor.temperature()
# humi=sensor.humidity()
temp=randint(1,50)
humi=randint(1,100)
print('Temp: '+str(temp)+'\u00b0C')
print('humi: '+str(humi)+'%')
Temp="%2d\u00b0C" % (temp)
Humi="%2d%%" % (humi)
client.publish(temp_feed, Temp.encode())
client.publish(hum_feed, Humi.encode())
# Check for incoming MQTT messages
client.check_msg()
time.sleep(10)