Blog
Flashear ESP32 en Linux y Mac
Flashear el esp32 en linux y mac es genuinamente más fácil que en Windows — sin cacería de drivers para la mayoría de placas, solo un nombre de puerto serie que tiene otra pinta. Los comandos, los errores de permisos y la única rareza de macOS que quema una tarde.
¿Necesito drivers en Linux?
Normalmente no — el kernel trae los drivers de CH340, CP2102 y del USB-Serial-JTAG nativo. esptool.py en linux no necesita ningún paso extra de driver para las placas comunes; lo que sí necesita es permiso: a menos que estés en el grupo dialout, esptool muere con “could not open port”. sudo usermod -aG dialout $USER, cierra sesión, entra, listo.
¿Necesito drivers en macOS?
Los chips USB clásicos sí: las placas CP2102 quieren el driver VCP de Silicon Labs, las CH340 el driver de WCH — ambos kext que macOS cada vez más se queja de instalar. Las placas más nuevas ESP32-S3, C3 y C6 exponen USB-Serial-JTAG y no necesitan nada, así que esptool.py en mac funciona con esas sin más. La pregunta del driver desaparece en hardware moderno.
¿Cómo flashear el ESP32 en Linux?
Encuentra el puerto con ls /dev/tty* antes y después de enchufar, y luego flashea: esptool.py --port /dev/ttyUSB0 write_flash 0x0 firmware.bin. Para placas con USB nativo el puerto es /dev/ttyACM0. Todo lo demás — offsets, modo boot, baudios — coincide con cualquier otro SO, así que el FAQ general de flasheo aplica palabra por palabra.
¿Cómo flashear el ESP32 en Mac?
El nombre del puerto es la única sorpresa: /dev/cu.usbserial-XXXX para placas CH340/CP2102, /dev/cu.usbmodem para USB nativo. Luego es la misma línea de esptool: esptool.py --port /dev/cu.usbserial-XXXX write_flash 0x0 firmware.bin. Si no aparece ningún puerto, la sección de drivers de arriba es tu respuesta, no la placa.
¿El Arduino IDE es igual en ambos?
Sí, incluido el paquete de placas y el selector de puertos, que es una cosa menos que reaprender. El FAQ del Arduino IDE cubre la configuración del board manager que se comporta idéntico aquí. La única diferencia específica de SO en Arduino en Linux sigue siendo ese permiso de dialout; en macOS es el kext, y ambos son arreglos de una vez.
¿El puerto no aparece en la lista — y ahora?
Ejecuta ls /dev/tty* / ls /dev/cu.* con la placa desenchufada, y otra vez enchufada — el recién llegado es tu puerto. Si no aparece nada: cable (los cables solo de carga son el culpable nº1), luego driver, luego la placa misma. He visto a gente comprar una segunda placa por lo que resultó ser un cable de 2 $.
¿Puedo flashear con PlatformIO en Linux o Mac?
Sí, y es la opción más suave en ambos: platformio run --target upload detecta el puerto y flashea, con el mismo toolchain que usa esptool. El FAQ de PlatformIO cubre la configuración; el paso de subida aquí es idéntico al de Windows salvo el nombre del puerto.
¿Sigo necesitando mantener BOOT?
En la mayoría de devkits, no — el circuito de auto-reset (cableado DTR/RTS) lo hace por ti, exactamente igual que en Windows. Las placas donde falta el auto-reset o un módulo pelado cableado a mano necesitan el baile manual: mantén BOOT, toca EN, suelta. La lógica depende de la placa, no del SO.
¿Por qué mi flash es lento en Linux?
El baud por defecto de esptool es conservador. Añade --baud 460800 al write_flash y el mismo firmware cae en una fracción del tiempo. Si el chip puente tartamudea a esa velocidad — algunas placas CH340 lo hacen — baja a 230400. En general funciona, con variación placa a placa; mi viejo devkit CH340 se niega a pasar de 115200.
¿Puedo flashear desde un contenedor Docker?
Sí, pasando el puerto serie: docker run --device /dev/ttyUSB0 más la pertenencia al grupo dialout para el usuario del contenedor. Es una forma limpia de mantener los toolchains fijados, y así ejecuto mis flashes nocturnos. Si quieres probar flujos de flasheo sin hardware del todo, el simulador del navegador cubre la parte de práctica.
Los proyectos de este tema se ejecutan directamente en el simulador gratuito de sensbench: circuito preconectado, firmware incluido, sin cuenta y sin instalación.