GNU/Linux >> Tutoriales Linux >  >> Linux

Desarrolle aplicaciones de red para ESP8266 usando Mongoose en Linux

Hablemos sobre cómo comenzar a desarrollar aplicaciones de red para el chip ESP8266 utilizando Mongoose Embedded Web Server en Linux. Usaré Ubuntu, pero todo se puede adaptar fácilmente para cualquier distribución de Linux.

Quien es quien

Dado que comenzó a leer este artículo, asumo que conoce Linux, ESP8266 y Mongoose. Así que solo una breve introducción.

ESP8266

Chip económico con WiFi integrado, desarrollado por Expressif. Si desea profundizar en más detalles, consulte el sitio oficial.

Mangosta

Mongoose es una biblioteca multiprotocolo completa con un núcleo de menos de 40kB desarrollada por Cesanta. Encuentre información sobre el modo en el sitio de Cesanta.

Linux

¿En serio? :-)

Conectando ESP8266 a su computadora

Bien, lo primero que debemos hacer es conectar el chip ESP8266 a su computadora. Puedes hacerlo de varias formas.

NodeMCU

Si tiene un módulo NodeMCU, con un convertidor UART a USB incorporado, todo lo que tiene que hacer es conectar el módulo a la computadora a través de USB. ¡BESO!

Conexión con convertidor UART-USB externo

Si su módulo ESP no tiene un convertidor UART-USB interno, necesita uno externo. Hay un montón de ellos, solo búscalo en Google.

Seleccione uno que funcione con Linux (básicamente, la mayoría de ellos) y tenga un pin de 3,3 V y recuerde:la mayoría de los convertidores UART-USB tienen pines para 3,3 V y 5 V, pero no debe conectar ESP a pines de 5 V. Este dispositivo no es tolerante al voltaje y es posible quemar su módulo.

Ahora conecte (ESP -> Convertidor):

CCV -> 3,3 V

TIERRA -> TIERRA

RX0 -> TX (no RX)

TX0 -> RX

CH_PD -> 3,3 V

Conectando con Arduino

Si no tiene un convertidor UART-USB, pero tiene Arduino con pines de 3,3 V, puede usarlo fácilmente para conectar ESP:

  1. Conecte Arduino a la computadora a través de USB
  2. Conecte el RESET de Arduino a su GND:es necesario para deshabilitar el procesador host, porque solo necesitamos el módulo UART-USB
  3. Conectar ESP (ESP -> Arduino)
    1. VCC -> 3,3 V
    2. TIERRA -> TIERRA
    3. RX0 -> RX0 (no TX)
    4. TX0 -> TX
    5. CH_PD -> 3,3 V

Verificando conexión

Si su conexión está bien, ESP debería aparecer como un nuevo dispositivo tty. Por lo general, NodeMCU y ESP conectados a través del convertidor UART-USB aparecen como /dev/ttyUSBx (x =0, 1, 2, etc.) y la versión de Arduino aparece como /dev/ttyACMx (x =0, 1, 2, etc.)

Puede usar el comando dmesg | grep usb para encontrar su dispositivo.

Por ejemplo, después de la conexión de NodeMCU, verá algo así:

 

[  1496.765417] usb 2-3.3: new full-speed USB device number 15 using xhci_hcd
[ 1496.867729] usb 2-3.3: New USB device found, idVendor=10c4, idProduct=ea60
[ 1496.867736] usb 2-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1496.867740] usb 2-3.3: Product: CP2102 USB to UART Bridge Controller
[ 1496.867743] usb 2-3.3: Manufacturer: Silicon Labs
[ 1496.867745] usb 2-3.3: SerialNumber: 4202
[ 1497.900384] usbcore: registered new interface driver usbserial
[ 1497.900423] usbcore: registered new interface driver usbserial_generic
[ 1497.900457] usbserial: USB Serial support registered for generic
[ 1497.903897] usbcore: registered new interface driver cp210x
[ 1497.903989] usbserial: USB Serial support registered for cp210x
[ 1497.904382] usb 2-3.3: cp210x converter now attached to ttyUSB0

