Blog
Firmware e dados do ESP32: partições, arquivos e leitura
Firmware, partições e os arquivos escondidos no seu flash: o que gravar, para onde vai e como ler de volta. O simulador do navegador espelha o mesmo layout.
Como ler uma partição de flash do ESP32 em C?
Use a API esp_partition: esp_partition_find_first() localiza uma partição por tipo e rótulo, esp_partition_read() copia os bytes para fora, e você está lendo flash de C sem o esptool. Endereços são relativos ao início da partição, não ao flash. Perguntar como ler a tabela de partição do esp32 normalmente significa esptool.py read_flash 0x8000 0x1000 pt.bin decodificado com gen_esp32part.py.
Como gravar firmware no ESP32?
Firmware no sentido estrito é a imagem do app: esptool.py write_flash 0x10000 firmware.bin. Repare: 0x10000, não 0x0 — gravar um app em 0x0 é o clássico erro de boot loop silencioso, e eu já cometi.
Como gravar um arquivo BIN no ESP32?
Um .bin é só firmware num arquivo, então o comando é o mesmo write_flash com o offset que combina com o que o arquivo é: 0x1000 para um bootloader, 0x8000 para uma tabela de partição, 0x10000 para um app. Imagens de fábrica mescladas dos instaladores da Espressif são a exceção, começando em 0x0. Offset errado: boot loop, e o upload reporta sucesso.
Como baixar um arquivo de um servidor no ESP32 Arduino?
HTTPClient: http.begin(url), http.GET(), leia o corpo. É assim que se baixa um arquivo de um servidor num esp32 arduino em dez linhas, e o mesmo cliente faz POSTs quando você precisa do contrário — como enviar dados do esp32 para o servidor. Para firmware, use a classe Update no lugar: Update.begin(size) e depois Update.writeStream(stream) instala um .bin com segurança. A pegadinha clássica é o TLS: HTTPS precisa de um certificado raiz; um faltando parece problema de rede. HTTP puro funciona na maioria na sua LAN.
Como extrair código do ESP32?
Código-fonte, não; código de máquina, sim. esptool.py read_flash 0x0 0x400000 dump.bin puxa o flash inteiro, e o mesmo comando responde como ler código do esp32: os bytes estão lá, a fonte legível não. Para identificar uma imagem de firmware sem placa, o esptool.py image_info reporta chip e modo de flash — é assim que se determinam builds de firmware do esp32.
O ESP32 tem EEPROM?
EEPROM física, não — é emulada no flash. O EEPROM.h e a biblioteca Preferences gravam ambos na partição NVS, uma pequena área chave-valor no flash SPI. Resposta prática: sim, paga em durabilidade de flash em vez de um chip dedicado. Quer saber como limpar a eeprom do esp32? Preferences.clear() faz numa chamada.
O que mora onde no flash?
Layout padrão de 4 MB: bootloader 0x1000, NVS 0x9000 (credenciais de Wi-Fi, configurações), app 0x10000, filesystem de dados perto do fim. A tabela de partição em 0x8000 é o mapa — a nossa base de conhecimento tem a referência completa por placa.
Como despejar o flash inteiro?
esptool.py read_flash 0x0 0x400000 backup.bin num chip de 4 MB, com --verify para conferir que veio intacto; restaure com write_flash nos mesmos offsets. Um despejo completo é a única rede de segurança real antes de firmware experimental — eu mantenho um antes de toda placa que planejo maltratar, e ele já resgatou duas.
SPIFFS ou LittleFS?
LittleFS: mais rápido, sobrevive melhor a quedas de energia e vem com o core Arduino-ESP32. SPIFFS é legado, ainda serve para dados estáticos, e os dois fazem upload com o mesmo plugin Sketch Data Upload. A documentação oficial é vaga sobre migração, então formate o novo filesystem no primeiro boot e copie os arquivos.
Dá para atualizar o firmware pelo Wi-Fi?
Sim — OTA. A classe Update pega o mesmo stream de .bin da resposta de download do servidor e grava a partição OTA enquanto o app roda. Esse é o caminho prático para como acessar o esp32 de qualquer lugar — o aparelho liga para casa em vez de você abrir portas no roteador. app.sensbench.com testa o fluxo num navegador.
Os projetos deste tópico rodam direto no simulador gratuito do sensbench: circuito pré-montado, firmware incluído, sem conta e sem instalação.