🧪 Novos tutoriais em andamento — do braço robótico ao sensor
Ir para o conteúdo
Compre este produtoLoja oficialSite oficial

Especificações de hardware do ESP32-NanoCam

Comprar na loja

1. Visão geral do hardware

O material de hardware desta secção tem como base os esquemas NanoCamModule.pdf + NanoCamBASE.pdf. Arquitetura do conjunto: a placa de núcleo (ESP32-S3 + câmara + áudio) encaixa na placa base (alimentação USB + gravação pela porta série).

Plaintext
┌─────────────────────────────────────────────────────────┐
│                    NanoCam 核心板                         │
│  ┌──────────┐  ┌──────────┐  ┌────────────┐            │
│  │ ESP32-S3 │  │ ES8311   │  │ NS4150B   │            │
│  │   R8     │  │ I2S 麦克风│  │ I2S 功放   │            │
│  │ (QFN56)  │  │          │  │            │            │
│  └────┬─────┘  └──────────┘  └────────────┘            │
│       │                                                 │
│  ┌────┴─────┐  ┌──────────┐  ┌────────────┐            │
│  │ GD25Q128 │  │  DVP     │  │ ME6217C33  │            │
│  │ 16MB Flash│ │ 摄像头   │  │ 3.3V LDO   │            │
│  └──────────┘  │ FPC-24P  │  └────────────┘            │
│                └──────────┘                             │
├─────────────────────────────────────────────────────────┤
│                    NanoCam 底板                          │
│  ┌──────────┐  ┌──────────┐  ┌────────────────────┐    │
│  │ USB-C    │  │ CH340K   │  │ 一键下载电路        │    │
│  │ 5V输入   │  │ USB-UART │  │ (DTR/RTS→BOOT/EN)  │    │
│  └──────────┘  └──────────┘  └────────────────────┘    │
│                                                         │
│  扩展接口: I2C ×1, UART ×1, 5V/GND/3.3V                 │
└─────────────────────────────────────────────────────────┘

Figura 1: frente da placa de núcleo (ESP32-S3 / câmara / áudio)

2. MCU e armazenamento

2.1 Chip principal

ParâmetroEspecificação
ModeloESP32-S3 N16R8
EncapsulamentoQFN56
CPUXtensa LX7 dual-core 240MHz
PSRAM8MB (Octal SPI, sufixo R8)
Flash16MB (sufixo N16, Flash SPI externa de 128M-bit)
RelógioCristal passivo de 40MHz + 2 condensadores de adaptação de 10pF

2.2 Armazenamento Flash

ParâmetroEspecificação
ModeloGD25Q128ESIG
Capacidade128M-bit = 16MB
InterfaceSPI (quatro fios padrão)
MarcaGigaDevice
Sinal da FlashGPIO do ESP32-S3Função
CSIO29Seleção de chip
SO (DO)IO31Saída de dados
SI (DI)IO32Entrada de dados
SCLKIO30Relógio
WPIO34Proteção contra escrita
HOLDIO33Hold

3. Subsistema de câmara

3.1 Interface DVP

ParâmetroEspecificação
Tipo de interfaceFPC 0.5 WS 24P (conector FPC de 24 pinos)
Sensores suportadosGC2145 (predefinido) / OV2640 / OV5640 e outras câmaras DVP
Barramento de configuração I2CSDA=IO41, SCL=IO42 (partilhado com o I2C externo)
Formato de píxelRGB565 / JPEG / YUV422, etc.

Figura 5: desenho de dimensões do módulo de câmara GC2145 (campo de visão de 68°)

3.2 Mapeamento completo dos pinos DVP

Categoria do sinalNome do sinalGPIO do ESP32Notas
Relógio do sistemaXCLKIO9Saída de relógio principal 24MHz
Relógio de píxelPCLKIO6Entrada de relógio de píxel da câmara
Sincronização de quadroVSYNCIO13Sincronização vertical
Sincronização de linhaHREFIO11Referência horizontal
ControloPWDNIO12Controlo de desligamento da câmara
ControloRESETIO14Reset da câmara
I2CSDAIO41Dados I2C da câmara (partilhado com o ES8311)
I2CSCLIO42Relógio I2C da câmara (partilhado com o ES8311)
Dados D0Y2IO4Dados de píxel bit0
Dados D1Y3IO2Dados de píxel bit1
Dados D2Y4IO1Dados de píxel bit2
Dados D3Y5IO3Dados de píxel bit3
Dados D4Y6IO5Dados de píxel bit4
Dados D5Y7IO7Dados de píxel bit5
Dados D6Y8IO8Dados de píxel bit6
Dados D7Y9IO10Dados de píxel bit7

3.3 Resumo do grupo de sinais da câmara

Plaintext
Camera DVP 信号组:
  XCLK  = IO9     # Master clock out (24MHz)
  PCLK  = IO6     # Pixel clock in
  VSYNC = IO13    # Vertical sync
  HREF  = IO11    # Horizontal ref
  PWDN  = IO12    # Power down (active low)
  RESET = IO14    # Hardware reset

  D0(Y2) = IO4    D1(Y3) = IO2
  D2(Y4) = IO1    D3(Y5) = IO3
  D4(Y6) = IO5    D5(Y7) = IO7
  D6(Y8) = IO8    D7(Y9) = IO10

  SIOD(SDA) = IO41
  SIOC(SCL) = IO42

4. Subsistema de áudio

4.1 Arquitetura de áudio

Plaintext
AP2718AT (模拟MEMS麦) → ES8311 Codec (ADC/DAC) → NS4150B (模拟功放) → 扬声器
                               ↕ I2S (MCLK=39,BCLK=38,WS=47,DOUT=48,DIN=40) + I2C (41/42, addr=0x30)
                            ESP32-S3
ComponenteModeloTipoInterface
MicrofoneAP2718ATMicrofone MEMS de silício analógicoAnalógico diferencial → ADC do ES8311
CodecES8311Codec de áudio (I2S+I2C)I2S=MCLK=39,BCLK=38,WS=47,DOUT=48,DIN=40, I2C=41/42, addr=0x30
AmplificadorNS4150BAmplificador analógico classe DSaída DAC do ES8311 → entrada analógica → altifalante

4.2 Pinos I2S do codec ES8311

Sinal I2SGPIO do ESP32Função
MCLKIO39Relógio principal
BCLK (SCLK)IO38Relógio de bits
LRCLK (WS)IO47Relógio dos canais esquerdo/direito
DOUT (DAC)IO48Saída de dados série (reprodução)
DIN (ADC)IO40Entrada de dados série (gravação)

O áudio utiliza o modo I2S0 Standard Duplex; o codec ES8311 suporta gravação e reprodução em simultâneo.

4.3 Controlo I2C do ES8311

Sinal I2CGPIODescrição
SDAIO41Barramento I2C partilhado com a câmara
SCLIO42Barramento I2C partilhado com a câmara
Endereço0x30Endereço I2C de 8 bits do ES8311

5. Sistema de alimentação

5.1 Cadeia de alimentação

Plaintext
USB-C (5V) ──→ 底板 NCE3401 P-MOSFET 反接保护 ──→ VDD50

                    ┌─────────────────────────┤
                    ↓                         ↓
            核心板 ME6217C33 LDO            NS4150B 功放
                    │                  (5V 直供)

                 VDD33 (3.3V)

        ┌───────────┼───────────┐
        ↓           ↓           ↓
    ESP32-S3    ES8311 Codec   GD25Q128 Flash
    DVP摄像头   AP2718AT 麦    ME6211A18/28 LDO

5.2 Componentes principais

ChipModeloFunção
LDOME6217C33P5G (SOT-89-5)Regulação 5V→3.3V
LDOME6211A18M3G (SOT-23)5V→1.8V (núcleo da câmara)
LDOME6211A28M3G ×2 (SOT-23)5V→2.8V (U6=AVDD, U7=DOVDD)
Filtragem de entrada do U1C14 (10μF) + C15 (0.1μF)Entrada do ME6217C33
Filtragem de saída do U1C1 (22μF)Saída do ME6217C33
Proteção contra polaridade inversaNCE3401 P-MOSFETProteção da entrada de alimentação da placa base
Resistência de gateR11 10KΩGate do P-MOS ligado à terra

