La placa ESP32 es un microcontrolador de bajo consumo basado en el chip ESP32 de Espressif Systems. Puede trabajar con dos hilos (Thread), que permiten realizar tareas concurrentes. Para utilizar la funcionalidad de multihilo en ESP32 con MicroPython, puedes utilizar la biblioteca _thread.
Abajo te muestro el código utilizado en el video para hacer trabajar los hilos de forma independiente, uno de ellos ejecuta un programa y con el otro nos conectaremos a la placa ESP32 de forma remota para controlarla.
import machine
import time
from _thread import start_new_thread
import network
import webrepl
ssid = "ESP32.led"
password = "po12345678"
ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid=ssid, password=password, authmode=network.AUTH_WPA2_PSK)
while not ap.active():
pass
# Initialize the built-in LED as an output
led = machine.Pin(14, machine.Pin.OUT)
# Define loop function, which toggles the built-in LED
def loop():
webrepl.start()
webrepl.start(password='mypass')
def loop2():
while True:
led.value(1) # Turn the LED on
time.sleep(1) # Wait for a second
led.value(0) # Turn the LED off
time.sleep(1) # Wait for a second
# Start the loop2 function in a separate thread
start_new_thread(loop2, ())
# Run the loop function in the main thread
loop()
El siguiente código en MicroPython para ESP32 crea un punto de acceso Wi-Fi y controla el encendido y apagado de un LED incorporado en el pin 14 del ESP32. A continuación, se detalla el funcionamiento del código:
- Se importan las bibliotecas necesarias:
- machine: Para interactuar con el hardware del ESP32.
- time: Para utilizar funciones relacionadas con el tiempo, como sleep.
- _thread: Para manejar hilos (threads) y permitir la ejecución concurrente de funciones.
- network: Para configurar y manejar conexiones de red.
- webrepl: Para iniciar un REPL (Read-Eval-Print Loop) basado en la web, que permite interactuar con el dispositivo a través de una conexión Wi-Fi.
- Se definen las variables ssid y password que contendrán el nombre y la contraseña del punto de acceso Wi-Fi que se creará.
- Se crea y activa un punto de acceso Wi-Fi utilizando la clase network.WLAN y se configura con el nombre y la contraseña definidos anteriormente.
- Se espera hasta que el punto de acceso esté activo.
- Se inicializa el pin 14 como un pin de salida para controlar el LED.
- Se define la función loop, la cual inicia el REPL basado en la web con una contraseña.
- Se define la función loop2, la cual enciende y apaga el LED incorporado en intervalos de un segundo.
- Se inicia la función loop2 en un hilo separado utilizando start_new_thread. Esto permite que el LED se encienda y apague de forma independiente al resto del código.
- Finalmente, se ejecuta la función loop en el hilo principal del programa, lo que inicia el REPL basado en la web.
Con este código, se crea un punto de acceso Wi-Fi y se controla el LED incorporado en el pin 14, mientras que el dispositivo sigue siendo accesible a través de un REPL basado en la web. Esto permite a los usuarios conectarse al dispositivo y enviar comandos o modificar el código sin interrumpir el parpadeo del LED.
Hola Cesar
tengo un problema en la consola de webrepl, realice todos los pasos tengo accesso a webrepl con el password mypass pero no puedo ingresar por teclado los comandos al webrepl como import os
sabes a que se debe esto? gracias
Hola Sergio, estoy mirando que es lo que puede estar ocurriendo, en teoria he vuelto a descargar el codigo y no tengo fallos.
Entiendo por lo que dices que puedes acceder a todo, y que cuandopones la direccion ip del tipo 192.168.4.1:8266, despues clickeas en conectar y te dice «Welcome to Micropython» y abajo «Password:».
Y luego de ingresar el password «mypass», te deberia de decir «WebREPL connected» y debajo «>>>» que es donde podrias poner tu codigo «import os…». Lo que entiendo por lo que dices es que todo va bien pero no te deja seguido de «>>>» seguir poniendo el codigo. Es correcto todo lo que he indicado? siento que sea tan extenso pero es para entender en que punto te encuentras.
Por favor indicame si es todo como he dicho, he revisado el codigo y no veo problemas, aunque seguire mirando. Por supuesto yo descartaria las tipicas recomendaciones que suelen ser:
Tener la última version micropython instalada (por ejemplo v1.19), revisar que tienes instalados los archivos del webrepl desde el enlace de github, probar a resetar la placa esp32 una vez instalados los archivos…
Por cierto entiendo que has visto el video que ha puesto al principio de youtube, porque me he dado cuenta de que hay algunas cosas que en la web no pongo sin embargo el video si que sales, aunque son pequeños detalles.
Hola Cesar es correcto todo lo que me describes despues de tener Webrepl conected es como si dehabilitara el teclado ya no puedo introducir ningun caracter por ejemplo >>> import os
gracias
Hola Sergio, he podido ver que la linea de codigo que recoge la instruccion por teclado y la envia a la esp32 a traves de websocket esta dentro del archivo «webrepl.js» que te descargas con del repositorio de Github junto con el webrepl.html. Entonces en el archivo «webrepl.js» en la linea 85 tenemos la instruccion » term.on(‘data’, function(data) { «, con el argumento «data». Esta linea en concreto es la que recoge la instruccion para despues en la linea 89 con «ws.send(data);» enviarla a esp32. Es posible que el problema pueda ser con el navegador al cagar el javascript, yo estoy utilizando chrome, actualizado claro. De todas formas no entiendo muy bien porque te deja ingresar el «mypass» y luego no te deja ingresar mas instrucciones, ya que es la misma funcion o linea de codigo que te he comentado antes. Hechale un vistazo a esto por si pudiera ayudarte en algo y me cuentas.
Un saludo