from umqtt.simple import MQTTClient
from machine import UART, Pin, ADC
import ujson
import network
import utime as time
import dht
import sds011
import ssd1306
import machine
# Device Setup
DEVICE_ID = "Carol"
# WiFi Setup
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
# MQTT Setup
MQTT_BROKER = "broker.mqttdashboard.com"
MQTT_CLIENT = DEVICE_ID
MQTT_TOPIC = "particulas"
# Configuración de la pantalla OLED
OLED_WIDTH = 128
OLED_HEIGHT = 64
i2c = machine.I2C(scl=Pin(22), sda=Pin(21)) # Configura los pines SCL y SDA
oled = ssd1306.SSD1306_I2C(OLED_WIDTH, OLED_HEIGHT, i2c) # Configura el tamaño del OLED (128x64)
# Configuración del sensor SDS1101 (Ejemplo utilizando I2C)
I2C_ADDRESS = 0x42 # Dirección I2C del sensor
POT_PIN = 32
pot = ADC(Pin(POT_PIN))
pot.atten(ADC.ATTN_11DB)
# Conectar a Wi-Fi
def connect_wifi():
import network
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(WIFI_SSID, WIFI_PASSWORD)
while not sta_if.isconnected():
time.sleep(1)
print("Conexión Wi-Fi exitosa")
# Conectar al servidor MQTT
def connect_mqtt():
#client = MQTTClient("esp32", MQTT_BROKER)
client = MQTTClient(MQTT_CLIENT, MQTT_BROKER, user="", password="")
client.connect()
print("Conexión MQTT exitosa")
return client
# Configurar la comunicación I2C
#i2c = I2C(scl=Pin(5), sda=Pin(4), freq=100000)
# Función para leer datos del sensor
def read_sensor_data():
# Ejemplo: leer datos desde el sensor SDS1101 (ajustar según el protocolo del sensor)
# i2c.readfrom_mem_into(I2C_ADDRESS, registro, data_buffer)
pot_value = pot.read()
data = {"particulas": pot_value} # Reemplazar con datos reales del sensor
return data
# Función para mostrar datos en la pantalla OLED
def display_data_on_oled(data):
oled.fill(0)
oled.text("Particulas:", 0, 0)
oled.text(str(data["particulas"]), 0, 20)
oled.show()
# Función principal
def main():
# Conectar a Wi-Fi
connect_wifi()
# Conectar al servidor MQTT
mqtt_client = connect_mqtt()
while True:
# Leer datos del sensor
data = read_sensor_data()
# Mostrar datos en la pantalla OLED
display_data_on_oled(data)
# Enviar datos al servidor MQTT
mqtt_client.publish(MQTT_TOPIC, ujson.dumps(data))
# Esperar un intervalo de tiempo (ajustar según sea necesario)
time.sleep(60) # Enviar datos cada 60 segundos
if __name__ == "__main__":
main()