6. Placa base e gravação

Figura 2: serigrafia dos pinos no verso da placa de núcleo (RXD/TXD/SCL/SDA/5V/GND, etc.)

6.1 Conversor USB-série

ParâmetroEspecificação
ChipCH340K
Interface USBUSB-C (USB1)
Ligação sérieTXD→U0RXD (IO44), RXD→U0TXD (IO43) (cruzada)
Resistências de adaptação USBR4, R5 22R/1% (em série com D+/D-)
DTR/RTSControlo automático de BOOT + EN na gravação com um clique

Figura 3: frente da placa base (USB-C e interfaces de expansão)

6.2 Circuito de gravação com um clique

Utiliza Q1 e Q2 (transístores NPN S8050) para a gravação automática:

Sinal do CH340KControloPino de destino
DTR→ Q1 →ESP32 EN (CHIP_PU)
RTS→ Q2 →ESP32 BOOT (IO0)

Princípio: a ferramenta de gravação USB alterna DTR/RTS para controlar automaticamente a sequência de BOOT e EN, sem necessidade de premir botões manualmente.

6.3 Tabela de pinos do conector placa de núcleo ↔ placa base

Pino da placa basePino da placa de núcleoNome do sinalGPIO do ESP32Função
P1-1P1-1VDD50Saída de alimentação 5V
P1-2P1-2VDD50Saída de alimentação 5V
P1-3P1-3GNDTerra de alimentação
P1-4P1-4GNDTerra de alimentação
P1-5P1-5SDAIO41Dados I2C (partilhado com a câmara/ES8311)
P1-6P1-6SCLIO42Relógio I2C (partilhado com a câmara/ES8311)
P1-7P1-7U0TXDIO43Transmissão da porta série 0 (ligada ao RXD do CH340K)
P1-8P1-8U0RXDIO44Receção da porta série 0 (ligada ao TXD do CH340K)
P2-1P2-1ESP_PIO20Dados diferenciais USB positivo (D+)
P2-2P2-2ESP_NIO19Dados diferenciais USB negativo (D-)
P2-3P2-3VDD33Saída de alimentação 3.3V
P2-4P2-4VDD33Saída de alimentação 3.3V
P2-5P2-5GNDTerra de alimentação
P2-6P2-6GNDTerra de alimentação
P2-7P2-7BOOTIO0Modo de arranque/gravação
P2-8P2-8CHIP_PUENControlo de reset do chip

Figura 4: serigrafia dos pinos no verso da placa base

6.4 Interfaces de expansão da placa base

InterfaceSinais expostosUtilização
P3 (I2C, 4Pin)5V1, GND, SDA, SCLDispositivos I2C externos
P4 (UART, 4Pin)5V1, GND, ESP_P, ESP_NDispositivos USB/série externos

7. Tabela completa de ocupação de GPIO

Total: 33 GPIO ocupados, cerca de 8 GPIO disponíveis.

