当前位置:   article > 正文

通过Blinker实现小爱同学控制台灯_blinker点灯

blinker点灯

使用ESP8266实现小爱同学控制灯的熄灭以及亮度。

一、准备材料

1、带有小爱同学的设备(小爱音箱、小米手机等等)

2、ESP8266模块

 

二、基于vscode的ESP8266开发环境搭建

搭建环境参考

1、博客 图文手把手教程--ESP8266开发环境搭建(开发平台VSCODE+PlatformIO,框架Arduino、RTOS_SDK)

2、视频VScode(PlatfromIO)嵌入式开发(ESP32)(ESP8266)(STM32)

三、在blinker中绑定设备

1、下载手机端blinker程序

2、在blinker中添加设备并且获得密钥

 

 

 

 

 

四、程序编写

1、在PlatformIO工程中添加blinker库

1.下载blinker库(如果这个链接无法下载则使用备用下载链接

2.将下载好的库添加到PlatformIO工程中

1)复制解压后的库

2)将库复制到工程中的库下

 

2、程序编写

  1. #define BLINKER_WIFI  
  2. #define BLINKER_MIOT_LIGHT   //设置小爱灯类库
  3. #define BLINKER_ALIGENIE_LIGHT    //设置天猫灯类库
  4. //#define BLINKER_APCONFIG //支持APconfig配网
  5. #include <Blinker.h>
  6. //#include <TimerOne.h>
  7. //#include <MsTimer2.h>               //定时器库的 头文件
  8. //#include <Ticker.h>           //定时器库的 头文件
  9. //Ticker flipper; //实例化定时器对象
  10. #define LED_BUILTIN 2           //LED
  11. const int  buttonPin = 0;          //按键
  12. char auth[] = "34dd0f500434";   //将密钥复制进来
  13. char ssid[] = "TP-LINK_0099";   //接入WIFI名称
  14. char pswd[] = "888888";      //WIFI密码
  15. // 新建组件对象
  16. BlinkerButton Button1("btn-abc");//按键
  17. BlinkerSlider SliderW("ran-ezp"); //亮度滑条
  18. BlinkerNumber Number1("num-abc");
  19. int counter = 0;
  20. int32_t  timerdelay = 0;
  21. bool oState = false;
  22. bool brightnessState =0;
  23. int32_t  brightness1 = 800;    // how bright the LED is
  24. int32_t  colorW=100;
  25. int fadeAmount =10;    // 亮度变化速度
  26. // app上按下按键即会执行该函数
  27. void button1_callback(const String & state)
  28. {
  29.    BLINKER_LOG("get button state: ", state);  //串口打印
  30.        if (state=="on")
  31.       {                     //如果state是on状态
  32.        digitalWrite(LED_BUILTIN, HIGH);        //LED开
  33.        Button1.color("red");        //按键图标颜色为红色
  34.        Button1.print("on");        //状态反馈至按键,键值保存为“on
  35.        oState = 1;
  36.       }
  37.    else if(state=="off")
  38.       {
  39.        digitalWrite(LED_BUILTIN, LOW);       //LED关
  40.        Button1.color("gray");            //按键图标颜色变灰
  41.        Button1.print("off");          //状态反馈至按键,键值保存为“off
  42.         oState =0;
  43.       }
  44.      Blinker.vibrate();                  //振动,默认值为200ms
  45. }
  46. //*******如果小爱有对设备进行操作就执行下面
  47. void miotPowerState(const String & state)
  48. {
  49.    BLINKER_LOG("need set power state: ", state);
  50.    if (state == BLINKER_CMD_ON) {
  51.           //如果state是on状态
  52.        digitalWrite(LED_BUILTIN, HIGH);        //LED开
  53.        Button1.color("red");        //按键图标颜色为红色
  54.        BlinkerMIOT.powerState("on");
  55.        BlinkerMIOT.print();
  56.        Button1.print("on");        //状态反馈至按键,键值保存为“on
  57.        oState = 1;
  58.   }
  59.    else if (state == BLINKER_CMD_OFF) {
  60.        digitalWrite(LED_BUILTIN, LOW);       //LED关
  61.        Button1.color("gray");            //按键图标颜色变灰
  62.        BlinkerMIOT.powerState("off");
  63.        BlinkerMIOT.print();
  64.        Button1.print("off");          //状态反馈至按键,键值保存为“off
  65.         oState =0;
  66.   }
  67. }
  68. void miotQuery(int32_t queryCode)
  69. {
  70.    BLINKER_LOG("MIOT Query codes: ", queryCode);
  71.    switch (queryCode)
  72.   {
  73.        case BLINKER_CMD_QUERY_ALL_NUMBER :
  74.            BLINKER_LOG("MIOT Query All");
  75.            BlinkerMIOT.powerState(oState ? "on" : "off");
  76.            BlinkerMIOT.print();
  77.            break;
  78.        case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
  79.            BLINKER_LOG("MIOT Query Power State");
  80.            BlinkerMIOT.powerState(oState ? "on" : "off");
  81.            BlinkerMIOT.print();
  82.            break;
  83.        default :
  84.            BlinkerMIOT.powerState(oState ? "on" : "off");
  85.            BlinkerMIOT.print();
  86.            break;
  87.   }
  88. }
  89. //*******如果天猫精灵有对设备进行操作就执行下面
  90. void aligeniePowerState(const String & state)
  91. {
  92.    BLINKER_LOG("need set power state: ", state);
  93.    if (state == BLINKER_CMD_ON) {
  94.        digitalWrite(LED_BUILTIN, HIGH);        //LED开
  95.        Button1.color("red");        //按键图标颜色为红色
  96.        BlinkerAliGenie.powerState("on");
  97.        BlinkerAliGenie.print();
  98.        Button1.print("on");        //状态反馈至按键,键值保存为“on
  99.        oState = 1;
  100.   }
  101.    else if (state == BLINKER_CMD_OFF)
  102.   {
  103.         digitalWrite(LED_BUILTIN, LOW);       //LED关
  104.        Button1.color("gray");            //按键图标颜色变灰
  105.        BlinkerAliGenie.powerState("off");
  106.        BlinkerAliGenie.print();
  107.        Button1.print("off");          //状态反馈至按键,键值保存为“off
  108.         oState =0;
  109.   }
  110. }
  111. void aligenieQuery(int32_t queryCode)
  112. {
  113.    BLINKER_LOG("AliGenie Query codes: ", queryCode);
  114.    switch (queryCode)
  115.   {
  116.        case BLINKER_CMD_QUERY_ALL_NUMBER :
  117.            BLINKER_LOG("AliGenie Query All");
  118.            BlinkerAliGenie.powerState(oState ? "on" : "off");
  119.            BlinkerAliGenie.print();
  120.            break;
  121.        case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
  122.            BLINKER_LOG("AliGenie Query Power State");
  123.            BlinkerAliGenie.powerState(oState ? "on" : "off");
  124.            BlinkerAliGenie.print();
  125.            break;
  126.        default :
  127.            BlinkerAliGenie.powerState(oState ? "on" : "off");
  128.            BlinkerAliGenie.print();
  129.            break;
  130.   }
  131. }
  132. void sliderW_callback(int32_t value)    //滑条回调函数,滑条值范围0~1000
  133. {
  134.  if(value<100)                          //如果滑条值小于200~20关灯,方便操作),执行状态为“off”的按键开关回调函数
  135. {
  136.    button1_callback("off");            //关灯,转换图标,图标变灰,反馈为“off
  137. }
  138.  else                                  //滑条值≥20
  139. {
  140.    button1_callback("on");             //执行状态为“on”的按键开关回调函数
  141. //PWM输出,LED低电平有效,PWM占空比:(1000-value/1024;
  142. //analogWriteRange()--修改范围,默认值为1023
  143. //ananlogWriteFreq()--修改频率,默认值为1K;  
  144.    analogWrite(LED_BUILTIN, value);  
  145.    brightness1=value;
  146.   SliderW.print(brightness1);          
  147.    BLINKER_LOG("get slider value: ", (1000-value));  //在APP端调试窗口输出led亮度值
  148. }
  149. }
  150. void miotBright(const String & bright)  //小爱亮度的控制接口
  151. {
  152.    BLINKER_LOG("need set brightness: ", bright);
  153.    colorW = bright.toInt();
  154.    brightness1=colorW *10;
  155.      if(brightness1<100)                          //如果滑条值小于200~20关灯,方便操作),执行状态为“off”的按键开关回调函数
  156.     {
  157.        button1_callback("off");            //关灯,转换图标,图标变灰,反馈为“off
  158.     }
  159.      else                                  //滑条值≥20
  160.     {
  161.        button1_callback("on");             //执行状态为“on”的按键开关回调函数
  162.    
  163.    //PWM输出,LED低电平有效,PWM占空比:(1000-value/1024;
  164.    //analogWriteRange()--修改范围,默认值为1023
  165.    //ananlogWriteFreq()--修改频率,默认值为1K;  
  166.        analogWrite(LED_BUILTIN, brightness1);  
  167.       SliderW.print(brightness1);          
  168.    //   BLINKER_LOG("get slider value: ", (1000-value)); //在APP端调试窗口输出led亮度值
  169.     }
  170.    BLINKER_LOG("now set brightness: ", colorW);
  171.    
  172.    BlinkerMIOT.brightness(colorW);
  173.    BlinkerMIOT.print();
  174. }
  175. //如果本地开关有动作执行下面手动模式
  176. void KeyDetection(void)
  177. {
  178.  if(digitalRead(buttonPin)==LOW) //如果检测到按键按下
  179. {    
  180.      Blinker.delay(3);                   //延时10ms
  181.      timerdelay++;
  182.      if(timerdelay>60)               //长按1.5s
  183.     {
  184.         if(oState==1)
  185.         {
  186.        if(brightnessState ==1)
  187.           {
  188.            brightness1=brightness1+fadeAmount;
  189.            if(brightness1>1000){brightness1=1000;brightnessState =0; }
  190. //             brightness1=900;
  191.           }
  192.        if(brightnessState ==0)
  193.           {
  194.                        brightness1=brightness1-fadeAmount;
  195.            if(brightness1<100){brightness1=100;brightnessState =1; }
  196. //             brightness1=300;
  197.           }  
  198.            analogWrite(LED_BUILTIN, brightness1);  
  199.         }
  200.     }
  201. }
  202.  else                          //按键抬起
  203. {
  204.         if(timerdelay>60)               //长按1.5s
  205.     {         if(oState==1)
  206.         {
  207. //               brightnessState = !brightnessState;
  208.                SliderW.print(brightness1);  
  209. //               BLINKER_LOG("ran-ezp:", brightness1); //在APP端调试窗口输出led亮度值
  210.         }
  211.     }
  212.      else if(timerdelay>0&&timerdelay<60)       //如果按下少于1s大于10ms
  213.     {                
  214.        oState = !oState;
  215.        if(oState==1)  
  216.           {
  217.             button1_callback("on");
  218.           }
  219.          else
  220.         {          
  221.             button1_callback("off");
  222.            
  223.         }
  224.        
  225.     }
  226.       timerdelay=0;
  227. }  
  228. }
  229. // 如果未绑定的组件被触发,则会执行其中内容
  230. void dataRead(const String & data)
  231. {
  232.    BLINKER_LOG("Blinker readString: ", data);
  233.    counter++;
  234.    Number1.print(counter);
  235. }
  236. void setup()
  237. {
  238.    // 初始化串口
  239.    Serial.begin(115200);
  240.    BLINKER_DEBUG.stream(Serial);
  241.    BLINKER_DEBUG.debugAll();
  242.    
  243.    // 初始化有LED的IO
  244.    pinMode(LED_BUILTIN, OUTPUT);
  245.    digitalWrite(LED_BUILTIN, HIGH);   //亮灯
  246.  // 初始化blinker
  247.    Blinker.begin(auth, ssid, pswd);  
  248. //   Blinker.begin(auth);     //AP配网函数
  249.    Button1.attach(button1_callback);  //注册回调函数
  250.    SliderW.attach(sliderW_callback);
  251. //   flipper.attach(0.1, flip);//每隔0.1秒执行一次回调函数
  252.    BlinkerMIOT.attachPowerState(miotPowerState);        //小爱语音操作注册函数
  253.    BlinkerMIOT.attachBrightness(miotBright);
  254.    BlinkerMIOT.attachQuery(miotQuery);                  //小爱语音操作回调函数
  255.    BlinkerAliGenie.attachPowerState(aligeniePowerState);//天猫语音操作注册函数
  256.    BlinkerAliGenie.attachQuery(aligenieQuery);          //天猫语音操作回调函数
  257. }
  258. void loop() {
  259.    Blinker.run();
  260.    KeyDetection();  
  261. }

3、编译下载以及串口调试

五、在米家中添加设备

1、下载米家APP

2、添加ESP8266设备

 

 

 

 

添加了设备之后我们就可以使用绑定到米家中的小爱同学控制ESP8266的灯的熄灭了

参考

点灯科技-点灯物联网解决方案

通过Blinker使小爱同学控制ATK-ESP8266模块_wu568760312的博客-CSDN博客_blinker小爱

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号