Tohum

Dominando el Toolkit del Desarrollador de IoT Embebido

Ilustración: una caja de herramientas abierta para desarrolladores embebidos: forma de onda, chip, soldador y sonda

Escala 5‑a‑1

El plan de aprendizaje de un desarrollador embebido tiene que reflejar la lista de materiales. Lo aprendimos a la mala al desplegar un nodo de monitoreo de suelo alimentado por energía solar construido sobre ESP32, backhaul celular SIMCom y AWS IoT Core: firmware, hardware, enlaces de radio y flujos de nube tuvieron que encajar todos a la vez, y omitir una sola pieza convirtió un ajuste de firmware «rápido» en semanas de depuración.

Para mantener ese plan enfocado, calificamos cada competencia en una escala de 5 a 1 —un marco completamente agnóstico de la tecnología:

NivelQué significaPor qué importa
5 = ImprescindibleLenguaje principal, herramientas esenciales, conceptos fundamentalesSin esto no puedes lanzar un producto
4 = OptimizadoresCI/CD, pruebas automatizadas, endurecimiento de seguridad, optimización de rendimientoConvierten prototipos en productos robustos
3 = Aceleradores de flujo de trabajoDashboards, depuración avanzada, operaciones en la nubeAgilizan el desarrollo diario
2 = DeseablesFuncionalidades especializadas que querrás más adelanteAñaden pulido cuando el tiempo lo permite
1 = EspecialidadesInmersiones profundas en dominios de nicho o escalado futuroAbórdalos cuando el caso de uso lo exija

Cómo aplicarlo en cualquier lugar

  1. Define el objetivo final. ¿Cómo se ve “listo para trabajar” o “listo para producción”?
  2. Lista los 5s. Kit de supervivencia absoluto.
  3. Identifica los 4s. Prácticas que endurecen y escalan la solución.
  4. Completa los 3s. Herramientas y optimizaciones de calidad de vida.
  5. Añade los 2s y 1s. Profundidad especializada para equipos más grandes o funcionalidades avanzadas.

Prueba rápida de que funciona en cualquier lado

Al calificar el impacto y la frecuencia de cada tema, trazas un camino claro y evitas el agobio.


Cómo se ven los 5s para nuestro stack ESP32 + SIM + AWS

  1. Fluidez en C/C++ – el lenguaje de ESP‑IDF y los hooks de FreeRTOS.
  2. Dominio de ESP‑IDF (o Arduino‑ESP32) – APIs de Wi‑Fi, BLE, ADC y deep‑sleep.
  3. Fundamentos de electrónica – adaptación de niveles de UART del SIM, lectura de sondas NPK, higiene EMI.
  4. Presupuesto de potencia y carga Li‑ion/solar – mantener una 18650 de 4 Ah viva durante semanas nubladas.
  5. Conectividad robusta (Wi‑Fi, AT SIM, MQTT/TLS) – canalizar datos de sensores de forma segura hacia AWS.

Domina estos cinco y puedes lanzar un prototipo funcional. Sube a los 4s —pipelines de CI, FreeRTOS avanzado, OTA, seguridad— y tendrás un producto que sobrevive en campo. Los 3s, 2s y 1s completan el toolkit profesional con dashboards, cumplimiento y profundidad específica del dominio.

El artículo que sigue no es una checklist; es una hoja de ruta secuencial mapeada a decisiones reales de hardware. Empieza con los 5s, avanza por los 4s, y cuando llegues al territorio 3‑a‑1 tendrás tanto la confianza como el contexto para aplicarlos donde más importa, de la protoboard a producción.

Skillsets para desarrolladores embebidos

Leyenda – Importancia
5 = Indispensable (necesario para el trabajo diario)
4 = Muy importante (necesario en la mayoría de proyectos)
3 = Útil (frecuentemente útil, aprender pronto)
2 = Deseable (aprender cuando el tiempo lo permita)
1 = Especializado / situacional

