Constrúyelo tú
Una placa ESP32-S3, una pantalla, un micrófono y un altavoz sobre una protoboard.
Qué vas a montar
Vas a montar, sobre una protoboard, una placa ESP32-S3 con una pantalla, un micrófono y un altavoz con su amplificador. El resultado es un aparato que te escucha, piensa y te contesta con una cara animada en la pantalla.
Este montaje sale del código del firmware y compila, pero todavía no lo hemos armado nosotros.
Piezas
Esto es lo que necesitas y en qué fijarte al comprarlo.
| Pieza | Cantidad | Qué mirar al comprarla |
|---|---|---|
| Placa ESP32-S3 (módulo WROOM N16R8) | Uno | ESP32-S3 con 16 MB de flash y 8 MB de PSRAM octal (N16R8). El firmware activa PSRAM octal a 80 MHz (sdkconfig.defaults.esp32s3:5-7) y usa una tabla de 16 MB. |
| Pantalla ST7789 240x240 | Uno | Controlador ST7789, 240x240, SPI. Kconfig: LCD_ST7789_240X240 (SPI modo 0, con pin CS) o LCD_ST7789_240X240_7PIN (SPI modo 3, módulo sin CS). |
| Micrófono INMP441 | Uno | I2S, un solo canal (izquierdo). |
| Amplificador MAX98357A | Uno | I2S, con altavoz pequeño. |
| Botones y LED | Opcional | Opcionales. El firmware no define botones de volumen ni táctil (config.h:33-35, todos GPIO_NUM_NC). |
| Altavoz pequeño | Uno | El que acompañe a tu amplificador: mira en su hoja de datos la impedancia y la potencia que admite. |
| Protoboard y cables de puente | Una protoboard y un cable por conexión | Cables que casen con tus pines: macho con macho o macho con hembra, según vengan tus módulos. |
| Cable USB | Uno | Tiene que ser un cable de datos: hay cables que solo cargan y con ellos el ordenador no verá la placa. |
Conexiones
El esquema pone la placa en el centro y las piezas alrededor, con un cable por conexión. Elige una pieza, con el ratón, con el dedo o con el teclado (las flechas pasan de una a otra), para ver solo sus cables y su tabla. Elige un cable, o una fila de la tabla de abajo, para ver uno solo.
Es un esquema, no un dibujo de una placa concreta. Tu placa puede tener los pines en otro orden: guíate por el número de GPIO impreso, no por la posición. Una placa suele tener varios pines de masa y de alimentación; el esquema dibuja uno junto a cada pieza para no cruzar cables, y en tu placa vale cualquiera.
Elige una pieza o un cable para ver aquí sus conexiones.
Pantalla ST7789 240x240
| Pin | Va a | Qué lleva |
|---|---|---|
| VCC | 3V3 (carril) | Alimentación 3V3 |
| No viene del firmware; confirmar con la hoja de datos de la pieza. | ||
| GND | GND (carril) | Alimentación GND |
| SDA (MOSI) | GPIO47 | Datos de la pantallaEn el firmware: DISPLAY_MOSI_PIN · config.h:39 |
| SCL (CLK) | GPIO21 | Reloj de la pantallaEn el firmware: DISPLAY_CLK_PIN · config.h:40 |
| CS | GPIO41 | Selección de la pantallaEn el firmware: DISPLAY_CS_PIN · config.h:43 |
| El firmware siempre maneja CS (compact_wifi_board_lcd.cc:85); en el código no es opcional. Los módulos de 7 pines no tienen CS: ese pin queda sin conectar y se usa la variante 7pin (SPI modo 3). | ||
| DC | GPIO40 | Dato o comandoEn el firmware: DISPLAY_DC_PIN · config.h:41 |
| RES (RST) | GPIO45 | Reinicio de la pantallaEn el firmware: DISPLAY_RST_PIN · config.h:42 |
| GPIO45 es pin de arranque (strapping) según la hoja de datos de Espressif; el firmware lo usa tal cual. | ||
| BLK (luz de fondo) | GPIO42 | Luz de fondoEn el firmware: DISPLAY_BACKLIGHT_PIN · config.h:38 |
| PWM, no invertido (DISPLAY_BACKLIGHT_OUTPUT_INVERT false, config.h:132). Si el módulo no tiene BLK la luz queda fija. | ||
Micrófono INMP441
| Pin | Va a | Qué lleva |
|---|---|---|
| VDD | 3V3 (carril) | Alimentación 3V3 |
| No viene del firmware; confirmar con la hoja de datos de la pieza. | ||
| GND | GND (carril) | Alimentación GND |
| L/R | GND (carril) | Alimentación GND |
| El firmware lee solo el canal izquierdo (main/audio/codecs/no_audio_codec.cc:109, slot_mask LEFT). Que L/R a GND sea el canal izquierdo es dato de la hoja de datos del INMP441, no del firmware. | ||
| SCK | GPIO5 | Reloj del micrófonoEn el firmware: AUDIO_I2S_MIC_GPIO_SCK · config.h:15 |
| WS | GPIO4 | Selección de canalEn el firmware: AUDIO_I2S_MIC_GPIO_WS · config.h:14 |
| SD | GPIO6 | Datos del micrófonoEn el firmware: AUDIO_I2S_MIC_GPIO_DIN · config.h:16 |
Amplificador MAX98357A
| Pin | Va a | Qué lleva |
|---|---|---|
| VIN | 5V (carril) | Alimentación 5V |
| No viene del firmware; confirmar el rango admitido antes de elegir 3V3 o 5V. | ||
| GND | GND (carril) | Alimentación GND |
| SD / GAIN | Sin conectar | Nada |
| El firmware no los usa; dejarlos sin conectar es decisión de montaje, no del código. | ||
| BCLK | GPIO15 | Reloj del audioEn el firmware: AUDIO_I2S_SPK_GPIO_BCLK · config.h:18 |
| LRC | GPIO16 | Canal izquierdo o derechoEn el firmware: AUDIO_I2S_SPK_GPIO_LRCK · config.h:19 |
| DIN | GPIO7 | Datos del audioEn el firmware: AUDIO_I2S_SPK_GPIO_DOUT · config.h:17 |
Botón BOOT (opcional)
| Pin | Va a | Qué lleva |
|---|---|---|
| un lado | GPIO0 | BotónEn el firmware: BOOT_BUTTON_GPIO · config.h:32 |
| La placa ya trae el botón BOOT en GPIO0; uno externo va entre GPIO0 y GND (activo en bajo: button.h:14, active_high=false). Pulsarlo durante el arranque entra en la configuración Wi-Fi; después alterna la conversación (compact_wifi_board_lcd.cc:126-133). | ||
LED (opcional)
| Pin | Va a | Qué lleva |
|---|---|---|
| DIN | GPIO48 | LEDEn el firmware: BUILTIN_LED_GPIO · config.h:31 |
| El firmware lo maneja como LED WS2812 direccionable (main/led/single_led.cc:21-24), no como LED simple: un LED normal con resistencia no funciona. Es el LED RGB que traen las placas N16R8. | ||
- Alimentación 3V3
- Masa (GND)
- Pantalla
- Micrófono
- Alimentación 5V
- Otras conexiones
- Amplificador y altavoz
- Botón y LED
Todos los cables
| Pieza | Pin de la pieza | Va a | Qué lleva |
|---|---|---|---|
| Pantalla ST7789 240x240 | Pantalla ST7789 240x240 | 3V3 (carril) | Alimentación 3V3 |
| No viene del firmware; confirmar con la hoja de datos de la pieza. | |||
| Pantalla ST7789 240x240 | Pantalla ST7789 240x240 | GND (carril) | Alimentación GND |
| Pantalla ST7789 240x240 | Pantalla ST7789 240x240 | GPIO47 | Datos de la pantallaEn el firmware: DISPLAY_MOSI_PIN · config.h:39 |
| Pantalla ST7789 240x240 | Pantalla ST7789 240x240 | GPIO21 | Reloj de la pantallaEn el firmware: DISPLAY_CLK_PIN · config.h:40 |
| Pantalla ST7789 240x240 | Pantalla ST7789 240x240 | GPIO41 | Selección de la pantallaEn el firmware: DISPLAY_CS_PIN · config.h:43 |
| El firmware siempre maneja CS (compact_wifi_board_lcd.cc:85); en el código no es opcional. Los módulos de 7 pines no tienen CS: ese pin queda sin conectar y se usa la variante 7pin (SPI modo 3). | |||
| Pantalla ST7789 240x240 | Pantalla ST7789 240x240 | GPIO40 | Dato o comandoEn el firmware: DISPLAY_DC_PIN · config.h:41 |
| Pantalla ST7789 240x240 | Pantalla ST7789 240x240 | GPIO45 | Reinicio de la pantallaEn el firmware: DISPLAY_RST_PIN · config.h:42 |
| GPIO45 es pin de arranque (strapping) según la hoja de datos de Espressif; el firmware lo usa tal cual. | |||
| Pantalla ST7789 240x240 | Pantalla ST7789 240x240 | GPIO42 | Luz de fondoEn el firmware: DISPLAY_BACKLIGHT_PIN · config.h:38 |
| PWM, no invertido (DISPLAY_BACKLIGHT_OUTPUT_INVERT false, config.h:132). Si el módulo no tiene BLK la luz queda fija. | |||
| Micrófono INMP441 | Micrófono INMP441 | 3V3 (carril) | Alimentación 3V3 |
| No viene del firmware; confirmar con la hoja de datos de la pieza. | |||
| Micrófono INMP441 | Micrófono INMP441 | GND (carril) | Alimentación GND |
| Micrófono INMP441 | Micrófono INMP441 | GND (carril) | Alimentación GND |
| El firmware lee solo el canal izquierdo (main/audio/codecs/no_audio_codec.cc:109, slot_mask LEFT). Que L/R a GND sea el canal izquierdo es dato de la hoja de datos del INMP441, no del firmware. | |||
| Micrófono INMP441 | Micrófono INMP441 | GPIO5 | Reloj del micrófonoEn el firmware: AUDIO_I2S_MIC_GPIO_SCK · config.h:15 |
| Micrófono INMP441 | Micrófono INMP441 | GPIO4 | Selección de canalEn el firmware: AUDIO_I2S_MIC_GPIO_WS · config.h:14 |
| Micrófono INMP441 | Micrófono INMP441 | GPIO6 | Datos del micrófonoEn el firmware: AUDIO_I2S_MIC_GPIO_DIN · config.h:16 |
| Amplificador MAX98357A | Amplificador MAX98357A | 5V (carril) | Alimentación 5V |
| No viene del firmware; confirmar el rango admitido antes de elegir 3V3 o 5V. | |||
| Amplificador MAX98357A | Amplificador MAX98357A | GND (carril) | Alimentación GND |
| Amplificador MAX98357A | Amplificador MAX98357A | Sin conectar | Nada |
| El firmware no los usa; dejarlos sin conectar es decisión de montaje, no del código. | |||
| Amplificador MAX98357A | Amplificador MAX98357A | GPIO15 | Reloj del audioEn el firmware: AUDIO_I2S_SPK_GPIO_BCLK · config.h:18 |
| Amplificador MAX98357A | Amplificador MAX98357A | GPIO16 | Canal izquierdo o derechoEn el firmware: AUDIO_I2S_SPK_GPIO_LRCK · config.h:19 |
| Amplificador MAX98357A | Amplificador MAX98357A | GPIO7 | Datos del audioEn el firmware: AUDIO_I2S_SPK_GPIO_DOUT · config.h:17 |
| Botón BOOT (opcional) | Botón BOOT (opcional) | GPIO0 | BotónEn el firmware: BOOT_BUTTON_GPIO · config.h:32 |
| La placa ya trae el botón BOOT en GPIO0; uno externo va entre GPIO0 y GND (activo en bajo: button.h:14, active_high=false). Pulsarlo durante el arranque entra en la configuración Wi-Fi; después alterna la conversación (compact_wifi_board_lcd.cc:126-133). | |||
| LED (opcional) | LED (opcional) | GPIO48 | LEDEn el firmware: BUILTIN_LED_GPIO · config.h:31 |
| El firmware lo maneja como LED WS2812 direccionable (main/led/single_led.cc:21-24), no como LED simple: un LED normal con resistencia no funciona. Es el LED RGB que traen las placas N16R8. | |||
Puedes imprimir esta página: el esquema y la tabla salen completos.
Antes de dar corriente
- Une todas las masas: el GND de cada pieza y el de la placa tienen que estar conectados entre sí.
- Con la placa desenchufada, revisa cada cable contra la tabla, uno por uno, antes de conectar el USB. Y no cambies cables con la placa enchufada.
- El firmware no dice a qué tensión se alimenta cada pieza: comprueba en la hoja de datos de tu módulo a qué tensión se alimenta antes de elegir el carril. Los carriles de la tabla son una propuesta de montaje, no salen del código.
-
Si tu pantalla no tiene pin CS (los módulos de siete pines), ese pin queda sin conectar y necesitas la otra
variante del firmware,
bread-compact-wifi-lcd-240x240-7pin. La variante normal esbread-compact-wifi-lcd-240x240.
Pines que conviene no usar
El firmware ya usa GPIO0 (botón) y GPIO45 (RES), de la lista de arranque, y GPIO40, 41 y 42, que la hoja de datos marca como interfaz JTAG (prioridad 3, usar con cuidado). No hay que añadir otros de esta lista.
GPIO0, GPIO3, GPIO45, GPIO46
Pines de arranque: "GPIO0, GPIO3, GPIO45, GPIO46 : Strapping pins."
GPIO19, GPIO20
"GPIO19, GPIO20 : USB Serial/JTAG interface."
GPIO43, GPIO44
"GPIO43, GPIO44 : UART0 interface."
GPIO26, GPIO27, GPIO28, GPIO29, GPIO30, GPIO31, GPIO32
"SPI0/1 interface connected to the in-package flash and PSRAM, or recommended for the off-package flash and PSRAM."
GPIO33, GPIO34, GPIO35, GPIO36, GPIO37
"on boards embedded with ESP32-S3R8 / ESP32-S3R8V chip, GPIO33 ~ GPIO37 are also not recommended for other uses."
El firmware
El firmware todavía no está publicado: el código se publicará junto con el primer firmware. Este montaje usa la
placa bread-compact-wifi-lcd de XiaoZhi y se compila con ESP-IDF; el script lo busca en
~/esp/esp-idf o en la carpeta de $IDF_PATH.
./construir.sh xiaozhi-protoboard
Con una pantalla de siete pines, sin CS, se compila con la otra variante:
PROTOBOARD_PANTALLA=7pin ./construir.sh xiaozhi-protoboard
El resultado queda en xiaozhi-protoboard/merged-binary.bin, con un flash_args que dice
dónde va cada archivo (se graba en 0x0). El flashear.sh del repositorio todavía no incluye este
montaje: grábalo con la herramienta de grabado de Espressif que uses, siguiendo ese flash_args.
Qué verás en la pantalla
Con este firmware el personaje es un conjunto de caras animadas, una por emoción. Las caras son algo más grandes que la pantalla y se recortan unos píxeles por los bordes. Los avatares descargables de este sitio todavía no funcionan en él.
Si algo no funciona
| Qué pasa | Qué comprobar |
|---|---|
| La pantalla no enciende | Con la placa desenchufada, revisa los cables de datos de la pantalla (SDA, SCL, CS, DC y RES) y el de la luz de fondo (BLK) contra la tabla. Comprueba también que la pantalla esté alimentada. |
| Hay luz pero no se ve la imagen | Mira si tu módulo tiene pin CS. Si no lo tiene, necesita la otra variante del firmware, bread-compact-wifi-lcd-240x240-7pin. |
| No suena | Revisa los cables de datos del amplificador, su alimentación y su masa, y que el altavoz esté bien conectado a su salida. |
| No te oye | Revisa los cables del micrófono, su alimentación y su masa, y el pin L/R, que debe quedar como indica la tabla: el firmware lee solo el canal izquierdo. |
| El ordenador no ve la placa | Usa un cable USB de datos, prueba otro puerto y mantén pulsado el botón BOOT mientras la enchufas. |
| Algo se calienta o huele raro | Desenchúfalo enseguida y busca cables que se toquen o un cable en un pin equivocado. |