查看: 851|回复: 2

blinker物联网教程——12、调色盘

[复制链接]

该用户从未签到

发表于 2021-3-11 09:45 | 显示全部楼层 |阅读模式
本帖最后由 海神 于 2021-6-7 11:06 编辑

简介

Blinker APP中自带颜色插件,当添加颜色插件后,可以通过调整调色盘来控制实际应用中灯条对应的不同颜色。
本章节中我们使用Blinker APP配合可编程RGB灯条,实现通过颜色组件调色盘来控制RGB灯条不同的颜色。
tsp.png
普通的RGB灯直接是高低电平来点亮或者熄灭。而这种可编程RGB灯与普通的RGB灯有所区别,可编程RGB灯里面是有专门的驱动芯片的。我们想要实现每一颗灯珠指定点亮不同的颜色,需要程序按照灯的时序才能驱动,这样增加了程序的复杂性。但好在我们可以找到可编程RGB灯的程序库文件,我们安装好库文件后,就可以调用功能函数,就能实现点亮其灯珠,而不需要写底层的驱动程序。


硬件

wifiduino主板*1
wifiduino拓展板*1
RGB灯条模块*2

软件

blinker app

代码

  1. #define BLINKER_WIFI

  2. #include <Blinker.h>

  3. char auth[] = "Your Device Secret Key";
  4. char ssid[] = "Your WiFi network SSID or name";
  5. char pswd[] = "Your WiFi network WPA password or WEP key";

  6. // Download Adafruit_NeoPixel library here:
  7. // https://github.com/adafruit/Adafruit_NeoPixel
  8. #include <Adafruit_NeoPixel.h>
  9. #ifdef __AVR__
  10.   #include <avr/power.h>
  11. #endif

  12. #define PIN            D13
  13. #define NUMPIXELS      6
  14. Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

  15. #define RGB_1 "RGBKey"

  16. BlinkerRGB WS2812(RGB_1);

  17. void ws2812_callback(uint8_t r_value, uint8_t g_value, uint8_t b_value, uint8_t bright_value)
  18. {
  19.     digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
  20.     BLINKER_LOG("R value: ", r_value);
  21.     BLINKER_LOG("G value: ", g_value);
  22.     BLINKER_LOG("B value: ", b_value);
  23.     BLINKER_LOG("Rrightness value: ", bright_value);

  24.     pixels.setBrightness(bright_value);

  25.     for(int i = 0; i < NUMPIXELS; i++){
  26.         pixels.setPixelColor(i, r_value, g_value, b_value);
  27.     }
  28.     pixels.show();
  29. }

  30. void setup()
  31. {
  32.     Serial.begin(115200);
  33.     BLINKER_DEBUG.stream(Serial);

  34.     pinMode(LED_BUILTIN, OUTPUT);
  35.     digitalWrite(LED_BUILTIN, LOW);

  36.     Blinker.begin(auth, ssid, pswd);

  37.     pixels.begin();

  38.     WS2812.attach(ws2812_callback);
  39. }

  40. void loop()
  41. {
  42.     Blinker.run();
  43. }
复制代码

在程序里我们用到了驱动ws2812灯带的库文件,所以在上传程序之前,我们需要安装相应的库文件
下载后解压文件夹放在arduinoIDE安装目录下的libraries下,如图

确认无误后,将程序上传至主板。


定制blinker软件界面

找到Blinker下方添加“颜色”控件,并点击添加,点击右上方的锁,解锁修改控件参数
tsp1.png tsp2.png
修改数据键名,键名需要与程序里定义的一致。这里我们将其取名为“RGBKey”,显示文本为“颜色拾取”
编辑好后,点击右上角的勾确认编辑结束。



硬件连接

1、扩展板堆叠在wifiduino主板上
2、在程序中我们定义的是6颗RGBled,但模块上只有3课RGBled,可以将两个灯条模块进行级联。1号模块的out接口(通过3P数据线)连接在2号模块的in接口中。然后将1号模块的in接口连接在传感器扩展板上的D13接口(程序中定义)中。
tsp33.png
观察现象

操作blinker app,通过拾取调色盘中的颜色,控制RGB灯的显示情况。
tsp3.png

进阶

以上实验我们可以调整灯带显示自己想要的不同颜色灯光,让调色盘更加生动适用,我们可以在此基础上给灯添加一些常用的模式,例如看书时我们需要一种适合于看书时的灯光,如睡觉时可能需要的一种较弱的呼吸灯光效果。
那么我们将blinker中再额外添加两个按键控件,这两个按键用来确认两种不同的光效,一种是阅读模式,一种是呼吸模式。
然后再加上一个按键用来做关闭灯光使用。

