MicroPython es uno de los mejores firmware de microcontroladores que admite una variedad de plataformas integradas. Las placas de desarrollo WiFi como ESP8266 y ESP32 se encuentran entre los puertos compatibles con MicroPython. Con MicroPython, es extremadamente sencillo implementar aplicaciones de IoT de alto nivel. MicroPython tiene un amplio soporte para la programación de redes además de implementar todas las funciones básicas de hardware. Combina soporte de hardware de bajo nivel con capacidades de programación de alto nivel, de las que a menudo carecen los ecosistemas de microcontroladores integrados basados en C. Además, la sintaxis de Python hace que la programación integrada sea súper simple, limpia y precisa.
En este proyecto, desarrollaremos una estación meteorológica en línea configurada en ESP8266/ESP32. El proyecto utiliza ESP8266 como microcontrolador, obteniendo lecturas de sensores del DHT-11 y, al mismo tiempo, se beneficia de las funciones de programación de red de MicroPython para conectarse y operar dentro de una red IoT. Esta estación meteorológica funciona dentro de los límites de una LAN inalámbrica y transmite temperatura y humedad como un servidor TCP funcional dentro de la red.
Requisitos previos
Antes de continuar, debe haber configurado uPyCraft IDE o Thonny IDE como su entorno de desarrollo de software. Además, debe haber cargado el firmware MicroPython para ESP8266/ESP32. Puede encontrar una guía para ambas tareas en este enlace. Para realizar este proyecto, debes saber cómo conectar ESP8266/ESP32 a una red WiFi usando MicroPython. También necesita saber cómo configurar ESP8266/ESP32 como un servidor TCP MicroPython.
Componentes necesarios
- ESP8266/ESP32x1
- Cable USB para conectar ESP a la computadora
- DHT11x1
- Placa de pruebas x1
- Cables de conexión/cables de puente
- Computadora/Móvil x1
Conexiones de circuito
En este proyecto, ESP8266/ESP32 actúa como un servidor TCP que aloja una página HTML simple. El sensor DHT11 está interconectado con ESP8266/ESP32. La placa lee la temperatura y la humedad del DHT11 y publica las lecturas en la página alojada. Las conexiones del circuito solo son necesarias para conectar el DHT11 con el ESP8266/ESP32. DHT11 tiene el siguiente diagrama de pines.
Para obtener más información sobre el sensor DHT11, consulte este tutorial de Arduino. Para interconectar el DHT11 con el ESP8266, conecte los pines VCC y GND del DHT11 con 3V y GND del ESP8266. Conecte el pin de datos de DHT11 con cualquier GPIO de ESP8266. En este proyecto, el pin de datos de DHT11 está conectado a GPIO14 (D5) de ESP8266. El pin de datos se eleva conectando una resistencia de 10K entre la salida de datos y VCC.
Si se usa ESP32, D14 es el GPIO14 en el ESP32. ESP32 tendrá las siguientes conexiones de circuito.
Después de las conexiones del circuito, el servidor TCP ESP8266 tendría el siguiente aspecto.
Secuencia de comandos MicroPython
Cómo funciona el proyecto
Esta estación meteorológica en línea basada en ESP8266/ESP32 lee la temperatura y la humedad del sensor DHT11 y publica las lecturas en una página web en tiempo real. La página está alojada en el propio ESP8266/ESP32, para lo cual la placa está configurada como un servidor TCP. A la página se puede acceder desde cualquier dispositivo, computadora o teléfono celular que cuente con un navegador para acceder a internet mediante el protocolo HTTP. La página web está alojada localmente en la LAN inalámbrica, por lo que solo los dispositivos conectados a la misma conexión WiFi pueden acceder a la página web.
El funcionamiento del proyecto es sencillo. La placa lee la temperatura y la humedad del DHT11 utilizando el módulo DHT integrado de MicroPython. La placa se conecta a una conexión WiFi disponible mediante el módulo de red MicroPython. Para alojar una página web y operar como servidor TCP, se utiliza el módulo de socket MicroPython. ESP8266/ESP32 lee la temperatura y la humedad e incorpora las lecturas en la página web. La página web se devuelve como una respuesta HTTP a cualquier dispositivo que acceda a la dirección IP del host local.
Código
El código comienza importando un módulo Usocket. Si el módulo ausocket no está disponible, se importa el módulo de socket predeterminado. Luego se importan el módulo de red, la clase de pin del módulo de máquina y el módulo DHT. El módulo de red se utiliza para conectarse a una conexión WiFi. La clase de pin del módulo de la máquina se utiliza para interactuar con el sensor DHT11. El módulo dht se utiliza para obtener lecturas de DHT11. El módulo esp se importa y los errores a nivel del sistema operativo se suprimen llamando al método esp.osdebug(None). El módulo gc se importa y la recolección de basura se habilita llamando al método gc.collect. Esto libera recursos del microcontrolador (RAM) para que no se utilicen variables ni objetos.
El SSID y la clave de red de la conexión WiFi disponible se almacenan en las variables SSID y contraseña. Deberá reemplazar el SSID y la contraseña de WiFi con el SSID y la clave de red de su propia conexión WiFi en las siguientes líneas de código.
ssid = 'SSID'
contraseña = 'CONTRASEÑA'
Se crea una instancia de un objeto de clase network.WLAN, configurando el ESP8266/ESP32 como una estación WiFi. El ESP8266/ESP32 como estación WiFi se activa llamando al método station.active. La tarjeta se conecta a una conexión WiFi disponible llamando al método station.connect. La conexión a la red WiFi se comprueba llamando a station.isconnected. Después de una conexión exitosa a la red WiFi, se imprime un mensaje en la consola y los parámetros de configuración de nivel IP también se imprimen en la consola llamando al método station.ifconfig. El primer parámetro de nivel de IP impreso en la consola es la dirección IP de la estación ESP8266/ESP32.
Se declara un sensor variable para crear una instancia del objeto de clase DHT. Las variables de temperatura y zumbido se declaran para almacenar lecturas de temperatura y humedad. Se define una función read_dht definida por el usuario para obtener lecturas de temperatura y humedad de DHT11. La función llama al método Medir para obtener lecturas del sensor DHT11. Utiliza los métodos de temperatura y humedad para obtener valores de temperatura y humedad respectivamente como flotantes o enteros. Los valores de temperatura y humedad se devuelven en las variables globales temp y hum, respectivamente.
Se define una función web_page definida por el usuario para devolver una página HTML con valores de temperatura y humedad almacenados en las variables globales temp y hum incrustadas en la página HTML. Se crea una instancia de un objeto de la clase socket y se configura para usar la dirección IPv4 y TCP para el protocolo de capa de red. El objeto está vinculado a la dirección del host local mediante el método de vinculación y habilitado para escuchar a los clientes TCP llamando al método de escucha.
Se inicia un bucle while infinito. En el bucle, el servidor TCP ESP8266/ESP32 está configurado para aceptar solicitudes HTTP de clientes TCP en la misma red WiFi llamando al método s.connect. Las solicitudes HTTP de un cliente TCP conectado se almacenan en una variable de solicitud llamando al método conn.recv. El mensaje que contiene las lecturas de temperatura y humedad se imprime en la consola y la página web que contiene los valores de temperatura y humedad incrustados se devuelve como respuesta llamando a los métodos conn.send y conn.sendall. Después de devolver la página web como respuesta, la conexión con el cliente TCP se cierra explícitamente llamando al método conn.close.
Resultado
Se accede a la página web con lecturas de temperatura y humedad del sensor DHT11 escribiendo la dirección IP devuelta por el método station.ifconfig en la barra de direcciones de cualquier navegador. El servidor TCP ESP8266/ESP32 que funciona como una estación meteorológica en línea devuelve una página web personalizada en respuesta a una solicitud HTTP desde su computadora/navegador móvil. La siguiente captura de pantalla muestra la página devuelta por la estación meteorológica en línea ESP8266/ESP32.
Recuerde que la estación meteorológica ESP8266/ESP32 aloja la página localmente, por lo que solo pueden acceder a la página dispositivos conectados a la misma conexión WiFi que ESP8266/ESP32 utiliza la dirección IP del host local como dirección IP del servidor web.