
Arduino 上手教程



#include "M5Chain.h"
#define RXD_PIN GPIO_NUM_5 // 47 for the other side of Chain DualKey
#define TXD_PIN GPIO_NUM_6 // 48 for the other side of Chain DualKey
Chain M5Chain;
device_list_t *device_list = NULL;
uint16_t device_count = 0;
uint8_t opr_status = 0;
uint8_t buzzer_id = 0;
bool buzzer_found = false;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("===========================");
Serial.println("M5Stack Chain Buzzer Test");
M5Chain.begin(&Serial2, 115200, RXD_PIN, TXD_PIN);
while (!M5Chain.isDeviceConnected()) {
Serial.println("No device connected");
delay(1000);
}
M5Chain.getDeviceNum(&device_count);
device_list = (device_list_t *)malloc(sizeof(device_list_t));
device_list->count = device_count;
device_list->devices = (device_info_t *)malloc(sizeof(device_info_t) * device_count);
M5Chain.getDeviceList(device_list);
for (uint16_t i = 0; i < device_count; i++) {
if (device_list->devices[i].device_type == CHAIN_BUZZER_TYPE_CODE) {
buzzer_id = device_list->devices[i].id;
buzzer_found = true;
Serial.printf("ID[%d] is Chain Buzzer\n", buzzer_id);
break;
}
}
if (!buzzer_found) {
Serial.println("Chain Buzzer not found");
return;
}
// Device ID, RGB brightness (0-100), operation status pointer
M5Chain.setRGBLight(buzzer_id, 50, &opr_status);
// Device ID, buzzer mode, operation status pointer
M5Chain.setBuzzerMode(buzzer_id, BUZZER_MODE_AUTO_PLAY, &opr_status);
}
void loop() {
if (!buzzer_found) {
delay(1000);
return;
}
uint8_t red[] = {255, 0, 0};
M5Chain.setRGBValue(buzzer_id, 0, 1, red, sizeof(red), &opr_status);
// Device ID, frequency (100-10000 Hz), duty (0-100%), duration (ms),
// operation status pointer
M5Chain.setBuzzerAutoPlay(buzzer_id, 1000, 50, 500, &opr_status);
Serial.println("Buzzer: 1000 Hz, 50%, 500 ms");
delay(1000);
uint8_t blue[] = {0, 0, 255};
M5Chain.setRGBValue(buzzer_id, 0, 1, blue, sizeof(blue), &opr_status);
M5Chain.setBuzzerAutoPlay(buzzer_id, 2000, 50, 500, &opr_status);
Serial.println("Buzzer: 2000 Hz, 50%, 500 ms");
delay(1000);
}用 Chain Bridge 连接器连接主控 Chain DualKey 和 Chain Buzzer。连接时需要注意方向,三角箭头从主控 Chain DualKey 指向外侧,如图:
本案例使用 Chain DualKey 的 GPIO5 作为 RX、GPIO6 作为 TX。若将 Chain Buzzer 连接到 Chain DualKey 的另一侧接口,或改用其他主控设备,请根据实际接线修改程序中的 RXD_PIN 和 TXD_PIN。
将以上程序编译并上传至设备,点击 Arduino IDE 右上角的按钮打开串口监视器(Serial Monitor)。可以看到当前播放的蜂鸣器频率、占空比和持续时间。Chain Buzzer 会在红灯和蓝灯之间切换,并交替播放 1000 Hz 和 2000 Hz 的提示音:
例程效果如下: