Muchas aplicaciones de IoT se controlan con la ayuda de una página web o un sitio web HTML que se ejecuta en una red de área local (LAN) o una red de área local inalámbrica (WLAN). Algunos ejemplos de este tipo de aplicaciones de IoT incluyen la automatización del hogar, la automatización de oficinas y la agricultura inteligente. La página HTML o sitio web que controla las cosas está alojada en una microcomputadora o microcontrolador. Las placas de desarrollo WiFi como ESP8266 y ESP32 proporcionan una interfaz de red WiFi donde la placa puede actuar como una estación WiFi o como un punto de acceso WiFi. Vea cómo conectar el ESP8266/ESP32 a una conexión WiFi usando el módulo de red MicroPython. Ya sea que estén configurados como una estación WiFi o un punto de acceso WiFi, los puertos MicroPython, incluidos ESP8266 y ESP32, pueden alojar páginas HTML utilizando el módulo de socket MicroPython. Puede consultar cómo configurar ESP8266/ESP32 u otros puertos MicroPython como servidor TCP y clientes TCP. Como servidor TCP, ESP8266/ESP32/cualquier puerto MicroPython puede alojar una página web.
Como servidor TCP, conectamos el ESP8266/ESP32 a un módem/enrutador WiFi donde otros dispositivos podían acceder a la página alojada por el ESP8266/ESP32 a través de Internet. Los dispositivos pueden recibir comandos o datos de sensores desde el servidor de alojamiento ESP8266/ESP32 a través de Internet. En este caso, la aplicación de alojamiento web para domótica o cualquier proyecto de IoT se enruta a través del módem/enrutador entre el servidor ESP8266/ESP32 y los otros nodos de la red de IoT.
Para una aplicación de IoT en la que todos los nodos de la red de IoT están implementados localmente o están dentro del alcance de una LAN o WLAN, esta configuración de red puede provocar una falla que se puede prevenir. En caso de que el módem/enrutador funcione mal o la conexión a Internet de su proveedor de servicios de Internet (ISP) se suspenda debido a alguna falla, la aplicación IoT completa finalizará porque los dispositivos IoT no podrán comunicarse entre sí en ausencia o falla. de conexión a internet.
Sin embargo, podemos evitar tal falla haciendo que el ESP8266/ESP32 u otro puerto MicroPython sea un punto de acceso WiFi independiente que aloja la aplicación web, de modo que múltiples nodos puedan acceder a la aplicación IoT directamente con el servidor de alojamiento (es decir, ESP8266/ESP32, en lugar de acceder a la aplicación IoT a través de Internet).
En este proyecto, demostraremos cómo configurar ESP8266/ESP32 o cualquier puerto MicroPython como punto de acceso WiFi y alojar una página web directamente desde el punto de acceso.
Componentes necesarios
- ESP8266/ESP32x1
- 1 cable USB ESP8266/ESP32.
- Computadora/portátil (para programación ESP) x1
- Smartphone (para acceder a la aplicación web) x1
Conexiones de circuito
No es necesario realizar ninguna conexión de circuito. Solo necesita tener lista una herramienta de desarrollo de software MicroPython como uPyCraft IDE o Thonny IDE y cargar el firmware MicroPython para ESP8266/ESP32. Finalmente, debe cargar el script MicroPython de este proyecto en ESP8266/ESP32. El script en sí se encargará de crear el ESP8266/ESP32 como punto de acceso WiFi y de alojar una página HTML. Una vez cargado el script, la tarjeta se puede proteger en un estuche e implementar en una aplicación de IoT destinada a ejecutarse a través de WLAN.
Preparando ESP8266/ESP32
Antes de continuar, debe tener un IDE de MicroPython listo para escribir, editar y cargar código. Puede utilizar uPyCraft IDE o Thonny IDE para el desarrollo de software. Con la ayuda del IDE respectivo, debes haber cargado el firmware MicroPython para ESP8266 o ESP32. Vea cómo preparar el IDE de uPyCraft y cargar el firmware MicroPython para ESP8266/ESP32.
Secuencia de comandos MicroPython
Cómo funciona el proyecto
Con la ayuda de un módulo de red, el ESP8266/ESP32 se configura como un punto de acceso WiFi en lugar de una estación WiFi. Cuando el ESP8266/ESP32 se configura como un punto de acceso WiFi, otros nodos IoT pueden acceder directamente a la placa mediante un. Interfaz de red WiFi en lugar de acceder a la placa a través de Internet.
Se diseña una página HTML de muestra dentro del script MicroPython. La página HTML se almacena como una cadena entre comillas dobles. Dado que las cadenas entre comillas dobles en Python y MicroPython estándar son inmutables, podemos alojar páginas web estáticas utilizando estos marcos de MicroPython. Entonces, la única forma de hacer que una página HTML interactúe con el servidor de alojamiento es mediante el uso de elementos de formulario HTML, como botones.
Finalmente, el punto de acceso ESP8266/ESP32 se configura como un servidor TCP mediante sockets que entrega la página web cada vez que un punto de acceso ESP8266/ESP32 conectado al dispositivo solicita la dirección IP local del ESP8266/ESP32 mediante un encabezado HTTP.
Código
El script MicroPython comienza importando el módulo de socket si no se encuentra el módulo de socket. A continuación, se importa el módulo de red para configurar la interfaz WiFi en el ESP8266/ESP32. El módulo esp se importa y la depuración se establece en none utilizando el método esp.osdebug. El módulo gc se importa y la recolección de basura se habilita explícitamente mediante el método gc.collect.
Las variables SSID y contraseña están definidas para almacenar el SSID y la clave de red del servidor ESP8266/ESP32. Se crea una instancia de un objeto de interfaz de red WiFi ap_if utilizando el método network.WLAN, que se configura para el punto de acceso WiFi. La interfaz de red se activa llamando al método activo y se configura para crear el SSID y la contraseña utilizando el método de configuración. Ahora cualquier dispositivo puede conectarse al punto de acceso ESP8266/ESP32 con el SSID y la clave de red proporcionados. Puede elegir cualquier SSID y clave de red que prefiera. El SSID y la clave de red se asignan a 'MicroPython-AP' y 'eeworldonline' respectivamente en este proyecto. Tenga en cuenta que tanto el SSID como la contraseña reciben cadenas mutables. El SSID se mostrará como una conexión WiFi en la pestaña WiFi de computadoras y teléfonos inteligentes. Los dispositivos integrados pueden conectarse al punto de acceso ESP8266/ESP32 programándolos explícitamente para conectarse con el SSID y la contraseña proporcionados.
El script se ejecuta hasta que se activa el punto de acceso WiFi. Una vez activado el punto de acceso, se imprimirá un mensaje de "conexión exitosa" en la consola. Inmediatamente después, los parámetros de red del punto de acceso se imprimen en la consola utilizando el método ifconfig.
La función web_page está definida para entregar la página HTML alojada por ESP8266/ESP32. En esta función, el código HTML de la página web se almacena como una cadena inmutable en una variable HTML. Se crea una instancia de un objeto socket con el método socket.socket para utilizar el protocolo de Internet IPv4 y la red TCP en la capa de red de la pila TCP/IP. El socket está vinculado al localhost y al puerto número 80 mediante el método socket.bind. El socket está habilitado para escuchar conexiones TCP entrantes utilizando el método socket.listen.
En un bucle while infinito, el socket acepta conexiones de dispositivos conectados al punto de acceso mediante el método socket.accept. Cuando el servidor ESP8266/ESP32 acepta una conexión, la dirección IP del dispositivo conectado se imprime en la consola. La solicitud HTTP GET recibida de la conexión aceptada se almacena en una variable de solicitud. La solicitud HTTP recibida de la conexión aceptada también se imprime en la consola. La página web devuelta por la función web_page se almacena en una variable de respuesta y se envía a la conexión solicitante mediante el método de envío. La conexión se cierra mediante el método de cierre. El bucle continúa infinitamente, buscando nuevos dispositivos solicitando una conexión al servidor TCP ESP8266/ESP32 y entregando la página web como localhost, el dispositivo conectado solicita la dirección IP.
Resultado
Cargue y ejecute el código MicroPython como un archivo main.py para ESP8266/ESP32. Cuando se ejecuta el punto de acceso ESP8266/ESP32, se muestra como una de las conexiones WiFi disponibles en un teléfono inteligente o computadora, como se muestra en la imagen a continuación.
Conecte el punto de acceso ingresando la clave de red definida en el código MicroPython. El servidor ESP8266/ESP32 imprimió la dirección IP del host local en la consola como se muestra en la imagen a continuación.
Para abrir la página alojada por el servidor TCP ESP8266/ESP32, abra un navegador web y escriba la dirección IP del ESP32/ESP8266 en la barra de direcciones y presione Entrar. Esto enviará una solicitud desde el cliente web (navegador) del teléfono inteligente o la computadora al servidor ESP8266/ESP32, como se muestra en la imagen a continuación.
En respuesta a la solicitud, el ESP8266/ESP32 envía la página web al cliente web (navegador) del teléfono inteligente/computadora, que se cargará de la siguiente manera.
Tenga en cuenta que un punto de acceso WiFi en ESP8266/ESP32 que utiliza MicroPython no puede funcionar como un repetidor WiFi. MicroPython no admite enrutamiento NAT o IP.