Simulador ESP32
O ESP32 é um microcontrolador popular habilitado para WiFi e Bluetooth, amplamente utilizado para projetos de IoT. Wokwi simula o ESP32, ESP32-C3, ESP32-S2 e ESP32-S3 (beta) e ESP32-C6 (alpha).
ESP32 boards
| Nome | Chip | Descrição |
|---|---|---|
| ESP32 DevKit v1 | ESP32 | Placa de desenvolvimento popular ESP32 |
| TinyPICO | ESP32 | Placa ESP32 compacta por UnexpectedMaker |
| Franzininho WiFi | ESP32-S2 | Placa ESP32-S2 da Comunidade Franzininho |
| Wemos S2 mini | ESP32-S2 | Pequena placa ESP32-S2 da Wemos |
| ESP32-S2-DevKitM-1 | ESP32-S2 | Placa de desenvolvimento ESP32-S2 de nível básico |
| ESP32-C3-DevKitM-1 | ESP32-C3 | Placa de desenvolvimento ESP32-C3 de nível básico |
| Rust Board ESP32-C3 | ESP32-C3 | Placa ESP32-C3 para desenvolvimento Rust |
| ESP32-S3-DevKitC-1 | ESP32-S3 | Placa de desenvolvimento ESP32-C3 de nível básico (beta) |
| ESP32-C6-DevKitC-1 | ESP32-S6 | Placa oficial de desenvolvimento ESP32-S6 (alpha) |
Você pode contribuir com placas adicionais enviando um pull request para wokwi-boards.
Começando
Você pode usar o simulador ESP32 para executar diferentes tipos de aplicativos:
- Projetos ESP32 Arduino Core (incluindo projetos ESP-IDF)
- Projetos MicroPython e CircuitPython
- Projetos Rust (consulte https://wokwi.com/rust)
- Arquivos de firmware de aplicativos personalizados (por exemplo, aplicativos criados usando o ESP-IDF)
Arduino Core
Comece a partir do modelo de projeto Arduino-ESP32, ou do Exemplo de Blink ESP32.
Se você quiser usar bibliotecas Arduino de terceiros, adicione um arquivo libraries.txt com a lista de bibliotecas que você usa.
MicroPython
Comece com o modelo de projeto MicroPython ESP32, ou com o Exemplo de Blink MicroPython ESP32.
Nota: Enquanto a simulação está em execução, pressione Ctrl+C dentro do Terminal Serial para entrar no MicroPython REPL. Alternativamente, você pode editar o código de Exemplo Blink e remover o loop while. Para obter mais informações, consulte o Guia MicroPython.
Firmware de aplicativo personalizado
Abra o modelo de projeto de aplicativo personalizado do ESP32 e pressione "F1" no editor de código. Em seguida, escolha "Fazer upload do firmware e iniciar a simulação...". Escolha qualquer arquivo .bin, .elf ou .uf2 do seu computador e a simulação será iniciada.
Ao carregar um firmware personalizado, é recomendável criar um único arquivo .bin que contenha o gerenciador de inicialização, a tabela de partições e aplicativo. Você pode usar o comando esptool merge_bin para criar o arquivo.
Para projetos ESP-IDF, você também pode criar um único arquivo UF2 usando o comando: idf.py uf2. O arquivo estará localizado em build/uf2.bin, que pode ser carregado no simulador.
Exemplos no simulador
Exemplos Arduino
Exemplos MicroPython
Exemplos ESP-IDF
Os exemplos a seguir usam as funções ESP-IDF. Eles são compilados usando o Arduino ESP32 Core:
- Blink usando a API FreeRTOS
- Contador de LED binário usando tarefas FreeRTOS
- Entrada do botão GPIO + Interrupções
- WiFi Exemplo
Recursos do simulador
| Periférico | ESP32 | S2 | S3 | C3 | Notas |
|---|---|---|---|---|---|
| Processador core(s) | ✔️ | ✔️ | ✔️ | ✔️ | |
| GPIO | ✔️ | ✔️ | 🟡 | ✔️ | Interrupções suportadas |
| IOMUX | 🟡 | 🟡 | 🟡 | 🟡 | |
| PSRAM | ✔️ | ✔️ | ✔️ | — | 4MB de SRAM externa * |
| UART | ✔️ | ✔️ | ✔️ | ✔️ | |
| USB | — | ✔️ | ✔️ | ❌ | Suporte para UART sobre USB (CDC) |
| I2C | ✔️ | ✔️ | ✔️ | ✔️ | Mestre apenas. Endereçamento de 10 bits não suportado. |
| I2S | ❌ | ❌ | ❌ | ❌ | Aberto para votação |
| SPI | ✔️ | ✔️ | ✔️ | ✔️ | |
| TWAI | ❌ | ❌ | ❌ | ❌ | |
| RMT | 🟡 | 🟡 | ❌ | 🟡 | Somente transmissão, use para controlar NeoPixels |
| LEDC PWM | ✔️ | ✔️ | ❌ | ✔️ | Used by analogWrite(), Servo, Buzzer, etc. |
| MCPWM | ❌ | — | ❌ | — | |
| DMA | 🟡 | 🟡 | ❌ | ❌ | |
| WiFi | ✔️ | ✔️ | ✔️ | ✔️ | Veja o Guia WiFi do ESP32 |
| Bluetooth | ❌ | — | ❌ | ❌ | Aberto para votação |
| Timers | 🟡 | ✔️ | 🟡 | ✔️ | |
| Watchdog | ❌ | ❌ | ❌ | ❌ | |
| RTC | 🟡 | 🟡 | 🟡 | 🟡 | Apenas resistores RTC pull-up / pull-down |
| ADC | ✔️ | ✔️ | ❌ | ✔️ | Nota: analogRead() retorna valores até 4095 |
| RNG | ✔️ | ✔️ | ✔️ | ✔️ | Gerador de números aleatórios |
| AES Accelerator | ✔️ | ✔️ | ❌ | ✔️ | |
| SHA Accelerator | ✔️ | ✔ ️ | ❌ | ✔️ | |
| RSA Accelerator | ✔️ | ✔️ | ❌ | ✔️ | |
| Hall Effect Sensor | ❌ | — | ❌ | — | |
| ULP Processor | ❌ | ❌ | ❌ | ❌ | |
| GDB Debugging | 🟡 | 🟡 | 🟡 | 🟡 | Apenas através do wokwi-gdbserver |
Legenda:
✔️ - Simulado
🟡 - Implementação parcial/trabalho em andamento
❌ - Não implementado (mas se você precisar, abra uma solicitação de recurso)
— - Não disponível neste chip
* A quantidade de SRAM pode ser personalizada usando o atributo "psramSize".
Simulação WiFi
Veja o Guia WiFi do ESP32.
Uso Avançado
Flash e tamanho da memória
Você pode personalizar o tamanho do flash e PSRAM adicionando os seguintes atributos ao chip:
| Atributo | Descrição | Padrão |
|---|---|---|
| flashSize | Tamanho da flash em MB. Valores válidos: "2", "4", "8", "16", "32". | "4" |
| psramSize | Tamanho da PSRAM em MB. Valores válidos: "2", "4", "8". | "4" |
Tabela de partição personalizada
Você pode especificar uma tabela de partição personalizada adicionando um arquivo "partitions.csv" ao seu projeto. Confira o ESP32 Partition Table Guide para o formato exato deste arquivo.
Offset do firmware personalizado
Ao carregar um firmware personalizado, você pode especificar o deslocamento do firmware na memória flash. Por padrão, o Wokwi examinará o binário do firmware e tentará descobrir o deslocamento automaticamente, com base na presença do bootloader e no tipo do chip. Se o Wokwi não conseguir descobrir o deslocamento, ele assumirá que seu firmware é um firmware de aplicativo e o carregará no deslocamento 0x10000.
Você pode especificar o deslocamento manualmente adicionando o seguinte atributo ao chip:
| Atributo | Descrição | Padrão |
|---|---|---|
| firmwareOffset | Offset do firmware na memória flash, em bytes. | "" |
Pulando o bootloader
Nos chips ESP32 e ESP32-S2, o Wokwi pula a ROM de boot e o bootloader, para que seu firmware comece a rodar imediatamente. Outros chips (ESP32-C3, ESP32-S3, etc.) sempre executam a sequência de inicialização completa.
Se você deseja que o Wokwi sempre execute o bootloader, você pode adicionar o seguinte atributo ao chip:
| Atributo | Descrição | Padrão |
|---|---|---|
| fullBoot | Defina como "1" para simular a sequência de inicialização completa: boot ROM -> bootloader -> aplicativo. | "" |