Skip to main content

reSpeaker XVF3800 USB 麦克风阵列与 XIAO ESP32S3 RGB 测试

目标​

此代码使用 ESP32S3 微控制器通过 I2C 通信控制 reSpeaker XVF3800 USB 4-Mic Array 上的彩色 LED 环。它通过发送特定命令来改变 LED 的效果、颜色、速度和亮度。ESP32S3 通过 Wire 库(I2C)使用数据字节告诉 XVF3800 要做什么。您可以使用 RGB 值选择自己的颜色,如橙色、红色或蓝色。上传后,LED 将以您选择的效果、颜色和亮度点亮。

pir

工作原理​

这个 Arduino 程序旨在使用 I2C 协议控制 ReSpeaker XVF3800 上的 WS2812 RGB LED 环。它使用 Wire.h 库与 XVF3800 的内部控制器通信,并发送特定指令来调整 LED 效果、颜色、速度和亮度。您可以自定义 LED 行为而无需更改 XVF3800 固件——一切都由 ESP32S3 处理!

代码​

#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.");
}

pir

技术支持与产品讨论​

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...