在arduino环境下 利用blinker蓝牙控制esp32实现ws2812b切换颜色以及功能的代码
时间: 2024-02-28 16:52:40 浏览: 159
控制器:用于控制WS2812B LED的Arduino代码
以下是在 Arduino 环境下,利用 Blinker 蓝牙控制 ESP32 实现 WS2812B 切换颜色以及功能的代码:
```c++
#include <Blinker.h>
#include <FastLED.h>
#define LED_PIN 27 // WS2812B 灯带接 ESP32 的 GPIO27 引脚
#define LED_NUM 10 // 灯带上 LED 的数量
CRGB leds[LED_NUM];
WidgetLED rgb_led1("rgb_led1");
void setColor(uint8_t red, uint8_t green, uint8_t blue) {
for (int i = 0; i < LED_NUM; i++) {
leds[i].setRGB(red, green, blue);
}
FastLED.show();
}
void initColor() {
setColor(255, 0, 0); // 初始颜色为红色
}
void setup() {
Serial.begin(115200);
// 初始化 Blinker 库
Blinker.begin("ESP32_LED", "Your device key"); // 请替换为自己的设备密钥
// 初始化 WS2812B 灯带
FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, LED_NUM);
// 初始化颜色
initColor();
}
void setColorCallback(const String &color) {
Serial.println(color);
// 将颜色字符串转换成 RGB 值
uint8_t red = (uint8_t) strtol(&color[1], NULL, 16);
uint8_t green = (uint8_t) strtol(&color[3], NULL, 16);
uint8_t blue = (uint8_t) strtol(&color[5], NULL, 16);
// 设置灯带颜色
setColor(red, green, blue);
}
void blinkCallback(const String &state) {
Serial.println(state);
// 设置闪烁效果
if (state == BLINKER_CMD_ON) {
rgb_led1.blink();
} else {
rgb_led1.off();
}
}
void loop() {
// 处理 Blinker 接收到的消息
Blinker.run();
// 延迟 10ms,降低 CPU 占用率
delay(10);
}
```
在 Blinker 库中,`WidgetLED` 类可以帮助我们控制灯的状态。在上面的代码中,我们使用 `rgb_led1` 对象来控制一个 LED 灯的闪烁效果。
在 `setup()` 函数中,我们初始化了 Blinker 库和 WS2812B 灯带,并设置了初始颜色。
在 `setColorCallback()` 函数中,我们解析了从 Blinker 发来的颜色字符串,并调用 `setColor()` 函数来设置灯带颜色。
在 `blinkCallback()` 函数中,我们根据 Blinker 发来的消息来控制 LED 灯的闪烁效果。
最后,在 `loop()` 函数中,我们调用 `Blinker.run()` 函数来处理 Blinker 接收到的消息,并在每次循环结束后延迟 10ms,以降低 CPU 占用率。
阅读全文