viernes, 7 de abril de 2023

Reparar esp32 dañada por un cortocircuito

La ESP32 es una familia de microcontroladores de la empresa Espressif Systems basada en microprocesador de 32-bits (dual core o single core), que incluye comunicación inalámbrica Wifi y Bluetooth, así como, seguridad criptográfica por hardware, un coprocesador para el modo bajo consumo e interfaces periféricas como: I2C, SPI, CAN, PWM, entre otros. Puede alcanzar frecuencias de operación de hasta 240 MHz. El lenguaje oficial utilizado para programar este dispositivo es el c/c++, sin embargo, existen disponibles varios intérpretes para Python, Lua, JavaScript y muchos otros.

Para mayor información  pulsa aquí 


Una de las desventajas principales de la ESP32 es su sensibilidad a la estática, así  como la falta de protección en los circuitos de alimentación. Es por eso que con frecuencia tiende a destruirse con facilidad sobre todo cuando se provoca un cortocircuito (contacto en el pin de voltaje y tierra).


En este tutorial vamos a aprender a reparar una ESP32 dañada (quemada) por un cortocircuito. Al conectar la esp32 al computador usando el cable USB, esta no se enciende, lo que supone un daño en el circuito de alimentación.   


Si el daño está localizado sólo en la alimentación por USB, la esp32 debería encender si se utiliza una fuente de alimentación externa en los pines Vin y Gnd.





Si esto sucede, se bebe identificar la ubicación del diodo zener estabilizador de la entrada de voltaje por USB. La ubicación de este elemento depende de cada versión de ESP32.





Desconectamos de la fuente externa y conectamos nuevamente el cable USB al computador. Utilizando un conductor (alambre) creamos un puente entre las dos terminales  del diodo zener. La ESP32 debería encender....








NO CONECTE EL USB Y LA FUENTE EXTERNA A LA VEZ , PUEDE GENERAR UN DAÑO IRREVERSIBLE A LA ESP32.

Mira el vídeo de éste tutorial Aquí
   











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.







jueves, 29 de septiembre de 2022

Bot Telegram usando Python


En este tutorial vamos a aprender a crear un bot de telegram usando Python y el bot API.

El bot API es  una interfaz basada en HTTP creada para los desarrolladores interesados ​​en crear bots para Telegram.

Para comenzar debemos crear un bot de telegram usando el bot padre (o conocido por su alias @botfather) que es quien crea los bots, administra los tókenes, los alias y permisos. Los pasos se muestran a continuación. 



1. Inicir el botfather
Abrimos la aplicación de Telegram y buscamos @botfather.
Alternativamente podemos encontrar el botfather aquí



Presionamos INICIAR y enviamos el mensaje /help para ver todos los comando disponibles. 



2. Crear el bot
Para crear un nuevo bot, enviamos el mensaje /newbot. El botfather solicitarà un nombre para el nuevo bot. El nombre debe ser único y terminar con la palabra "_bot", por ejemplo Mirobot11_bot. Adicionalmente será necesario un nombre de usuario para nuestro bot, puede ser el mismo nombre.


Una vez creado el bot, el botfather mostrará información de acceso como es el URL y  el TOKEN que se necesita para acceder al bot a través del API



 
 NO COMPARTA EL TOKEN

Para verificar que el bot está funcionando, ingresamos en el navegador la url https://api.telegram.org/bot<TOKEN>/getUpdates (reemplace <TOKEN> por su token) y obtendremos el siguiente resultado:

3. Crear el código en Python

Instalamos Python 3 en nuestro dispositivo. Si no sabes como hacerlo pulsa aquí. Creamos un script con el siguiente código y lo guardamos con el nombre telegram.py:


#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 
    bot.send(message['message']['chat']['id'], 'pong')
