Perguntas frequentes sobre ESP32

Gravar ESP32 no Linux e no Mac

// linux + mac · flashing faq

Arquivado em: ESP32 · Linux · macOS · Gravação · Atualizado em agosto de 2026

Gravar o esp32 no linux e no mac é genuinamente mais fácil que no Windows — sem caça ao driver na maioria das placas, só um nome de porta serial que parece diferente. Os comandos, os erros de permissão e a única manha do macOS que desperdiça uma noite.

Preciso de drivers no Linux?

Normalmente não — o kernel já traz os drivers de CH340, CP2102 e do USB-Serial-JTAG nativo. O esptool.py no linux não precisa de passo extra de driver para as placas comuns; o que ele precisa é permissão: se você não está no grupo dialout, o esptool morre com “could not open port”. sudo usermod -aG dialout $USER, saia, entre, pronto.

Preciso de drivers no macOS?

Os chips USB clássicos precisam: placas CP2102 querem o driver VCP da Silicon Labs, placas CH340 querem o driver da WCH — ambos kexts que o macOS reclama cada vez mais. Placas mais novas ESP32-S3, C3 e C6 expõem USB-Serial-JTAG e não precisam de nada, então o esptool.py no mac funciona direto com elas. A pergunta do driver some no hardware moderno.

Como gravar o ESP32 no Linux?

Ache a porta com ls /dev/tty* antes e depois de plugar, e grave: esptool.py --port /dev/ttyUSB0 write_flash 0x0 firmware.bin. Para placas com USB nativo a porta é /dev/ttyACM0. Todo o resto — offsets, modo boot, baud — bate com qualquer outro SO, então o FAQ de gravação geral vale palavra por palavra.

Como gravar o ESP32 no Mac?

O nome da porta é a única surpresa: /dev/cu.usbserial-XXXX para placas CH340/CP2102, /dev/cu.usbmodem para USB nativo. Depois é a mesma linha do esptool: esptool.py --port /dev/cu.usbserial-XXXX write_flash 0x0 firmware.bin. Se nenhuma porta aparece, a seção de driver acima é a sua resposta, não a placa.

A Arduino IDE é a mesma nos dois?

Sim, incluindo o pacote de placas e o seletor de porta, que é uma coisa a menos para reaprender. O FAQ da Arduino IDE cobre a configuração do board manager, que se comporta idêntica aqui. A única diferença específica de SO no Arduino no Linux continua sendo a permissão dialout; no macOS é o kext, e ambos são correções de uma vez.

A porta não aparece — e agora?

Rode ls /dev/tty* / ls /dev/cu.* com a placa desconectada e depois conectada — a novata é a sua porta. Se nada aparece: cabo (cabos só de carga são o culpado nº 1), depois driver, depois a placa em si. Eu já vi gente comprar uma segunda placa pelo que no fim era um cabo de US$ 2.

Dá para gravar com PlatformIO no Linux ou no Mac?

Sim, e é a opção mais lisa nos dois: platformio run --target upload detecta a porta e grava, com a mesma toolchain que o esptool usa. O FAQ do PlatformIO cobre a configuração; o passo de upload aqui é idêntico ao Windows, tirando o nome da porta.

Ainda preciso segurar o BOOT?

Na maioria das devkits, não — o circuito de auto-reset (fiação DTR/RTS) faz isso por você, exatamente como no Windows. Placas sem o circuito, ou módulos puros ligados na mão, precisam da dança manual: segure BOOT, toque EN, solte. A lógica depende da placa, não do SO.

Por que meu flash é lento no Linux?

O baud padrão do esptool é conservador. Adicione --baud 460800 ao write_flash e o mesmo firmware cai numa fração do tempo. Se o chip de ponte gagueja nessa velocidade — alguns CH340 fazem isso — caia para 230400. Na maioria funciona, com variação de placa para placa; minha devkit CH340 velha recusa qualquer coisa acima de 115200.

Dá para gravar de um container Docker?

Sim, com a porta serial passada para dentro: docker run --device /dev/ttyUSB0 mais a associação ao grupo dialout para o usuário do container. É um jeito limpo de manter toolchains fixadas, e eu rodo minhas gravações noturnas assim. Se você quiser testar fluxos de gravação sem hardware nenhum, o simulador do navegador cobre o lado da prática.

Os projetos deste tópico rodam direto no simulador gratuito do sensbench: circuito pré-montado, firmware incluído, sem conta e sem instalação.

Leave a Reply

Your email address will not be published. Required fields are marked *