Como dividir el codigo en componentes

Un componente en ESP-IDF es esencialmente una biblioteca o módulo que puedes incluir en tu proyecto. Puede ser una biblioteca que hayas escrito tú mismo, una biblioteca de terceros, o incluso una que ya exista dentro de ESP-IDF pero que requiera una configuración específica.

Paso 1: Crear o identificar el componente

Antes de agregar un componente, necesitas tener el componente en sí. Esto puede ser un conjunto de archivos .c, .h y posiblemente otros tipos de archivos dependiendo de la naturaleza del componente.

Paso 2: Estructura de directorios del componente

Crea una carpeta dentro del directorio components de tu proyecto con el nombre de tu componente. Por ejemplo, si tu componente se llama mi_componente, la estructura sería así:

mi_proyecto/
|-- main/
|   |-- main.c
|
|-- components/
|   |-- mi_componente/
|       |-- include/
|           |-- mi_componente.h
|       |-- mi_componente.c
|       |-- CMakeLists.txt
|
|-- CMakeLists.txt  # <-- Este es el CMakeLists.txt principal del proyecto
|-- sdkconfig
|-- sdkconfig.defaults
|-- build/          # Directorio donde se generan los archivos de construcción y binarios.
  • include/: Este directorio es opcional pero recomendado para almacenar archivos de encabezado.

  • mi_componente.c: Tu código fuente principal para el componente.

  • CMakeLists.txt: Archivo necesario para que CMake entienda cómo construir tu componente.

Paso 3: Escribir el CMakeLists.txt del componente

El archivo CMakeLists.txt le dice a ESP-IDF cómo construir tu componente. Un archivo CMakeLists.txt básico para tu componente podría verse así:


idf_component_register(SRCS "mi_componente.c"
                       INCLUDE_DIRS "include")

Esto básicamente le dice a ESP-IDF que el código fuente de tu componente está en mi_componente.c y que los archivos de encabezado se encuentran en el directorio include.

Paso 4: Incluir el componente en tu aplicación

En tu archivo principal main.c (o cualquier otro archivo donde necesites el componente), simplemente incluye el encabezado correspondiente:

#include "mi_componente.h"

Asegurarse de que el componente se incluya en la compilación es tan simple como agregar el directorio components a EXTRA_COMPONENT_DIRS en tu archivo CMakeLists.txt principal:

list(APPEND EXTRA_COMPONENT_DIRS "./components")

Paso 5: Buildear el proyecto

Cuando compiles el proyecto usando idf.py build, ESP-IDF detectará automáticamente los componentes en el directorio components y los incluirá en la compilación.

Nota: Dependencias y como agregarlas a tu componente

Si tu componente depende de otros componentes, puedes agregarlos a tu componente de la siguiente manera (por lo general el compilador se queja si no lo haces y dira que no encuentra las librerias):

idf_component_register(SRCS "mi_componente.c"
                       INCLUDE_DIRS "include"
                       REQUIRES otro_componente) # <-- Aqui se agrega la dependencia, puede ser (wifi, nvs_flash, etc)