#Habilidad / HerramientaPor qué importa para un producto de medición de suelo basado en ESP32Importancia
1C / C++Lenguajes principales para ESP‑IDF, Arduino core y drivers de periféricos.5
2ESP‑IDF (nativo) o Arduino‑ESP32Da acceso directo a Wi‑Fi, BLE, GPIO, ADC, UART, I²C y las APIs de FreeRTOS.5
3Fundamentos de FreeRTOSPlanificación de tareas, watchdogs, colas y modos de sueño eficientes en energía.4
4Git & GitHub / GitLabControl de versiones, revisiones de código y hooks de CI.5
5VS CodeIDE ligero multiplataforma con sólidas extensiones para ESP‑IDF y PlatformIO.4
6PlatformIOCompila, flashea, prueba y analiza estáticamente proyectos embebidos desde VS Code.4
7Linux CLI / WSLToolchains, scripts de build, depuración OpenOCD y runners de CI contenedorizados.3
8Framework de pruebas unitarias (Unity / CppUTest)Pruebas de regresión para matemáticas de sensores, parsers de comunicaciones, lógica de estado de batería.3
9Integración continua (GitHub Actions / GitLab CI)Automatiza build, test, lint y comprobaciones de tamaño de firmware en cada push.3
10Jira (issues) & Confluence (docs)Rastrea tareas, errores, requisitos y notas de diseño en un equipo.3
11Electrónica digital y analógicaLectura de salidas de sensores NPK, adaptación de niveles de UART del módulo SIM, mitigación de EMI.5
12Diseño de PCB (KiCad / Altium)Placa personalizada para alojar ESP32, interfaz NPK, cargador Li‑ion y MPPT solar.4
13Presupuesto de potencia y carga solar‑Li‑ionDimensionar panel, IC de carga, convertidores y estados de firmware de bajo consumo.5
14Gestión de baterías (seguridad y conteo de culombios de 18650)Protege contra sobre‑/sub‑tensión y proporciona una estimación de SoC.4
15Comunicaciones celulares (AT commands SIMCom, PPP, TCP/IP)Brinda conectividad en la nube cuando no hay Wi‑Fi en campo.5
16Protocolos IoT (MQTT / HTTPS)Enlace de datos ligero y seguro hacia servidor o nube.4
17Conceptos básicos de seguridad TLS / mbedTLSCifra datos y autentica el dispositivo con endpoints en la nube.4
18Calibración y compensación de sensoresInfluencias de temperatura / humedad en lecturas NPK; curvas de calibración de campo.5
19Registro de datos y almacenamiento OTA (SPIFFS, LittleFS, SD)Respaldo local durante pérdida de conectividad; almacenamiento temporal de actualizaciones de firmware.3
20Flujo de actualización OTA remotaMantiene miles de unidades desplegadas mantenibles.4
21Teoría de control y estimaciónOpcional: ayuda con filtrado avanzado (Kalman, PID) o muestreo adaptativo.2
22Scripting Python / BashAnálisis de logs, flasheo en línea de producción, automatización de pruebas.3
23Conceptos básicos de nube y dashboards (AWS IoT Core, Azure IoT, InfluxDB + Grafana)Almacena, visualiza y alerta sobre métricas del suelo.3
24Cumplimiento normativo y ambiental (CE, FCC, IP‑rating)Garantiza el despliegue legal y la robustez en campo.3
25Herramientas de documentación (Markdown, Doxygen)Genera documentación mantenible de API y diseño de hardware.3

Cómo leer la tabla

1 – C/C++

Nivel: 1 – Absolute Beginner
– Sintaxis y estructura de C: modelo de compilación (fuente → objeto → ejecutable), función main()
– Tipos de datos básicos: int, char, float, double, bool
– Variables y constantes: declaración, inicialización, calificador const
– Operadores: aritméticos (+, –, *, /, %), asignación, incremento/decremento
– Flujo de control: if/else, switch, bucles for/while/do-while
– E/S simple: printf, salida básica por consola
– Introducción a punteros: declaración de punteros, desreferenciación
– Compilación y depuración: compilar con gcc -o, interpretar errores básicos del compilador

Nivel: 2 – Beginner
– Memoria y punteros: aritmética de punteros, punteros vs. arrays, introducción a malloc/free
– Tipos estructurados: struct, union, typedef
– Conceptos básicos del preprocesador: #define, #include, include guards
– Clases de almacenamiento: auto, static, extern, reglas de alcance y enlace
– Cadenas y arrays: char[], funciones de cadenas (strcpy, strlen, etc.)
– Código modular: dividir en múltiples archivos .c/.h, fundamentos de makefiles (reglas, targets)
– Herramientas básicas de depuración: pasos con gdb, breakpoints, inspección de variables

Nivel: 3 – Intermediate
– Gestión dinámica de memoria: heap vs. stack, patrones comunes de fugas, uso de herramientas como Valgrind
– E/S de archivos: fopen/fread/fwrite/fclose, punteros de archivo, manejo de errores
– Operaciones a nivel de bits: máscaras, desplazamientos, set/clear de bits, enum y bit-fields
– Punteros a funciones: callbacks, tablas de despacho
– Manejo de errores: códigos de retorno, errno
– Fundamentos de C++: clases y objetos, constructores/destructores, especificadores de acceso
– Bases de STL: std::vector, std::string, uso simple de std::map e iteradores
– Namespaces y organización de headers

Nivel: 4 – Advanced
– C específico para embebidos: volatile, E/S mapeada en memoria, const en flash vs. RAM
– Linker y sistema de build: linker scripts personalizados, colocación de secciones, flags de optimización (-O2, -Os), toolchains de cross-compilación
– Características de C++11/14/17: lambdas, auto, range-based for, constexpr, nullptr
– Smart pointers y RAII: unique_ptr, shared_ptr, gestión de recursos
– Bases de templates: templates de funciones y clases, especialización de templates
– Multithreading: std::thread, mutexes, variables de condición, tipos atómicos
– Conceptos de tiempo real: rutinas de servicio de interrupción (ISRs), secciones críticas, mitigación de inversión de prioridad

Nivel: 5 – Expert
– Meta-programación avanzada con templates: templates variádicos, SFINAE, type traits
– Modelo de objetos C++ avanzado: vtables, layout de objetos, consideraciones de ABI
– Concurrencia lock-free y de baja latencia: atómicos, ordenamientos de memoria, algoritmos wait-free
– Internos del compilador y toolchain: pipelines de pasos de GCC/Clang, escribir plugins de compilador personalizados
– Optimización de rendimiento: alineación de caché, predicción de saltos, perfilado en profundidad (ej. gprof, contadores de hardware)
– Porting bare-metal: implementar stubs de newlib, runtime mínimo en C, código de bring-up
– Estándares y seguridad: cumplimiento MISRA-C/C++, herramientas de análisis estático (Coverity, Cppcheck)
– Contribución a frameworks: escribir/optimizar drivers para los internos de FreeRTOS o ESP-IDF

2 – ESP-IDF (native) or Arduino-ESP32

Nivel: 1 – Absolute Beginner
– Instalar toolchain de ESP-IDF (Python, Git, scripts de ESP-IDF) o Arduino-ESP32 core
– Configurar VS Code (o Arduino IDE) para desarrollo con ESP32
– Compilar y flashear el ejemplo “blink”
– Explorar estructura del proyecto (CMakeLists.txt, sdkconfig o platformio.ini)
– Usar comandos básicos de idf.py (o Arduino): build, clean, flash, monitor

Nivel: 2 – Beginner
– GPIO: configurar pines, leer entradas, controlar LEDs
– ADC: muestrear canales analógicos, convertir valores raw a voltaje
– UART e I²C: enviar/recibir cadenas o bytes simples
– Modo estación Wi-Fi: escanear APs, conectar, obtener IP
– BLE peripheral: anunciar, conectar desde app de teléfono
– Ajustar menuconfig (tabla de particiones, nivel de log) o configuraciones de placa de Arduino

Nivel: 3 – Intermediate
– Tareas, colas y timers de FreeRTOS dentro del marco de ESP-IDF
– API de eventos Wi-Fi: manejar conexión/desconexión, lógica de reconexión
– Cliente BLE y GATT: descubrir servicios, leer/escribir características
– SPI e I²C: integrar y calibrar un sensor real (ej. humedad de suelo)
– Actualizaciones OTA por HTTP(S): configurar particiones, disparar actualizaciones
– Usar esp_timer, logging detallado (ESP_LOG*) y códigos de error

Nivel: 4 – Advanced
– Crear componentes reutilizables (CMake Component API) o bibliotecas personalizadas de Arduino
– Construir una tabla de particiones personalizada y cambiar particiones en tiempo de ejecución
– Aprovisionamiento seguro: SmartConfig, configuración de Wi-Fi basada en BLE
– Ejemplos avanzados de BLE (L2CAP, mesh)
– Optimizar SPI DMA y ajustes de velocidad/timeout del bus I²C
– Integrar mbedTLS para MQTT sobre TLS
– Automatizar build/flash/tests en CI (GitHub Actions, scripts de CI de ESP-IDF)

Nivel: 5 – Expert
– Contribuir nuevos drivers o corregir errores en el núcleo de ESP-IDF (ej. calibración de ADC)
– Desarrollar bootloader personalizado u optimizaciones a nivel de ISR
– Afinar regiones de heap de FreeRTOS y parámetros del scheduler
– Implementar secure boot y cifrado de flash de extremo a extremo
– Realizar tracing y perfilado en tiempo real (ESP-Trace, Perfcnt)
– Arquitectar workspaces CMake multi-proyecto
– Mentorizar a otros: definir mejores prácticas de ESP-IDF y bibliotecas internas de componentes

3 – FreeRTOS Fundamentals

Nivel: 1 – Absolute Beginner
– Entender qué es un RTOS y por qué usarlo
– Instalar FreeRTOS (vía ESP-IDF o PlatformIO) e inspeccionar el ejemplo demo “hello world” de tareas
– Aprender la API básica para crear e iniciar una sola tarea (xTaskCreate, vTaskStartScheduler)
– Explorar el tick del sistema y cómo el scheduler cambia entre tareas
– Usar vTaskDelay para bloquear una tarea durante un tiempo fijo

Nivel: 2 – Beginner
– Crear múltiples tareas con diferentes prioridades y tamaños de stack
– Usar vTaskDelayUntil para temporización periódica de tareas
– Entender y aplicar secciones críticas (taskENTER_CRITICAL / taskEXIT_CRITICAL)
– Conocer los estados de tareas (Running, Ready, Blocked, Suspended)
– Usar vTaskSuspend / vTaskResume para control simple de tareas

Nivel: 3 – Intermediate
– Comunicar tareas mediante colas (xQueueCreate, xQueueSend, xQueueReceive)
– Sincronizar tareas usando semáforos binarios y de conteo (xSemaphoreCreateBinary, xSemaphoreTake)
– Coordinar eventos con Event Groups (xEventGroupSetBits, xEventGroupWaitBits)
– Usar timers de software (xTimerCreate, callback)
– Detectar y manejar desbordamientos de stack

Nivel: 4 – Advanced
– Optimizar asignación de memoria: elegir y configurar esquemas de heap (heap_1…heap_5) y entender la fragmentación
– Emplear notificaciones de tareas como semáforos binarios ligeros o mensajes directos a tareas
– Configurar y usar tickless idle mode para aplicaciones de bajo consumo
– Generar e interpretar estadísticas de tiempo de ejecución (vTaskGetRunTimeStats)
– Integrar FreeRTOS+Trace o Percepio Tracealyzer

Nivel: 5 – Expert
– Portar FreeRTOS a hardware personalizado o modificar la capa de port para casos de uso avanzados
– Implementar y afinar políticas de scheduler personalizadas o funciones hook (vApplicationIdleHook, vApplicationMallocFailedHook)
– Diseñar máquinas de estados complejas usando primitivas de sincronización avanzadas (mutexes con herencia de prioridad, mutexes recursivos)
– Mentorizar equipos sobre mejores prácticas, seguridad (código MISRA-compliant) y afinamiento de comportamiento determinista

4 – Git & GitHub/GitLab

Nivel: 1 – Absolute Beginner
– Instalar Git; configurar user.name y user.email
– Inicializar un repo (git init) y clonar repos existentes (git clone)
– Seguimiento básico de archivos: git status, git add, git commit
– Ver historial con git log, inspeccionar cambios con git diff
– .gitignore simple para excluir archivos

Nivel: 2 – Beginner
– Crear y cambiar de rama: git branch, git checkout/git switch
– Configuración de remoto: git remote add, git fetch, git pull, git push
– Entender origin/main vs ramas locales
– Resolver conflictos de merge simples vía editor o CLI
– Usar la interfaz web de GitHub/GitLab para explorar commits y ramas

Nivel: 3 – Intermediate
– Merge vs rebase: git merge, git rebase; saber cuándo usar cada uno
– Rebase interactivo (git rebase -i) para limpiar commits
– Etiquetado: crear tags anotados y ligeros; subir con git push –tags
– Trabajar con pull requests (GitHub) o merge requests (GitLab): crear, revisar, mergear
– Stub básico de CI: añadir un YAML simple de GitHub Actions o GitLab CI

Nivel: 4 – Advanced
– Gestionar submódulos (git submodule) y subtrees
– Escribir hooks cliente (pre-commit, pre-push) y hooks simples servidor de GitLab/GitHub
– Proteger ramas y forzar checks de merge (status checks, aprobaciones)
– Construir pipelines CI/CD multi-etapa con caché y artefactos
– Usar git bisect para localizar errores; cherry-pick de commits específicos

Nivel: 5 – Expert
– Administrar configuraciones de organización en GitLab/GitHub: permisos de usuario/grupo, ramas protegidas
– Arquitectar estrategias de monorepo; gestionar archivos grandes con Git LFS
– Desarrollar herramientas o scripts personalizados de Git (libgit2, hooks, automatización)
– Inmersión profunda en los internos de Git: almacenamiento de objetos, packfiles, refs, index
– Definir y hacer cumplir flujos de trabajo (Gitflow, trunk-based, GitOps); mentorizar al equipo sobre mejores prácticas

5 – VS Code

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

6 – PlatformIO

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

7 – Linux CLI / WSL

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

8 – Unit‑Testing Framework (Unity / CppUTest)

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

9 – Continuous Integration (GitHub Actions / GitLab CI)

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

10 – Jira & Confluence

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

11 – Digital & Analog Electronics

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

12 – PCB Design (KiCad / Altium)

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

13 – Power‑Budgeting & Solar‑Li‑ion Charging

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

14 – Battery Management (18650)

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

15 – Cellular Comms (SIMCom AT, PPP, TCP/IP)

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

16 – IoT Protocols (MQTT / HTTPS)

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

17 – TLS / mbedTLS Security Basics

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

18 – Sensor Calibration & Compensation

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

19 – Data Logging & OTA Storage

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

20 – Remote OTA Update Flow

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

21 – Control & Estimation Theory

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

22 – Python / Bash Scripting

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

23 – Cloud & Dashboard Basics

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

24 – Regulatory & Environmental Compliance

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas:

25 – Documentation Tooling (Markdown, Doxygen)

Nivel: 1 – Absolute Beginner
Temas:

Nivel: 2 – Beginner
Temas:

Nivel: 3 – Intermediate
Temas:

Nivel: 4 – Advanced
Temas:

Nivel: 5 – Expert
Temas: