viernes, 31 de marzo de 2023

Controlar un LED con Telegram y la esp32



En este tutorial vamos a aprender a controlar un LED conectado a la esp32 utilizando una interfaz gráfica de Telegram.


Para comenzar debemos crear un bot de telegram usando el bot padre (coconocido por su alias @botfather). Si no conoces como crear un bot puedes encontrarlo aquí. 



Ahora, conectamos la esp32 con micropython y creamos un script con el siguiente código y lo guardamos con el nombre teleGui.py:

#variable que contiene la interfaz gráfica 
gui={
   "chat_id":"19307681", #id del destinatario
   "text":"hola", #texto del mensaje
   "reply_markup":{ #elementos de la interfaz gráfica 
      "keyboard":[ #botones
         [
            {
               "text":"encender", #texto del boton 1
               "payload":"encender" #payload del botón 1
            },
            {
               "text":"apagar", #texto del boton 1
               "payload":"apagar" #payload del botón 1
            }
         ]
      ]
   }
}

Si no conoces como crear crear un script de micropython en la esp32 puedes encontrarlo aquí.


Creamos otro script con el siguiente código y lo guardamos con el nombre de testBot.py.


#importamos el módulo que contiene la interfaz gráfica
import teleGui
#importamos el módulo que controla las estradas y salidas digitales
from machine import Pin
#configura una salida digital en el pin GPIO2 para controlar el led
#de la esp32. El pin 2 tiene conectado un LED de color azul
ledP = Pin(2, Pin.OUT) 
#importamos el módulo de control del bot API
import utelegram
#creamos asociada a la entrada de un mensaje en general 
def get_message(message):
    #print(message) #descomente para visualizar el objeto mensaje
    if message['message']['text']=="encender": #si el mensaje es encender,
        ledP.value(1)                          #se enciende el LED 
    if message['message']['text']=="apagar":   #si el mensaje es apagar,
        ledP.value(0)                          #se apaga el LED
        
    bot.send(message['message']['chat']['id'], message['message']['text'].upper())
#creamos una fucnión asociada a la entrada de un mensaje tipo /comando 
def reply_ping(message):
    #print(message) #descomente para visualizar el objeto mensaje
    data=teleGui.gui
    data['chat_id']=message['message']['chat']['id']
    data['text']='inicio'
    bot.send(data)
#creamos el bot
try:
    bot = utelegram.ubot('AAHAxZsc5HW7_ofxUZLMW_T7Lz3ZNFaWg6A') #usamos nuestro PIN
    bot.register('/start', reply_ping)    #asociamos la función de entrada de un comando
    bot.set_default_handler(get_message) #asociamos la función de entrada de un mensaje en general 
    print('BOT LISTENING')               #Mensaje de depuración
    bot.listen()                         #iniciamos la escucha continua de mensajes, esta fucnión
                                         #bloquea la ejecución del programa
except:
    print('NOT CONNECTED - aborting')    # controlamos si existe algún error

Para el siguiente paso, la esp32 debe estar conectada al internet. Si no conoces como conectar la esp32 al internet pueder encontrarlo aquí.

 

Ejecutamos el script testBot.py y esperamos a que se conecte al bot. Si no existe  ningún problema se imprimirá el mensaje BOT LISTENING y el bot empezará a escuchar los mensajes.



Para cargar la interfaz gráfica, se debe enviar el comando /start al bot o presionar INICIAR. El bot responderá con un mensaje "inicio" y se cargará el botón de la interfaz gráfica 

 



Ahora, presionando los botones se envía el texto "encender" o "apagar" para encender o apagar el LED respectivamente.

Mira el funcionamiento en el siguiente video.










domingo, 26 de marzo de 2023

Interfaz gráfica usando Python y el bot de Telegram


En este tutorial vamos a aprender a crear una interaz gráfica con el bot de telegram usando Python y el bot API.


Para comenzar debemos crear un bot de telegram usando el bot padre (coconocido por su alias @botfather). Si no conoces como crear un bot puedes encontrarlo aquí. 



Ahora,creamos un script de Python con el siguiente código y lo guardamos con el nombre teleGui.py:


#variable que contiene la interfaz gráfica 
gui={
   "chat_id":"19307681", #id del destinatario
   "text":"hola", #texto del mensaje
   "reply_markup":{ #elementos de la interfaz gráfica 
      "keyboard":[ #botones
         [
            {
               "text":"hola", #texto del boton 1
               "payload":"mundo" #payload del botón 1
            }
         ]
      ]
   }
}

Creamos otro script con el siguiente código y lo guardamos con el nombre de testBot.py en el mismo directorio donde se guardò el script anterior.

import teleGui #importamos el módulo que contiene la interfaz gráfica
#importamos el módulo de control del bot API
import utelegram
#creamos asociada a la entrada de un mensaje en general 
def get_message(message):
    print(message) #descomente para visualizar el objeto mensaje
    print(message['message']['text'])
    bot.send(message['message']['chat']['id'], message['message']['text'].upper())
#creamos una fucnión asociada a la entrada de un mensaje tipo /comando 
def reply_ping(message):
    #print(message) #descomente para visualizar el objeto mensaje
    data=teleGui.gui #cargamos los datos de la interfaz gráfica
    data['chat_id']=message['message']['chat']['id'] #cargamos el id de remitente para devolver el mensaje
    data['text']='inicio' #cambiamos el texto del mensaje
    bot.send(data) 
#creamos el bot
try:
    bot = utelegram.ubot('AAHAxZsc5HW7_ofxUZLMW_T7Lz3ZNFaWg6A') #usamos nuestro PIN
    bot.register('/start', reply_ping)   #asociamos la función de entrada al comando /start
    bot.set_default_handler(get_message) #asociamos la función de entrada de un mensaje en general 
    print('BOT LISTENING')               #Mensaje de depuración
    bot.listen()                         #iniciamos la escucha continua de mensajes, esta fucnión
                                         #bloquea la ejecución del programa
except:
    print('NOT CONNECTED - aborting')    # controlamos si existe algún error
 

Ejecutamos el script testBot.py y esperamos a que se conecte al bot. Si no existe  ningún problema se imprimirá el mensaje BOT LISTENING el bot empezará a escuchar los mensajes.



Para cargar la interfaz gráfica, se debe enviar el comando /start al bot o presionar INICIAR. El bot responderá con un mensaje "inicio" y se cargará el botón de la interfaz gráfica.  

 

Ahora, presionando el botón ya se puede enviar el  mensaje "hola" al bot y este responderá con el mismo mensaje pero en mayúsculas.


Mira el funcionamiento en el siguiente video.