Como puede ver, NodeMCU ahora está disponible como /dev/ttyUSB0 .

Como verificación final, use cualquier terminal para conectarse a un nuevo dispositivo; Voy a usar picocom. Este es un terminal ligero. En Ubuntu se puede instalar con: 

sudo apt install picocom

Intentando:

picocom /dev/ttyUSB0 -b 115200

Si todo está bien, debería ver "Terminal lista ” en la salida picocom.

Reparación del error "Acceso denegado"

Si picocom dice "Acceso denegado", eso generalmente significa que el usuario actual no es miembro del dialout grupo:en Linux, para acceder a los puertos serie, el usuario debe ser miembro de este grupo.

Ejecutar:

sudo usermod -aG docker $USER

comando, cierre sesión, vuelva a iniciar sesión e intente conectar ESP nuevamente. "Acceso denegado" debería desaparecer.

Construcción de mangostas

Descargue la última versión de Mongoose desde aquí.

Mongoose se envía con un ejemplo para ESP8266 y RTOS SDK. Se encuentra aquí en GitHub.

Nota:ESP8266 tiene dos versiones de SDK. El primero no es un sistema operativo y el segundo está basado en RTOS. En este artículo usaré este último. Para encontrar las diferencias entre ellos, busca en Google o lee esta respuesta en el foro oficial.

Para construir el ejemplo tienes dos opciones:

  1. Usar docker e imágenes docker listas para usar
  2. Instala el SDK y la cadena de herramientas en tu computadora

Usando Docker

Esto es más simple y creo que la mejor manera. Las imágenes acoplables de Cesanta contienen todo lo que necesita para compilar Mongoose para ESP (y no solo Mongoose, cualquier aplicación ESP). Por lo tanto, no necesita instalar cosas localmente y puede compartir fácilmente su código con amigos y colegas para que puedan construir su firmware y obtener exactamente el mismo resultado.

La guía de instalación de la ventana acoplable está disponible aquí. Pruébalo, es muy sencillo, solo necesitas añadir el repositorio docker a tu Linux e instalarlo como un programa habitual con apt .

Una vez que Docker esté instalado, vaya a la carpeta mongoose/examples/ESP8266_RTOS y ejecute build.sh

En la primera ventana acoplable de compilación, se descargará la imagen requerida. Puede tomar un tiempo, dependiendo de su canal de Internet. Pero, una vez que se complete build.sh en la carpeta ./bin, encontrará dos archivos .bin.

Ese es el firmware. ¡Tú hiciste esto!

Uso del SDK local

Si docker es demasiado simple para usted o por alguna razón desea usar herramientas instaladas localmente, también puede hacerlo.

Es un poco más difícil y aburrido, pero nada demasiado complicado. Especialmente, dado que Cesanta creó algunas herramientas para usted y no necesita compilarlas desde la fuente.

Así es como funciona:

  1. Clonar ESP RTOS SDK de este repositorio. El archivo MAKE de ejemplo lo busca en la carpeta /opt/ESP8266_RTOS_SDK, por lo tanto, puede colocar un repositorio clonado en esta carpeta o modificar la ruta antes de compilar el ejemplo (consulte a continuación).
  2. Descargue xtensa-lx106-elf.tar.bz2 desde esta carpeta pública.
  3. Descomprima el archivo xtensa-lx106-elf.tar.bz2. Por ejemplo, a la carpeta /opt:

    sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt

  4. Modifique su variable PATH, por ejemplo, si descomprimió la cadena de herramientas en la carpeta /opt, use el siguiente comando:

    exportar PATH=/opt /xtensa-lx106-elf/bin:$RUTA

(También recomendaría agregar este comando a sus carpetas .bashrc o .profile, para mantener los cambios después de reiniciar el sistema)