GPIOFunçãoSinalNotas
IO0BOOTBOOTModo de arranque/gravação (botão S2, pull-up de 10K + 0.1μF de debounce)
IO1DVP D2CAM_Y4Dados de píxel bit2
IO2DVP D1CAM_Y3Dados de píxel bit1
IO3DVP D3CAM_Y5Dados de píxel bit3
IO4DVP D0CAM_Y2Dados de píxel bit0
IO5DVP D4CAM_Y6Dados de píxel bit4
IO6DVP PCLKCAM_PCLKEntrada de relógio de píxel
IO7DVP D5CAM_Y7Dados de píxel bit5
IO8DVP D6CAM_Y8Dados de píxel bit6
IO9DVP XCLKCAM_XCLKRelógio principal da câmara (24MHz)
IO10DVP D7CAM_Y9Dados de píxel bit7
IO11DVP HREFCAM_HREFSincronização de linha
IO12DVP PWDNCAM_PWDNControlo de desligamento da câmara
IO13DVP VSYNCCAM_VSYNCSincronização de quadro
IO14DVP RESETCAM_RESETReset da câmara
IO18WS2812RGB_LED_DINEntrada de dados do LED RGB WS2812
IO19USB diferencialD- (ESP_N)Dados diferenciais USB negativo (D-)
IO20USB diferencialD+ (ESP_P)Dados diferenciais USB positivo (D+)
IO21WS2812 DOUTRGB_LED_DOUTSaída em cascata do WS2812 (disponível quando não há cascata)
IO29SPI CSFlash_CSSeleção de chip da Flash externa
IO30SPI SCLKFlash_CLKRelógio da Flash externa
IO31SPI SOFlash_DOSaída de dados da Flash externa
IO32SPI SIFlash_DIEntrada de dados da Flash externa
IO33SPI HOLDFlash_HOLDHold da Flash externa
IO34SPI WPFlash_WPProteção contra escrita da Flash externa
IO38I2S BCLKI2S_BCLKRelógio de bits do ES8311
IO39I2S MCLKI2S_MCLKRelógio principal do ES8311
IO40I2S DINI2S_DINEntrada de dados do ADC do ES8311
IO41I2C SDAI2C_SDAPartilhado entre câmara + ES8311 + I2C externo
IO42I2C SCLI2C_SCLPartilhado entre câmara + ES8311 + I2C externo
IO43UART0 TXUTXDTransmissão da porta série 0 (CH340K da placa base)
IO44UART0 RXURXDReceção da porta série 0 (CH340K da placa base)
IO47I2S WSI2S_WSSeleção de palavra do ES8311 (LRCK)
IO48I2S DOUTI2S_DOUTSaída de dados do DAC do ES8311
ENCHIP_PURST/ENAtivação/reset (botão S1, pull-up de 10K)

GPIO disponíveis (não ocupados, expansíveis)

GPIOCaracterísticaUtilização sugerida
IO15IO de uso geralExpansão
IO16IO de uso geralExpansão
IO17IO de uso geralExpansão
IO35IO de uso geralExpansão
IO36IO de uso geralExpansão
IO37IO de uso geralExpansão
IO45IO de uso geralExpansão
IO46IO de uso geralExpansão

⚠️ GPIO ocupados: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,19,20,21,29,30,31,32,33,34,38,39,40,41,42,43,44,47,48

Quantidade disponível: 8 GPIO

8. Restrições de projeto essenciais

8.1 Configuração do periférico I2S

  • O ESP32-S3 tem dois controladores I2S:
    • I2S0: atribuído ao codec ES8311 (MCLK=IO39, BCLK=IO38, WS=IO47, DOUT=IO48, DIN=IO40), I2S Duplex bidirecional, com suporte simultâneo a gravação e reprodução
  • Controlo I2C do ES8311: SDA=IO41, SCL=IO42, endereço do dispositivo 0x30

8.2 Coexistência entre o DVP e o DMA do I2S

  • O DVP utiliza o canal DMA do periférico LCD_CAM
  • O ES8311 utiliza o DMA do I2S0 (interface I2S única bidirecional)
  • Não há conflito entre os dois, mas é preciso atenção à largura de banda da PSRAM (8MB de PSRAM é suficiente)
  • GPIO45/46 não têm ligação ao áudio e podem ser usados para outros fins; GPIO47 é usado para I2S WS

8.3 Partilha do barramento I2C

  • IO41 (SDA) + IO42 (SCL) ligam-se simultaneamente à câmara e à interface I2C externa
  • Resistências de pull-up do I2C: R12 (SDA, 4.7K/1%), R13 (SCL, 4.7K/1%), ligadas a VDD33
  • É necessário garantir que o endereço I2C da câmara não entra em conflito com dispositivos externos
  • Endereço I2C predefinido do OV2640: 0x60 (escrita) / 0x61 (leitura) — sem conflito com o ES8311 (0x30)