#creamos el bot
try:
    bot = utelegram.ubot('1818111702:Yw6To8B6rAYuQlrsYn8') #usamos nuestro PIN
    bot.register('/ping', 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

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


import gc
try:
     import utime
except:
    import time as utime
try:
    import ujson
except:
    import json as ujson
try:    
    import urequests
except:
    import requests as urequests
class ubot:
    def __init__(self, token, offset=0):
        self.url = 'https://api.telegram.org/bot' + token
        self.commands = {}
        self.default_handler = None
        self.message_offset = offset
        self.sleep_btw_updates = 3

        messages = self.read_messages()
        if messages:
            if self.message_offset==0:
                self.message_offset = messages[-1]['update_id']
            else:
                for message in messages:
                    if message['update_id'] >= self.message_offset:
                        self.message_offset = message['update_id']
                        break


    def send(self, *argv):
        if len(argv)>1: 
            data = {'chat_id': argv[0], 'text': argv[1]}
        else:
            data=argv[-1]
        try:
            headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
            response = urequests.post(self.url + '/sendMessage', json=data, headers=headers)
            response.close()
            return True
        except:
            return False

    def read_messages(self):
        result = []
        self.query_updates = {
            'offset': self.message_offset + 1,
            'limit': 1,
            'timeout': 30,
            'allowed_updates': ['message']}

        try:
            update_messages = urequests.post(self.url + '/getUpdates', json=self.query_updates).json() 
            if 'result' in update_messages:
                for item in update_messages['result']:
                    result.append(item)
            return result
        except (ValueError):
            return None
        except (OSError):
            print("OSError: request timed out")
            return None

    def listen(self):
        while True:
            self.read_once()
            utime.sleep(self.sleep_btw_updates)
            gc.collect()

    def read_once(self):
        messages = self.read_messages()
        if messages:
            if self.message_offset==0:
                self.message_offset = messages[-1]['update_id']
                self.message_handler(messages[-1])
            else:
                for message in messages:
                    if message['update_id'] >= self.message_offset:
                        self.message_offset = message['update_id']
                        self.message_handler(message)
                        break
    
    def register(self, command, handler):
        self.commands[command] = handler

    def set_default_handler(self, handler):
        self.default_handler = handler

    def set_sleep_btw_updates(self, sleep_time):
        self.sleep_btw_updates = sleep_time

    def message_handler(self, message):
        if 'text' in message['message']:
            parts = message['message']['text'].split(' ')
            if parts[0] in self.commands:
                self.commands[parts[0]](message)
            else:
                if self.default_handler:
                    self.default_handler(message)

 

Ejecutamos el script telegram.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.



4. Probar el bot

Para enviar un mensaje al bot, lo buscamos en la app de telegram o accedemos al URL de acceso al mismo https://telegram.me/mirobot11_bot y presionamos INICIAR (se puede iniciar el bot enviando el comando /start)

 

Enviamos un mensaje de texto y el bot responderá con el mismo mensaje en mayúsculas. Si enviamos el comando /ping el bot responderá con el texto "pong"




Para mayor información acerca del bot API entra aquì 

viernes, 9 de septiembre de 2022

Conectar la ESP32 automáticamente a la red wifi usando Micropython

En este tutorial vamos a aprender a conectar la ESP32 automáticamente a la red wifi usando MicroPython.





Creamos un script con el siguiente código  y los guardamos en la ESP32 con el nombre conectarWifi.py.

Cómo crear un script los encuentras aquí 
#importa los módulos necesarios 
import network
import time
from machine import Pin
#configura una salida digital en el pin GPIO2 para controlar el led de la esp32
ledP = Pin(2, Pin.OUT)   
#configura los datos de la red inalámbrica
wifi_ssid = "lio"   
wifi_password = "12345678"
#variable para controlar el estado de la salida digital y el tiempo intento de conexion 
i=0 
#inicia la conexi+on a la red inalámbrica
try:
    sta_if = network.WLAN(network.STA_IF)    # crea una interface inalámbrica tipo estación (cliente)
    sta_if.active(True)                      # activa la interface inalámbrica
    sta_if.connect(wifi_ssid, wifi_password) # intenta conectarse a la red inalámbrica wifi_ssid con la calve wifi_password
    #ciclo infinito hasta que se conecte
    while not sta_if.isconnected():          
        i=i+1                                #incrementa en 1 la variable i
        ledP.value(i%2)                      #enciende el LED cuando i es impar y lo apaga cuando es par (parpadeo)
        time.sleep(0.5)                      #espera medio segundo
        print("*"*i)                         #imprime la cantidad * en fucnión del valor de i
    ledP.value(sta_if.isconnected())         #enciende el led si la conexión se realizó con éxito
except:
    ledP.value(0)                            #apaga el led si la conexión falla
    pass

Abrimos el archivo boot.py. y agregamos la siguiente instrucción  "import conectarWifi", como se muestra a continuación.

# This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
#import webrepl
#webrepl.start()
#import app
import conectarWifi

Guardamos el archivo boot.py y reiniciamos la ESP32. El Led conectado al pin numero 2 debe empezar a parpadear hasta que se conecte exitosamente.


Mira el vídeo de éste tutorial Aquí