Instalación de ESP-IDF en Ubuntu 22.04 con Python 3.10
Espressif, la empresa detrás de la familia de chips ESP32, publíca su SDK oficial en GitHub bajo el nombre de ESP-IDF, o Espressif IoT Development Framework.
El IDF contiene todas las herramientas necesarias para el trabajo diario, como compiladores, ejemplos, scripts de python para el proceso de desarrollo y gestión de proyectos, así como las librerías o componentes que necesitemos para aprovechar nuestro hardware.
Como todo proyecto, es necesario cumplir ciertos requerimientos antes de instalarlo, para que el proceso pueda realizarse correctamente, en nuestro caso, hemos probado este flujo de instalación en un sistema Ubuntu 22.04 y Python 3.10, en el que pudimos comprobar que todo funciona correctamente.
Pasos de instalación
Para realizar este proceso de instalación, es necesario realizar cinco pasos:
Preparar nuestro sistema con las dependencias necesarias.
Clonar el repositorio de github con la versión del esp-idf que deseamos instalar.
Ejecutar el script de instalación.
Configurar el entorno para cada vez que vayamos a utilizar el esp-idf.
Verificar la instalación.
Instalar las dependencias
El esp-idf utiliza algunas dependencias como cmake y ninja para la compilación de proyectos, las dependencias varían dependiendo del sistema operativo, pero en linux se recomiendan las siguientes: git wget flex bison gperf python3 python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
Por lo tanto, podemos instalarlas con el siguiente comando:
💡 En caso de que surja algún mensaje de error como que no se encontró alguna de las dependencias, puedes asegurarte primero actualizar tu sistema con: sudo apt-get update, y luego volver a intentar con la instalación.
Una vez instaladas las dependencias, vamos a validar que nuestra versión de python es la correcta con el comando:
python3 --version
Clonar el repositorio
Para este curso, vamos a utilizar la última versión estable del IDF, que es la v4.4.2. Por lo tanto, vamos a incluir ese dato al momento de clonar el repositorio. También vamos a pedirle a git que descargue todos los repositorios que son dependencias del IDF, y así contar con ellos durante la instalación, es decir, vamos a indicarle un clon recursivo.
Antes de clonar el repositorio, es recomendable crear una carpeta en la cual instalaremos esta y cualquier otra versión del IDF en el futuro, se recomienda crearla en el home:
# Creamos la carpetamkdir ~/esp
# Nos movemos a ellacd ~/esp
Ya dentro de la carpeta, ejecutamos el comando para clonar el repositorio:
Una vez que termina de clonar el repositorio, tendremos una carpeta llamada esp-idf en nuestro directorio actual, y nos moveremos a ella con cd ~/esp/esp-idf.
Script de instalación
Una vez dentro de la carpeta, podríamos ver que existen varios archivos, como la carpeta de ejemplos y diferentes scripts, primero, vamos a ejecutar el script de instalación.
El comando para ejecutar el script de instalación es:
. ./install.sh
Con esto comenzará la instalación del IDF, descargando y compilando todo lo necesario.
💡 En caso de que el proceso de instalación falle, es necesario verificar que las dependencias se encuentran instaladas y que contamos con una versión de Python mayor a la 3.6, idealmente Python 3.10, pues es el que utilizamos durante las pruebas.
Una vez que termina la instalación, podemos ir al paso final, la configuración del entorno.
Configuración del entorno
Los proyectos generados con el IDF requieren dependencias y versiones muy específicas para funcionar. Es por eso, que entre los scripts, nos incluyen uno llamado export.sh que configura el entorno de la terminal para poder utilizarlos. Sin embargo, esta configuración dura únicamente hasta que se termina la sesión en la terminal, y es por eso que cada vez que vayamos a trabajar debemos volver a ejecutarlo.
El comando para configurar el entorno cada vez que queremos usarlo en la terminal, sería:
. ~/esp/esp-idf/export.sh
Sin embargo, podemos aprovechar los alias de Linux y crear un comando más corto, que podremos utilizar cada vez que sea necesario, para crearlo sería así:
aliasget_idf='. ~/esp/esp-idf/export.sh'
Con esta configuración, tendremos el comando get_idf disponible siempre que abramos la terminal, sin importar la ubicación, y así hacernos la vida más fácil.
Para configurar el entorno en ocasiones posteriores, solamente debemos ejecutar el comando así:
get_idf
Podemos verificarlo abriendo otra terminal y ejecutando el comando.
Cabe mencionar que en teoría es posible agregar esta configuración a la de nuestra terminal para que se ejecute tan solo abrir la terminal. Sin embargo, esto no es recomendable, dado que esto podría causar conflictos con otros programas para otras tareas. Lo mejor de momento, es usar este alias siempre que vayamos a trabajar nuestros proyectos con el IDF.
Verificación de la instalación
Finalmente, ya con nuestro entorno instalado y configurado, podemos verificar nuestra instalación ejecutando el comando:
idf.py --version
Esto debería devolvernos la versión del IDF instalado, en nuestro caso muestra: ESP-IDF v4.4.2
Con todo esto, ya estamos listos para continuar el curso y compilar nuestro primer proyecto, podemos movernos a la carpeta del ejemplo blink, con el comando:
cd ~/esp/esp-idf/examples/get-started/blink
Y realizar la compilación del proyecto con el comando:
idf.py build
Si nuestra instalación es correcta, tomará un tiempo para compilar el proyecto y no mostrará ningún error.
Dejo este link que puede ser de utilidad si no les funciona la instalacion:
Instalar en espd-if en ubuntu 22.04
Hago una pregunta, cual es la opinion acerca de extensiones como platformio en Vscode ?
Puede ser muy útil para gestionar proyectos e instalarlos en diferentes sistemas si todos usan Platformio, para este curso no es el alcance, pero es una gran herramienta, aunque a título personal no me gusta agregar más y más cosas a un proyecto a menos que sean realmente necesarias.
Gracias Profe!
Con el comando de instalación que indican aca, me daba error, sacando de la carpeta.
Con este comando pude hacer la instalación correctamente.
./install.sh esp32
Detecting the Python interpreter
Checking "python3" ...
Python 3.10.0
"python3" has been detected
Checking Python compatibility
Installing ESP-IDF tools
Traceback (most recent call last):
File "/home/jesus/esp/esp-idf/tools/idf_tools.py", line 34, in <module>
import datetime
File "/usr/local/lib/python3.10/datetime.py", line 12, in <module>
import math as _math
ModuleNotFoundError: No module named 'math'
ayuda porfavor
con sudo me sale asi,
jesus@jesus-Aspire-F5-573:~/esp/esp-idf$ sudo ./install.sh esp32
Detecting the Python interpreter
Checking "python3" ...
Python 3.10.0
"python3" has been detected
Checking Python compatibility
Installing ESP-IDF tools
Current system platform: linux-amd64
Selected targets are: esp32h4, esp32s2, esp32s3, esp32c2, esp32c6, esp32, esp32h2, esp32c3
Installing tools: xtensa-esp-elf-gdb, riscv32-esp-elf-gdb, xtensa-esp32-elf, xtensa-esp32s2-elf, xtensa-esp32s3-elf, riscv32-esp-elf, esp32ulp-elf, openocd-esp32, esp-rom-elfs
Skipping xtensa-esp-elf-gdb@12.1_20221002 (already installed)
Skipping riscv32-esp-elf-gdb@12.1_20221002 (already installed)
WARNING: directory for tool xtensa-esp32-elf version esp-12.2.0_20230208 is present, but tool was not found
Installing xtensa-esp32-elf@esp-12.2.0_20230208
file xtensa-esp32-elf-12.2.0_20230208-x86_64-linux-gnu.tar.xz is already downloaded
WARNING: destination path already exists, removing
Extracting /root/.espressif/dist/xtensa-esp32-elf-12.2.0_20230208-x86_64-linux-gnu.tar.xz to /root/.espressif/tools/xtensa-esp32-elf/esp-12.2.0_20230208
Traceback (most recent call last):
File "/home/jesus/esp/esp-idf/tools/idf_tools.py", line 2660, in <module>
main(sys.argv[1:])
File "/home/jesus/esp/esp-idf/tools/idf_tools.py", line 2652, in main
action_func(args)
File "/home/jesus/esp/esp-idf/tools/idf_tools.py", line 1909, in action_install
tool_obj.install(tool_version)
File "/home/jesus/esp/esp-idf/tools/idf_tools.py", line 838, in install
unpack(archive_path, dest_dir)
File "/home/jesus/esp/esp-idf/tools/idf_tools.py", line 360, in unpack
archive_obj = tarfile.open(filename, 'r:xz')
File "/usr/local/lib/python3.10/tarfile.py", line 1633, in open
return func(name, filemode, fileobj, **kwargs)
File "/usr/local/lib/python3.10/tarfile.py", line 1737, in xzopen
raise CompressionError("lzma module is not available") from None
tarfile.CompressionError: lzma module is not available
ayuda porfavor tengo todo el dia sin poderlo resolver
Prueba intalar la version 5, y copia los comandos que esten en la documentacion oficial siguiendo este tutorial eso me funciono e ubuntu 22.04.
Talvez te pueda servir
me da error como verifico dependencias?
Me ayudaría más saber qué errores te da, pero puedes intentar instalar cada dependencia por separado y así ver cuál es la que falla.
Al principio intenté con la última versión de la guia Ubuntu 22 * Python 3.11 pero tuve problemas con las libreria curses (Lo extraño es que es un error común en windows según investigué). Luego, usé exactamente la versión recomendada (v4.4.2) con Ubuntu 22.04 y Python 3.10 y todo funcionó 🚀
Al igual que yo, muchas personas tienen problemas con la instalacion. Uso Manjaro Linux, una distro basada en Arch y lo solucioné siguiendo la guia de Espressif.
.
Creo que el error está en la versión seleccionada, yo no especifiqué ninguna.
.
Guia de instaación de Espressif