Skip to main content

reSpeaker XVF3800 USB Mic Array with 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エフェクト、色、速度、明度を調整するための特定の指示を送信します。XVF3800のファームウェアを変更することなくLEDの動作をカスタマイズできます — すべては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...