代码

  1. #define BLINKER_WIFI
  2. #include <Blinker.h>
  3. #include <Adafruit_NeoPixel.h>

  4. Adafruit_NeoPixel rgb_display_D8 = Adafruit_NeoPixel(4,D8,NEO_RGB + NEO_KHZ800);

  5. char auth[] = "48c0xxxxdd";
  6. char ssid[] = "mxxxxxun";
  7. char pswd[] = "cdxxxxx51";
  8. BlinkerRGB RGB1("RGBKey");
  9. void RGB1_callback(uint8_t r_value, uint8_t g_value, uint8_t b_value, uint8_t bright_value) {
  10.   rgb_display_D8.setPixelColor((1)-1, ((r_value & 0xffffff) << 16) | ((g_value & 0xffffff) << 8) | b_value);
  11.   rgb_display_D8.setPixelColor((2)-1, ((r_value & 0xffffff) << 16) | ((g_value & 0xffffff) << 8) | b_value);
  12.   rgb_display_D8.setPixelColor((3)-1, ((r_value & 0xffffff) << 16) | ((g_value & 0xffffff) << 8) | b_value);
  13.   rgb_display_D8.setBrightness(bright_value);
  14. }
  15. uint32_t Wheel(byte WheelPos){
  16.   if(WheelPos < 85){
  17.     return rgb_display_D8.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  18.   }
  19.   else if(WheelPos < 170){
  20.     WheelPos -= 85;
  21.     return rgb_display_D8.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  22.   }
  23.   else{
  24.     WheelPos -= 170;return rgb_display_D8.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  25.   }
  26. }

  27. void rainbow(uint8_t wait){
  28.   uint16_t i, j;
  29.   for(j=0; j<256; j++){
  30.     for(i=0; i<rgb_display_D8.numPixels(); i++){
  31.       rgb_display_D8.setPixelColor(i, Wheel((i+j) & 255));
  32.     }
  33.     rgb_display_D8.show();
  34.     delay(wait);
  35.   }
  36. }

  37. BlinkerButton Button1("btn-abf");
  38. void Button1_callback(const String & state) {
  39.   if (state == "on") {
  40.     rainbow(20);
  41.     for(int i = 0; i < rgb_display_D8.numPixels(); i++){
  42.       rgb_display_D8.setPixelColor(i, Wheel(((i * 256 / rgb_display_D8.numPixels()) + 20) & 255));
  43.     }
  44.     rgb_display_D8.show();
  45.     rgb_display_D8.setBrightness(100);

  46.   }
  47. }
  48. BlinkerButton Button2("btn-abd");
  49. void Button2_callback(const String & state) {
  50.   if (state == "on") {
  51.     rgb_display_D8.setPixelColor((1)-1, 0xffcc00);
  52.     rgb_display_D8.setPixelColor((2)-1, 0xffcc33);
  53.     rgb_display_D8.setPixelColor((3)-1, 0xffcc33);
  54.     rgb_display_D8.setBrightness(100);

  55.   }
  56. }
  57. BlinkerButton Button3("btn-abe");
  58. void Button3_callback(const String & state) {
  59.   if (state == "on") {
  60.     rgb_display_D8.setBrightness(0);

  61.   }
  62. }

  63. void setup(){
  64.   Blinker.begin(auth,ssid,pswd);
  65.   rgb_display_D8.begin();
  66.   RGB1.attach(RGB1_callback);
  67.   Button1.attach(Button1_callback);
  68.   Button2.attach(Button2_callback);
  69.   Button3.attach(Button3_callback);
  70. }

  71. void loop(){
  72.   rgb_display_D8.show();
  73.   Blinker.run();

  74. }
复制代码



blinker软件界面定制

tsp4.png tsp5.png tsp6.png

所以完整界面
tsp7.png

硬件连接与原来保持不变
操作并观察现象

tsp8.png




blinker物联网教程目录

该用户从未签到

发表于 2021-4-12 10:24 | 显示全部楼层
请发下这个灯条购买链接,谢谢。

点评

https://item.taobao.com/item.htm?id=618554695098&ali_trackid=2:mm_1757130109_2269650212_111271350394:1618194387_197_2133661383&union_lens=lensId:MAPI@1618194387@0b847698_3b7d_178c3e6d193_591d@01;recov  详情 回复 发表于 2021-4-12 10:27

该用户从未签到

 楼主| 发表于 2021-4-12 10:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

esp32s2 在Arduino IDE调试USB CDC
esp32s2 在Arduino IDE调
各位大佬好,最近尝试弄清如何使用esp32s2的usb功能。然后在Github上找的代码,放到自
一直想做个飞行器,但是出了电小问题
一直想做个飞行器,但是出
这是主函数的源码 extern uint8_t PWM_PIN[8]; void initOutput();//初始化函数 void
Arduino mega2560 usb串口01被modbus master库占用,无法下载程序
Arduino mega2560 usb串口
Arduino mega2560 用来测试modbus master通信,因未发现串口可选择,直接下载了串口(
DIY炫彩灯带,竟如此简单,更有硬件开发工具免费领!
DIY炫彩灯带,竟如此简单
什么是涂鸦Arduino SDK? Arduino 是全球最流行的开源硬件平台,涂鸦官方推出的 Ardui
.h .cpp源代码转.ino草图
.h .cpp源代码转.ino草图
在Github上下载了源码,是.h 和.cpp文件,请问一下,如何才可以转成可以在arduinoIDE
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表