from machine import Pin, I2C
import ssd1306
# ESP32 Pin assignment
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text('Hello, Wokwi!', 10, 10)
oled.show()
from machine import Pin, Timer
import network
import time
from umqtt.robust import MQTTClient
import sys
import dht
from machine import Pin, I2C
import ssd1306
# ESP32 Pin assignment
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text('Hello, Wokwi!', 10, 10)
oled.show()
sensor = dht.DHT22(Pin(19)) # DHT22 Sensor on Pin 15 of ESP32
led = Pin(2, Pin.OUT) # Onboard LED on Pin 2 of ESP32
mqtt_client_id = bytes('client_'+'12321', 'utf-8') # Just a random client ID
# Configuración de Adafruit IO
ADAFRUIT_IO_URL = 'io.adafruit.com'
ADAFRUIT_USERNAME = 'yaircostac'
ADAFRUIT_IO_KEY = 'ae02a36881a647b6a5144a9baf1bd58b'
# IDs de los feeds en Adafruit IO
TOGGLE_FEED_ID = 'led' # Asegúrate de que este es el feed para el LED
TEMP_FEED_ID = 'presion' # Parece que estás usando un ID de feed para "presión" en lugar de temperatura
HUM_FEED_ID = 'hum'
# Conexión a WiFi
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
# Conexión a Adafruit IO
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') # Recibiendo datos
if recieved_data == "0":
led.value(0) # Apagar LED
if recieved_data == "1":
led.value(1) # Encender LED
# Formato de los feeds
temp_feed = bytes('{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, TEMP_FEED_ID), 'utf-8')
hum_feed = bytes('{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, HUM_FEED_ID), 'utf-8')
toggle_feed = bytes('{:s}/feeds/{:s}'.format(ADAFRUIT_USERNAME, TOGGLE_FEED_ID), 'utf-8')
client.set_callback(cb) # Estableciendo la función de callback
client.subscribe(toggle_feed) # Suscripción al feed del LED
def sens_data(data):
sensor.measure() # Medir
temp = sensor.temperature() # Obtener temperatura
hum = sensor.humidity() # Obtener humedad
client.publish(temp_feed, bytes(str(temp), 'utf-8'), qos=0) # Publicar temperatura
client.publish(hum_feed, bytes(str(hum), 'utf-8'), qos=0) # Publicar humedad
print("Temp - ", str(temp))
print("Hum - ", str(hum))
print('Msg sent')
timer = Timer(0)
timer.init(period=10000, mode=Timer.PERIODIC, callback=sens_data)
while True:
try:
client.check_msg() # Verificar mensajes de manera no bloqueante
except:
client.disconnect()
sys.exit()