from time import sleep
import network
import utelegram
# Importar Credenciales Wifi y Token Telegram
from config import utelegram_config, wifi_config, usmartpot_config
# Importar clases de sensores
from sensors import (
LightSensor,
PHSensor,
TDSSensor,
HumiditySoilSensor,
AtmosphereSensor,
)
from actuators import (
WaterPump,
UVLight,
)
# Importar funciones
from utilitys import (
print_table,
send_msg,
send_record
)
# Importar LCD Display
from display import LCDDisplay
# Importar manejador
import usmartpot
# Controlar si se debe enviar el mensaje
should_send_msg = False
if __name__ == "__main__":
# Instancia de cada sensor digital
dht_sensor = AtmosphereSensor(15)
# Instancia de cada sensor ADC
light_sensor = LightSensor(34)
ph_sensor = PHSensor(35)
tds_sensor = TDSSensor(32)
humidity_soil_sensor = HumiditySoilSensor(33)
# Instancia de actuadores
water_pump = WaterPump(19)
uv_light = UVLight(18)
# Instancia de LCDDisplay con pines scl y sda
lcd_display = LCDDisplay(scl_pin=16, sda_pin=17) # Pines I2C para scl y sda
# Mostrar mensaje de conexión WiFi
lcd_display.show_wifi_connecting()
# Configuración inicial de WiFi y pines
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(wifi_config['ssid'], wifi_config['password'])
# Definir Bot
bot = None
# Espera activa hasta 20 segundos para conectar
for _ in range(80):
if sta_if.isconnected():
print('WiFi Conectado')
lcd_display.show_online_status()
try:
bot = usmartpot.Ubot(usmartpot_config['email'],usmartpot_config['password'])
should_send_msg = True
print('Bot inicializado correctamente')
except Exception as e:
print(f"Error al inicializar el bot: {e}")
break
print('Conectando a WiFi...')
lcd_display.show_wifi_spinner()
sleep(0.25)
else:
print('No conectado - abortando')
# Mostrar en Display LCD
lcd_display.show_welcome_message()
sleep(5)
# Enviar datos de los sensores cada 60 segundos
while True:
# Leer valores de los sensores
dht_data = dht_sensor.read_value()
temp = dht_data["temperature"]
humidity_air = dht_data["humidity"]
light = light_sensor.read_light()
ph = ph_sensor.read_ph()
tds = tds_sensor.read_tds()
humidity_soil = humidity_soil_sensor.read_soil_humidity()
# Imprimir los valores en formato tabla
print_table(temp, humidity_air, light, ph, tds, humidity_soil)
# Mostrar los datos en el display LCD
lcd_display.display_sensor_data(temp, humidity_air, light, ph, tds, humidity_soil)
# Enviar mensaje si el bot está conectado y la variable `should_send_msg` es True
if should_send_msg:
send_record(bot, usmartpot_config['crop'], temp, humidity_air, light, ph, tds, humidity_soil)
sleep(60)
else:
sleep(60) # Esperar 60 segundos si el bot no fue iniciado