#import machine
import ssd1306
import dht
import machine, network, time, urequests
from machine import Pin, I2C
#DATOS DE LA RED
ssid = 'TP-Link_AFC4'
password ='39687210'
url = "https://thingspeak.com/channels/2292786/api_keys=3OMN3RHS24MWSUUP"
# OBJETO CON NOMBRE DE RED PARA EL MODO STATION DEL ESP32
red = network.WLAN(network.STA_IF)
red.active(True)
red.connect(ssid, password)
#CONECTA CON LAS CREDENCIALES PROVISTAS Y SI NO ESPERA DE FORMA INDEFINIDA
while red.isconnected() == False:
pass
#IMPRIME LOS DATOS DE RED Y SI LA CONEXION FUE EXITOSA CONEXION CORRECTA
print('Conexión correcta')
print(red.ifconfig())
#CONTROLA EL TIEMPO TRANSCURRIDO ENTRE PETICIONES
ultima_peticion = 0
#CANTIDAD DE SEGUNDOS ENTRE PETICIONES CON EL SERVIDOR
intervalo_peticiones = 30
#AQI SE ESTABLECE QUE PIN SE USARA PARA SDA
i2c = I2C(0,sda=Pin(2))
#ESTE OBJETO SE USARA PARA OBTENER HUMEDAD Y TEMPERATURA
dhtt = dht.DHT22(i2c=i2c)
# Configura el pin de datos del DHT22
dht_pin = machine.Pin(2) # Conecta el pin de datos del DHT22 al GPIO 2 de tu ESP32
# Configura el módulo OLED SSD1306
i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21)) # Configura los pines SCL y SDA
oled = ssd1306.SSD1306_I2C(128, 64, i2c) # Configura el tamaño del OLED (128x64)
# Crea un objeto DHT
dht_sensor = dht.DHT22(dht_pin) # Utiliza DHT22 en lugar de DHT11
# PARA PREVENIR ERROR EN CASO DE CONECTIVIDAD
#MUESTRA UN MENSAJE ESTATICO , ESPERA 10 SEGUNDOS Y APLICA REINICIO DE LA PLACA
def reconectar():
print('Fallo de conexión. Reconectando...')
time.sleep(10)
machine.reset()
while True:
try:
#CONSULTA SI HAN TRANSCURRIDO 30 SEG DE LA ULTIMA PETICION SI ES VERDAD EJECUTAR EL CODIGO
if (time.time() - ultima_peticion) > intervalo_peticiones:
#OBTIENE LOS DATOS DE LA TEMPERATURA Y LA HUMEDAD
temperatura, humedad = dhtt.read_compensated_data()
temp = round(temperatura, 1)
hum = round(humedad, 1)
# Lee la temperatura y humedad del sensor DHT22
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
#MOSTRAMOS POR CONSOLA LOS VALORES
print(dhtt.values)
#
respuesta = urequests.get(url + "&field1=" + str(temp) + "&field2=" + str(hum) )
#IMPRIME POR CONSOLA EL NUMERO 200 SI LOS DATOS SE ALMACENARON EN RESPUESTA
print ("Respuesta: " + str(respuesta.status_code))
#CERRAMOS LA CONEXION ABIERTA PARA LA PETICION DEL SERVIDOR
respuesta.close ()
#ACTUALIZAMOS EL VALOR DE ultima_peticion CON EL VALOR DE LA HORA ACTUAL
ultima_peticion = time.time()
# Borra la pantalla OLED
oled.fill(0)
# Muestra la temperatura y la humedad en el OLED
oled.text("Temperatura:", 0, 0)
oled.text(str(temperature) + " C", 0, 16)
oled.text("Humedad:", 0, 32)
oled.text(str(humidity) + " %", 0, 48)
# Actualiza la pantalla OLED
oled.show()
except OSError as e:
#SE LLAMA A LA FUNCION RECONECTAR EN CASO HAYA ALGUN TIPO DE ERROR
reconectar()
# except Exception as e:
# print("Error:", e)
machine.idle()