reSpeaker XVF3800 USB Mic Array com teste RGB no XIAO ESP32S3
Objetivo
Este código controla o anel de LEDs coloridos na reSpeaker XVF3800 USB 4-Mic Array usando um microcontrolador ESP32S3 via comunicação I2C. Ele altera o efeito, a cor, a velocidade e o brilho dos LEDs enviando comandos específicos. O ESP32S3 informa ao XVF3800 o que fazer usando bytes de dados por meio da biblioteca Wire (I2C). Você pode escolher suas próprias cores usando valores RGB como laranja, vermelho ou azul. Depois de fazer o upload, os LEDs acendem com o efeito, a cor e o brilho que você selecionou.

Como Funciona
Este sketch Arduino foi desenvolvido para controlar o anel de LEDs RGB WS2812 no ReSpeaker XVF3800 usando o protocolo I2C. Ele utiliza a biblioteca Wire.h para se comunicar com o controlador interno do XVF3800 e enviar instruções específicas para ajustar o efeito, a cor, a velocidade e o brilho dos LEDs. Você pode personalizar o comportamento dos LEDs sem alterar o firmware do XVF3800 — tudo é controlado a partir do ESP32S3!
Código
#include <Wire.h>
#define XMOS_ADDR 0x2C
#define GPO_SERVICER_RESID 20
#define GPO_SERVICER_RESID_LED_EFFECT 12
#define GPO_SERVICER_RESID_LED_COLOR 16
#define GPO_SERVICER_RESID_LED_SPEED 15
#define GPO_SERVICER_RESID_LED_BRIGHTNESS 13
void setup() {
Wire.begin();
Serial.begin(115200);
delay(1000);
setLEDEffect(1); // LED effect ID 1
setLEDColor(0xFF8800); // LED color: orange (24-bit RGB)
setLEDSpeed(1); // Speed: 1
setLEDBrightness(255); // Brightness: max
}
void loop() {
// No repeating actions needed
}
void xmos_write_bytes(uint8_t resid, uint8_t cmd, uint8_t *value, uint8_t write_byte_num) {
Wire.beginTransmission(XMOS_ADDR);
Wire.write(resid);
Wire.write(cmd);
Wire.write(write_byte_num);
for (uint8_t i = 0; i < write_byte_num; i++) {
Wire.write(value[i]);
}
Wire.endTransmission();
}
void setLEDEffect(uint8_t effect) {
uint8_t payload[1] = { effect };
xmos_write_bytes(GPO_SERVICER_RESID, GPO_SERVICER_RESID_LED_EFFECT, payload, 1);
Serial.println("LED effect set.");
}
void setLEDColor(uint32_t color) {
uint8_t payload[4] = {
(uint8_t)(color & 0xFF), // Red
(uint8_t)((color >> 8) & 0xFF), // Green
(uint8_t)((color >> 16) & 0xFF), // Blue
0x00 // Reserved (some systems may expect 4 bytes)
};
xmos_write_bytes(GPO_SERVICER_RESID, GPO_SERVICER_RESID_LED_COLOR, payload, 4);
Serial.println("LED color set.");
}
void setLEDSpeed(uint8_t speed) {
uint8_t payload[1] = { speed };
xmos_write_bytes(GPO_SERVICER_RESID, GPO_SERVICER_RESID_LED_SPEED, payload, 1);
Serial.println("LED speed set.");
}
void setLEDBrightness(uint8_t brightness) {
uint8_t payload[1] = { brightness };
xmos_write_bytes(GPO_SERVICER_RESID, GPO_SERVICER_RESID_LED_BRIGHTNESS, payload, 1);
Serial.println("LED brightness set.");
}

Suporte Técnico & Discussão de Produto
Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte e garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.