ESPTOOL.EXE en windows XP x32

¿Quien usa ya Windows XP? Es un sistema operativo de 2001, tiene una antigüedad de más de 20 años, y Microsoft dejó de darle soporte hace 10 años, en 2014… Pero para algunos programas o para hardware antiguo sigue siendo necesario.

El caso es que necesito la herramienta esptool de expresiff https://github.com/espressif/esptool/releases que corra en Windows XP de 32 bits. Esta herramienta sirve para programar los chips ESP32 por puerto serie. Suelo proporcionar a mis clientes un script que llama a esptool.exe con los parámetros adecuados para programar los chips con el firmware que proporciono.

En este caso, el cliente tiene en el taller de verificación y control de calidad un antiguo PC con Windows XP x32 que utiliza para probar y programar dispositivos antiguos, es la herramienta que quiere utilizar también con mis programas.

Desgraciadamente esptool.exe sólo existe para Windows 7 y superiores. Expresiff lo proporciona escrito en python https://www.python.org/, aunque existen versiones ejecutables independientes construidas usando el compilador de python a .exe pyinstaller: https://pyinstaller.org/en/stable/.

En principio parece fácil: instalo python y pyinstaller en una máquina de Windows XP, cargo esptool.py y lo compilo. Pero la práctica es algo más dificil por problemas de compatibilidad de las herramientas de compilación con el antiguo Windows XP. Aquí voy a describir cómo instalar las versiones adecuadas de cada herramienta o librería para la compilación bajo Windows XP SP3 de 32 bits:

En primer lugar necesito una versión del intérprete de python que corra en Windows XP… pero que también sea compatible con pyinstaller. Las versiones posibles serían phthon 2.7.9 y la 3.4.4 según comentan en https://stackoverflow.com/questions/47516712/what-versions-of-python-will-work-in-windows-xp. Pero lo mejor sería una versión superior a 3.5 por compatibilidad con pyinstaller, pero no funcionaría en Windows XP, sólo en versiones superiores de Windows. Por suerte python se distribuye en código fuente y es posible modificarlo y recompilarlo para adaptarlo. Eso ya lo ha hecho «Zorba the Geek» y lo ha publicado en este hilo: una versión modificada de python 3.8.13 para Windows XP SP3: https://msfn.org/board/topic/183741-python-3813-for-windows-xp-sp3/page/4/

En la máquina con Windows XP copio «Python 3.8.1350.7z» y lo descomprimo a «c:\python_». A continuación ejecuto el instalador «c:\python_\install c:\». No funciona!. Es necesaria una librería .dll. Es necesario instalar previamente «vc2015_redist.x86.exe», que todavía puede descargarse de la página de microsoft: https://www.microsoft.com/es-es/download/details.aspx?id=53840. Entonces sí funciona la instalación de python, que creará un directorio «c:\python38». Ya puede borrarse el instalador en «c:\Python_».

Ahora hay que configurar el python para compilar esptool, esto se hace desde línea de comandos (abrir un CMD con Win+R y ejecutar CMD).

Instalar PIP (esta línea instalará PIP 22.0.4):
C:\Python38\python -m ensurepip --default-pip

Instalar intelhex (esta línea instalará intelhex 2.30):
C:\Python38\python -m pip install intelhex

Instalar pyserial en la versión compatible con pyinstaller y esptool (3.0.1):
C:\Python38\python -m pip install pyserial==3.0.1

Instalar pyinstaller en la versión compatible con windows XP y esptool 4.10):
C:\Python38\python -m pip install pyinstaller==4.10

Instalar wheel:
C:\Python38\python -m pip install wheel

Actualizar el entorno (actualiza setuptools de 56.0.0 a 69.1.1 y pip de 22.0.4 a 24.0.4):
C:\Python38\python -m pip install --upgrade pip setuptools wheel

A continuación es necesario salir de la consola con EXIT y reiniciar la máquina. Si no no carga algunas variables de entorno que se necesitan para el correcto funcionamiento de python y se producen errores raros de paths no encontrados etc.

Descargar la última versión del código fuente de esptool (esptool-4.7.0.zip) de https://github.com/espressif/esptool/archive/refs/tags/v4.7.0.zip y descomprimirlo en «c:\esptool_». Ahora bastaría con compilarlo con pyinstaller. Para mi sorpresa, una vez compilado correctamente, al ejecutarlo conectado correctamente a un ESP32 falla después de iniciar la comunicación correctamente, al no encontrar unos ficheros .json «esptool/targets/stub_flasher/*.json». Parece que no se han incluido en el proceso de compilación. Después de mucho tiempo buscando el problema sólo encuentro una pista, cómo no en stackoverflow, https://stackoverflow.com/questions/41870727/pyinstaller-adding-data-files

El comando correcto para compilar con TODOS los ficheros necesarios es:
cd c:\esptool_
pyinstaller -F --add-data "c:/esptool_/esptool/targets/stub_flasher/*.json;esptool/targets/stub_flasher/" --onefile esptool.py   

Esto debe dejar el ejecutable «esptool.exe» en «C:\esptool_\dist».

Como internet es efímero, dejo aquí el ejecutable compilado y la versión de python personalizada:

El ejecutable esptool.exe para Windows XP ya compilado:

La versión de «Zorba the Geek» de python3 para Windows XP: