Blog
Errores de código ESP32: conversiones y compilación
Errores de conversión, mensajes de pánico y sketches que compilan pero mienten — el texto de error del ESP32 es seco, pero cada mensaje apunta a un arreglo concreto. Qué significan los errores comunes y qué cambiar primero.
¿No puedes convertir bytearray a int en ESP32?
En MicroPython, int.from_bytes(bytes, ‘little’) es la función que buscas — un bytearray es un iterable de bytes, no un número. En C, la misma forma de error significa que estás asignando un array uint8_t a un int; copia el valor en su lugar. Busca ‘can’t convert bytearray to int esp32’ y la mitad de los hilos son parseo UART en MicroPython, la otra mitad lectura de structs en C. Pega el sketch que falla en el simulador MCP y te ejecuta el error.
¿Qué significa “Guru Meditation Error”?
Es la cabecera de pánico — el chip topó con una excepción e imprimió un backtrace antes de resetear. El texto posterior, como ‘core 1 panic’ más una dirección, te dice dónde. Las líneas del backtrace son las funciones que se estaban ejecutando; léelo desde abajo, porque el pánico se dispara en la última función llamada.
¿Cómo decodifico un backtrace?
Pega las direcciones en addr2line, o deja que la herramienta lo haga — idf.py monitor decodifica automáticamente, y PlatformIO hace lo mismo. Una línea resuelta como 0x400d1234: loop() at sketch.ino:42 nombra el punto exacto. En el Arduino IDE decodificas a mano.
¿Por qué mi ESP32 se reinicia en bucle?
Lee la última salida serie — el chip imprime por qué murió, cada vez. Un bucle de reinicio es un pánico, un brownout o un reset por watchdog, y el mensaje dice cuál. El brownout quiere mejor fuente; el watchdog quiere una tarea que ceda. El FAQ de depuración separa los tres casos por síntoma.
¿Qué es “exit status 1”?
Es el envoltorio genérico de fallo de build de Arduino — el error real está unas líneas más arriba, normalmente la primera línea ‘error:’. Arregla el primer error y la cascada suele disolverse. ‘exit status 1’ por sí solo nunca es el problema; es el resumen. Si el error apunta a un header que nunca tocaste, actualiza la librería.
¿Por qué mi entero es siempre cero tras leer un sensor?
Tres causas clásicas: división de enteros (5/2 es 2 en C), leer el ADC antes de que asiente, y texto serie que llega como ’42n’ que atoi() lee mal. Imprime el valor crudo primero — responde cuál es en diez segundos. Quemé una hora con esto con un DHT22 el mes pasado.
¿Por qué toInt() devuelve 0 con entrada válida?
toInt() falla en silencio — basura dentro, cero fuera, sin error. Comprueba la cadena con isDigit() o hazle trim primero; un salto de línea al final la rompe más veces de las que no. Lo mismo aplica a atoi() en C: valida la cadena antes de fiarte del número.
¿Qué es un stack overflow en el ESP32?
Es el canario — el chip detecta corrupción de pila y entra en pánico con ‘stack canary’ en el trace. La recursión profunda y los arrays locales grandes son la fuente habitual; mueve los buffers a static o heap, y sube el tamaño de pila en xTaskCreate. El FAQ de entresijos mapea el layout de memoria que explica por qué.
¿Error de compilación vs error de linker — cuál es la diferencia?
Los errores de compilación viven dentro de un archivo: sintaxis, tipos, nombres no declarados. Los errores de linker son piezas que faltan: ‘undefined reference to’ significa que la función no existe en ningún sitio o que la librería no está enlazada. La primera palabra de la línea de error te dice la fase, y la fase te dice dónde mirar.
¿Por qué el error apunta a una línea que tiene buena pinta?
Los compiladores reportan dónde se dieron cuenta, no dónde empezó el problema — normalmente una llave o un punto y coma que falta varias líneas más arriba. Trabaja hacia atrás desde la línea marcada, y activa la salida verbosa del IDE para ver la cadena completa.
Los proyectos de este tema se ejecutan directamente en el simulador gratuito de sensbench: circuito preconectado, firmware incluido, sin cuenta y sin instalación.