2020/06/24

Primer contacto con ESP8266

En el marco de la cursada de CEIoT, en mi trabajo práctico que cuando termine compartiré, debo implementar unos sensores y actuadores con un microcontrolador. Ya he hecho algo parecido con una EDU-CIAA-NXP en germinómetro con SAPI y ando en regular la velocidad de unos coolers con un ATMega328p con ArduinoIDE  uno de estos días.
 



Esta vez debo agregarle conexión por WiFi y MQTT y aunque la EDU-CIAA-NXP con un módulo WiFi ESP-01 me serviría, prefiero algo más compacto. Además mi idea es instalar muchos más y la EDU-CIAA-NXP es un poco carita y me sirve para otras cosas.

El ATMega328p está regalado en términos de precio pero tambien tengo que agregarle un modulo WiFi ESP-01 y armar la placa, quizás más adelante.

Decidí usar una ESP-12x con FreeRTOS, relato acá mis desventuras para regocijo y utilidad tuya.

Lo primero es comprender qué es, por que miré bastante por ahí y hallé que hay un plugin para ArduinoIDE, que hay algo de Lua, que hay un firmware.

Si vas al sitio que dice el chip http://en.doit.am/, es todo un ecosistema y por más que sean los Doctors of Intelligence & Technology, no lo son de UX.

Hay dos links interesantes, LuaNode y en el desplegable NodeMCU, NodeMCU Start, vamos por el segundo, que nos lleva a https://smartarduino.gitbooks.io/user-manual-for-esp-12e-devkit/content/ que dice:

ESP-12E DevKit is already built-in Lua fireware with AP mode y que te tiene que aparecer un Access Point con una clave 12345678, triste, y una IP donde se supone que hay un servidor que te permite prender y apagar los leds.

Mmmh, ¿será esto lo que viene precargado como firmware? Parecido, la red se llama ESP_3d3d65, no tiene clave, me asigna la ip 192.168.4.3 y nadie escucha en 192.168.4.1.

Tengo otro microcontrolador de otra compra, los resultados son similares, tenemos un Access Point sin alma.

De todos modos no me interesa, como diría la Zorra al no alcanzar las Uvas.

Si vamos por el link de LuaNode, llegamos a https://github.com/Nicholas3388/LuaNode, que sin ser ninguna Zorra esta vez, me puede llegar a interesar otro día, hoy no por que no es mi camino de FreeRTOS.

Por el lado de ArduinoIDE, https://naylampmechatronics.com/blog/56_usando-esp8266-con-el-ide-de-arduino.html nos muestra como hacer el blinky pero antes aclara un poco el ecosistema esp8266, no lo voy a repetir acá, tambien está en https://en.wikipedia.org/wiki/ESP8266, que es donde debí haber comenzado, pero no sé por qué se me ocurrió tomar este acercamiento tangencial.

Finalmente, http://esp8266.net/, de ahí a:

git clone https://github.com/espressif/ESP8266_RTOS_SDK.git

El README.md dice de bajar la toolchain, luego vas al hello world, hacés make menuconfig, que te dice que te faltan un montón de cosas

~/ESP8266_RTOS_SDK/examples/get-started/hello_world$ make
...
setuptools
click>=5.0
pyserial>=3.0
future>=0.15.2
cryptography>=2.1.4
pyparsing>=2.0.3,<2.4.0
pyelftools>=0.22
...

y sugiere y acepto ejecutar:

/usr/bin/python -m pip install --user \
-r /home/ceiot/Desktop/ESP8266_RTOS_SDK/requirements.txt

pero antes

sudo apt install python-pip python-setuptools

Ahora make dice que falta curses.h, no problemo,

sudo apt install libncurses5-dev

falta gperf...

sudo apt install gperf

Y por fin..


esp_rtos_sdk


¡Esto se va a descontrolar! Hacía como diez o quince años que no veía uno de estos diálogos así, cuando tenía que compilar el kernel. En realidad que no interactuaba, estoy seguro que para algo de algún embebido vi algo el año pasado.


Y ahora make, que falla por que no encontró xtensa-lx106-elf-gcc, completamente razonable pues a esos paths que se mencionan no tienen nada que ver, les debe haber quedado la documentación sin actualizar, no importa, buscás donde descomprimiste:

export PATH=/home/ceiot/Desktop/xtensa-lx106-elf/bin:$PATH

Si te encontrás con estos errores, metiste la pata igual que yo, frená un momento y pensá...


ESP8266_RTOS_SDK/components/esp8266/driver/ir_rx.c: In function 'ir_rx_intr_handler': 
ESP8266_RTOS_SDK/components/esp8266/driver/ir_rx.c:59:5: error: missing braces around
 initializer [-Werror=missing-braces]
      static ir_rx_nec_data_t ir_data = {0};

que está reportado en https://github.com/espressif/ESP8266_RTOS_SDK/issues/761. Se "arregla" con:

static ir_rx_nec_data_t ir_data = {{0}}; 


Y ahí te das cuenta que te faltó un:

git checkout release/v3.3

para lo cual tenés que reclonear por que choca con los git pull sobre los components.

Y sigue sin funcionar, ahora dice:


ESP8266_RTOS_SDK/components/esp8266/source/esp_err_to_name.c:391:29: error: unknown type name 'esp_err_t'
 const char *esp_err_to_name(esp_err_t code)

Y finalmente te das cuenta que leiste el README.md de master, no el de release/v3.3 y te bajaste la toolchain equivocada, lo arreglás y ni te molestás en probarlo, te vás directo a:

~ESP8266_RTOS_SDK/examples/protocols/esp-mqtt/tcp$ make menuconfig


En Example configuration, que en la imagen anterior no está, ponés los datos de tu acceso a la WiFi:

Example Configuration  --->  
() WiFi SSID
() WiFi Password
(mqtt://iot.eclipse.org) Broker URL

Luego compilás, flasheas y te colgás del serial:


~ESP8266_RTOS_SDK/examples/protocols/esp-mqtt/tcp$ make all flash monitor
...
Connecting....
Chip is ESP8266EX
Features: WiFi
MAC: cc:50:e3:xx:xx:xx
...

Primer boot



ahí tenés la IP y la MAC y funciona todo ok.

Si no hubiera código mostrando la IP, como en el proceso de flash te dijo la MAC, la podés buscar así:

$arp -a |  grep cc:50
? (192.168.1.110) at cc:50:e3:xx:xx:xx [ether] on enp0s3

Si quisiera usar otro programa de terminal, por algún perverso motivo baudrate es 74880, lo pesqué con un git grep -i baud y probé los valores obtenidos.


Se cambia con make menuconfig  en la opción serial flasher config -> make monitor baud rate


Habiendo tomado el control del hello wold, me doy por satisfecho, cuando reporte el trabajo práctico completo mostraré más detalles, dame unos meses... quizás antes si surge algo interesante.

 


No hay comentarios:

Publicar un comentario