Compilar una versión moderna de NodeMCU (Lua) para ESP8266
En Mi IoT ha muerto: Cómo actualizar una instalación LUA sobre ESP8266 para que sea compatible con TLS 1.2 explico que he tenido que compilar una versión nueva de NodeMCU (Lua) para un ESP8266.
Tengo el tema olvidado porque ahora utilizo MicroPython y microcontroladores más capaces, como ESP32 o RP2040 (Raspberry Pi Pico). En su momento usaba una zona SmartOS con personalidad Debian para estas cosas, pero en 2024 hay opciones más sencillas.
El procedimiento que yo he usado está documentado en el manual de NodeMCU y usa Docker: https://github.com/marcelstoer/docker-nodemcu-build.
Los cambios que he hecho:
-
Activamos TLS en el fichero app/include/user_config.h:
--- ./app/include/user_config.h 2024-03-09 22:20:12.734890601 +0100 +++ ./app/include/user_config.h.JCEA 2024-03-09 22:04:12.953110317 +0100 @@ -126,7 +126,7 @@ // The SHA1 and MD5 function are implemented in the ROM BIOS. The MD2 and SHA2 // are by firmware code, and can be enabled if you need this functionality. -#define CLIENT_SSL_ENABLE +//#define CLIENT_SSL_ENABLE #define SHA2_ENABLE #define SSL_BUFFER_SIZE 4096 #define SSL_MAX_FRAGMENT_LENGTH_CODE MBEDTLS_SSL_MAX_FRAG_LEN_4096
-
Activamos diversos módulos que queremos en nuestro firmware, en el fichero app/include/user_modules.h:
--- ./app/include/user_modules.h.JCEA 2024-03-09 22:01:30.597481337 +0100 +++ ./app/include/user_modules.h 2024-03-09 22:03:55.417150499 +0100 @@ -15,16 +15,16 @@ #define LUA_USE_MODULES_BIT //#define LUA_USE_MODULES_BLOOM //#define LUA_USE_MODULES_BMP085 -//#define LUA_USE_MODULES_BME280 -//#define LUA_USE_MODULES_BME280_MATH +#define LUA_USE_MODULES_BME280 +#define LUA_USE_MODULES_BME280_MATH //#define LUA_USE_MODULES_BME680 //#define LUA_USE_MODULES_COAP //#define LUA_USE_MODULES_COLOR_UTILS //#define LUA_USE_MODULES_CRON -//#define LUA_USE_MODULES_CRYPTO +#define LUA_USE_MODULES_CRYPTO //#define LUA_USE_MODULES_DCC #define LUA_USE_MODULES_DHT -//#define LUA_USE_MODULES_ENCODER +#define LUA_USE_MODULES_ENCODER //#define LUA_USE_MODULES_ENDUSER_SETUP // USE_DNS in dhcpserver.h needs to be enabled for this module to work. #define LUA_USE_MODULES_FILE //#define LUA_USE_MODULES_GDBSTUB @@ -32,39 +32,39 @@ //#define LUA_USE_MODULES_GPIO_PULSE //#define LUA_USE_MODULES_HDC1080 //#define LUA_USE_MODULES_HMC5883L -//#define LUA_USE_MODULES_HTTP -//#define LUA_USE_MODULES_HX711 +#define LUA_USE_MODULES_HTTP +#define LUA_USE_MODULES_HX711 #define LUA_USE_MODULES_I2C //#define LUA_USE_MODULES_L3G4200D //#define LUA_USE_MODULES_MCP4725 -//#define LUA_USE_MODULES_MDNS +#define LUA_USE_MODULES_MDNS #define LUA_USE_MODULES_MQTT #define LUA_USE_MODULES_NET #define LUA_USE_MODULES_NODE #define LUA_USE_MODULES_OW -//#define LUA_USE_MODULES_PCM +#define LUA_USE_MODULES_PCM //#define LUA_USE_MODULES_PERF //#define LUA_USE_MODULES_PIPE //#define LUA_USE_MODULES_PIXBUF -//#define LUA_USE_MODULES_PWM +#define LUA_USE_MODULES_PWM //#define LUA_USE_MODULES_PWM2 //#define LUA_USE_MODULES_RFSWITCH //#define LUA_USE_MODULES_ROTARY -//#define LUA_USE_MODULES_RTCFIFO -//#define LUA_USE_MODULES_RTCMEM -//#define LUA_USE_MODULES_RTCTIME +#define LUA_USE_MODULES_RTCFIFO +#define LUA_USE_MODULES_RTCMEM +#define LUA_USE_MODULES_RTCTIME //#define LUA_USE_MODULES_SI7021 -//#define LUA_USE_MODULES_SIGMA_DELTA -//#define LUA_USE_MODULES_SJSON -//#define LUA_USE_MODULES_SNTP +#define LUA_USE_MODULES_SIGMA_DELTA +#define LUA_USE_MODULES_SJSON +#define LUA_USE_MODULES_SNTP //#define LUA_USE_MODULES_SOFTUART //#define LUA_USE_MODULES_SOMFY #define LUA_USE_MODULES_SPI -//#define LUA_USE_MODULES_STRUCT +#define LUA_USE_MODULES_STRUCT //#define LUA_USE_MODULES_SWITEC //#define LUA_USE_MODULES_TCS34725 //#define LUA_USE_MODULES_TM1829 -//#define LUA_USE_MODULES_TLS +#define LUA_USE_MODULES_TLS #define LUA_USE_MODULES_TMR //#define LUA_USE_MODULES_TSL2561 #define LUA_USE_MODULES_UART
-
A la hora de lanzar el Docker tengo problemas de red por configuraciones particulares mías, así que el comando que utilizo es diferente:
jcea@jcea:/tmp/ram/0/nodemcu-firmware$ docker run --network host \ --rm -ti -v \ `pwd`:/opt/nodemcu-firmware marcelstoer/nodemcu-build build
La diferencia en mi comando es el parámetro --network host.