8.4 Capacidade de Flash suficiente

  • 16MB de Flash — espaço amplo, que permite suportar:
    • Esquema OTA de partição dupla (factory + ota_0 + ota_1)
    • SPIFFS para o painel de administração Web (~1MB)
    • Pacotes de recursos multilingues do XiaoZhi AI (ficheiros .p3)
    • Partição de configuração NVS
    • Espaço reservado para atualizações
  • Não é preciso preocupação com o tamanho do firmware; o AI multi-Agent cabe por completo

8.5 Restrições dos pinos de entrada da câmara DVP

  • D0-D7, VSYNC, HREF e PCLK são pinos de entrada, controlados pelo sensor da câmara
  • No desenvolvimento do controlador, é obrigatório garantir que estes pinos sejam configurados apenas no modo INPUT
  • Os pinos de áudio I2S (38,39,40,47,48) podem ser configurados como saída (suportado pelo ESP32-S3)

9. Sugestões de configuração do ESP-IDF

9.1 Itens essenciais do sdkconfig

Plaintext
# 芯片
CONFIG_IDF_TARGET_ESP32S3=y
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y

# Flash (16MB)
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y

# PSRAM (8MB Octal)
CONFIG_SPIRAM=y
CONFIG_SPIRAM_MODE_OCT=y
CONFIG_SPIRAM_SPEED_80M=y
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=4096
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=49152
CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC=y

# Cache
CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB=y
CONFIG_ESP32S3_DATA_CACHE_64KB=y
CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y

# 摄像头
CONFIG_CAMERA_MODULE_CUSTOM=y
CONFIG_CAMERA_PIN_XCLK=9
CONFIG_CAMERA_PIN_PCLK=6
CONFIG_CAMERA_PIN_VSYNC=13
CONFIG_CAMERA_PIN_HREF=11
CONFIG_CAMERA_PIN_SIOD=41
CONFIG_CAMERA_PIN_SIOC=42
CONFIG_CAMERA_PIN_PWDN=12
CONFIG_CAMERA_PIN_RESET=14
CONFIG_CAMERA_PIN_Y2=4
CONFIG_CAMERA_PIN_Y3=2
CONFIG_CAMERA_PIN_Y4=1
CONFIG_CAMERA_PIN_Y5=3
CONFIG_CAMERA_PIN_Y6=5
CONFIG_CAMERA_PIN_Y7=7
CONFIG_CAMERA_PIN_Y8=8
CONFIG_CAMERA_PIN_Y9=10
CONFIG_CAMERA_XCLK_FREQ=24000000

# 音频 (ES8311 Codec, I2S0)
# ES8311 I2S: MCLK=39, BCLK=38, WS=47, DOUT=48, DIN=40
# ES8311 I2C: SDA=41, SCL=42, addr=0x30

9.2 Configuração da câmara

C
// esp32-camera 引脚配置
camera_config_t config = {
    .pin_pwdn  = 12,
    .pin_reset = 14,
    .pin_xclk  = 9,
    .pin_siod  = 41,
    .pin_sioc  = 42,
    .pin_d7    = 10,
    .pin_d6    = 8,
    .pin_d5    = 7,
    .pin_d4    = 5,
    .pin_d3    = 3,
    .pin_d2    = 1,
    .pin_d1    = 2,
    .pin_d0    = 4,
    .pin_vsync = 13,
    .pin_href  = 11,
    .pin_pclk  = 6,
    .xclk_freq_hz = 24000000,
    .pixel_format = PIXFORMAT_RGB565,  // 或 PIXFORMAT_JPEG
    .frame_size   = FRAMESIZE_QVGA,    // 320x240
    .jpeg_quality = 12,
    .fb_count     = 2,
    .fb_location  = CAMERA_FB_IN_PSRAM,
    .grab_mode    = CAMERA_GRAB_WHEN_EMPTY,
};

Próximos passos