Ahora ejecuta:

$ export SDK_PATH=/opt/ESP8266_RTOS_SDK  # Put your path to SDK here
$ export BIN_PATH=./bin; mkdir ./bin
$ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=0

Y ahora, si todo está instalado correctamente, tendrás el firmware en ./bin carpeta

¡Lo hiciste de nuevo!

ESP intermitente

Hay muchas herramientas disponibles para flashear ESP8266. Vamos a utilizar esptool . Para usarlo, clone este repositorio y agregue la ruta a esptool.py en su variable PATH (esto es opcional y conveniente).

Ahora, desconecte picocom, si aún está conectado (Sugerencia:presione Ctrl+A; Ctrl+D para salir) y ejecute:

esptool.py --port /dev/ttyUSB0 --baud 230400 \
   write_flash --flash_mode=dio --flash_size=4m \
   0x00000 ${BIN_PATH}/eagle.flash.bin \
   0x20000 ${BIN_PATH}/eagle.irom0text.bin \
   0x7e000 ${SDK_PATH}/bin/esp_init_data_default.bin

Nota importante: si su módulo no es un NodeMCU, debe conectar a tierra GPIO0 antes de parpadear (conectar a tierra GPIO0 cambia el módulo al modo intermitente). Después de parpadear, desconecte GPIO0 de tierra y reinicie ESP.

Si no se produjeron errores, verá el resultado como este:

Connecting...

Erasing flash...

Took 0.58s to erase flash block

Wrote 35840 bytes at 0x00000000 in 1.8 seconds (157.5 kbit/s)...

Erasing flash...

Took 2.02s to erase flash block

Wrote 301056 bytes at 0x00020000 in 15.4 seconds (156.7 kbit/s)...

Erasing flash...

Took 0.11s to erase flash block

Wrote 1024 bytes at 0x0007e000 in 0.1 seconds (163.5 kbit/s)...

Leaving…

¡Listo! Ahora el dispositivo está flasheado con su firmware.

Primeros resultados

Ahora debería ver aparecer una red WiFi "Mongoose". El ejemplo configura un AP. Use la contraseña "Mongoose" para conectarse, luego navegue a http://192.168.4.1/ y verá una página de saludo "Hola, mundo".

¡Felicidades! ¡Simplemente ejecuta Web Server en ESP8266!

Siguientes pasos

Los próximos pasos dependen de usted. Puede utilizar el ejemplo descrito como punto de partida.

Mire a su user_main.c expediente. Configura un punto de acceso WiFi e inicia el servidor web. Puede cambiar fácilmente el modo AP a un modo de estación (y conectarse a su red WiFi) y usar la API de Mongoose para implementar lo que desee. Esta es una forma común de usar Mongoose, por lo que puede usar otro ejemplo de Mongoose para construir su programa y tener http, tcp, udp, mqtt y más funciones en su dispositivo ESP.

Use los documentos de Espressif (por ejemplo, este) para aprender a controlar el módulo WiFi ESP8266 (y no solo WiFi) y la documentación de Mongoose para descubrir las funciones de Mongoose.

¡Los punks no están muertos!


Linux
  1. Uso de AppImage para la administración de paquetes de Linux

  2. Uso de at para trabajos cron de un solo uso en Linux

  3. Guía completa para usar AsciiDoc en Linux

  4. Uso de la herramienta SS para la resolución de problemas de red

  5. Linux:¿cómo dejar de compartir la red para el proceso actual?

Cómo limitar el ancho de banda de la red en Linux usando Wondershaper

Mostrar información de red en Linux usando la herramienta What IP

Cree un USB de arranque persistente usando Ventoy en Linux

Uso de ifstat para estadísticas de red de Linux

DEFT Linux Una distribución de Linux para informática forense

¿Cómo desarrollar aplicaciones OpenGL ES (GLES) 2.0 en Linux?