请教同时接入小爱小度天猫精灵的问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2719|回复: 0

[求助] 请教同时接入小爱小度天猫精灵的问题

[复制链接]
发表于 2020-7-14 18:47 | 显示全部楼层 |阅读模式
新人请教,同时接入小爱、小度、天猫精灵,请帮忙看看代码是否存在问题

  1. #define BLINKER_WIFI
  2. #define BLINKER_MIOT_OUTLET
  3. #define BLINKER_DUEROS_OUTLET
  4. #define BLINKER_ALIGENIE_OUTLET

  5. #include <Blinker.h>

  6. char auth[] = "4c55****e9**"; // Blinker APP中添加设备时生成的Secret Key
  7. char ssid[] = "tymishop"; // WIFI名称
  8. char pswd[] = "155*****425"; // WIFI密码

  9. const int GPIO = D1; // 定义继电器输入引脚为GPIO5

  10. #define BUTTON_1 "btn-abc"
  11. // 新建组件对象
  12. BlinkerButton Button1(BUTTON_1);

  13. bool oState = false;

  14. // 按下按键即会执行该函数
  15. void button1_callback(const String & state)
  16. {
  17.     BLINKER_LOG("get button state: ", state);
  18.     if (state == BLINKER_CMD_ON) {
  19.         BLINKER_LOG("Toggle on!");

  20.         Button1.icon("fal fa-light-switch-on");
  21.         Button1.color("#0000FF");
  22.         Button1.text("ON");
  23.         Button1.print("on");

  24.         oState = true;
  25.     } else if(state == BLINKER_CMD_OFF) {
  26.         BLINKER_LOG("Toggle off!");

  27.         Button1.icon("fal fa-light-switch-off");
  28.         Button1.color("#FF0000");
  29.         Button1.text("OFF");
  30.         Button1.print("off");

  31.         oState = false;
  32.     }
  33.    
  34.     BlinkerMIOT.powerState(oState ? "on" : "off");
  35.     BlinkerMIOT.print();
  36.     BlinkerDuerOS.powerState(oState ? "on" : "off");
  37.     BlinkerDuerOS.report();
  38.     BlinkerAliGenie.powerState(oState ? "on" : "off");
  39.     BlinkerAliGenie.print();

  40.     digitalWrite(LED_BUILTIN, oState);
  41.     digitalWrite(GPIO, oState);
  42. }

  43. // 小爱电源类的操作接口
  44. // 用户自定义电源类操作的回调函数
  45. void miotPowerState(const String & state)
  46. {
  47.     BLINKER_LOG("need set power state: ", state);

  48.     if (state == BLINKER_CMD_ON) {
  49.         digitalWrite(LED_BUILTIN, HIGH);
  50.         digitalWrite(GPIO, LOW);

  51.         BlinkerMIOT.powerState("on");
  52.         BlinkerMIOT.print();

  53.         oState = true;
  54.     }
  55.     else if (state == BLINKER_CMD_OFF) {
  56.         digitalWrite(LED_BUILTIN, LOW);
  57.         digitalWrite(GPIO, HIGH);

  58.         BlinkerMIOT.powerState("off");
  59.         BlinkerMIOT.print();

  60.         oState = false;
  61.     }
  62. }

  63. // 小爱设备查询接口
  64. // 用户自定义设备查询的回调函数
  65. void miotQuery(int32_t queryCode)
  66. {
  67.     BLINKER_LOG("MIOT Query codes: ", queryCode);

  68.     switch (queryCode)
  69.     {
  70.         case BLINKER_CMD_QUERY_ALL_NUMBER :
  71.             BLINKER_LOG("MIOT Query All");
  72.             BlinkerMIOT.powerState(oState ? "on" : "off");
  73.             BlinkerMIOT.print();
  74.             break;
  75.         case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
  76.             BLINKER_LOG("MIOT Query Power State");
  77.             BlinkerMIOT.powerState(oState ? "on" : "off");
  78.             BlinkerMIOT.print();
  79.             break;
  80.         default :
  81.             BlinkerMIOT.powerState(oState ? "on" : "off");
  82.             BlinkerMIOT.print();
  83.             break;
  84.     }
  85. }

  86. // 小度电源类的操作接口
  87. // 用户自定义电源类操作的回调函数
  88. void duerPowerState(const String & state)
  89. {
  90.     BLINKER_LOG("need set power state: ", state);

  91.     if (state == BLINKER_CMD_ON) {
  92.         digitalWrite(LED_BUILTIN, HIGH);
  93.         digitalWrite(GPIO, LOW);

  94.         BlinkerDuerOS.powerState("on");
  95.         BlinkerDuerOS.print();

  96.         oState = true;
  97.     }
  98.     else if (state == BLINKER_CMD_OFF) {
  99.         digitalWrite(LED_BUILTIN, LOW);
  100.         digitalWrite(GPIO, LOW);

  101.         BlinkerDuerOS.powerState("off");
  102.         BlinkerDuerOS.print();

  103.         oState = false;
  104.     }
  105. }

  106. // 小度设备查询接口
  107. // 用户自定义设备查询的回调函数
  108. void duerQuery(int32_t queryCode)
  109. {
  110.     BLINKER_LOG("DuerOS Query codes: ", queryCode);

  111.     switch (queryCode)
  112.     {
  113.         case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
  114.             BLINKER_LOG("DuerOS Query power state");
  115.             BlinkerDuerOS.powerState(oState ? "on" : "off");
  116.             BlinkerDuerOS.print();
  117.             break;
  118.         case BLINKER_CMD_QUERY_TIME_NUMBER :
  119.             BLINKER_LOG("DuerOS Query time");
  120.             BlinkerDuerOS.time(millis());
  121.             BlinkerDuerOS.print();
  122.             break;
  123.         default :
  124.             BlinkerDuerOS.powerState(oState ? "on" : "off");
  125.             BlinkerDuerOS.print();
  126.             break;
  127.     }
  128. }

  129. // 天猫精灵电源类的操作接口
  130. // 用户自定义电源类操作的回调函数
  131. void aligeniePowerState(const String & state)
  132. {
  133.     BLINKER_LOG("need set power state: ", state);

  134.     if (state == BLINKER_CMD_ON) {
  135.         digitalWrite(LED_BUILTIN, HIGH);
  136.         digitalWrite(GPIO, LOW);

  137.         BlinkerAliGenie.powerState("on");
  138.         BlinkerAliGenie.print();

  139.         oState = true;
  140.     }
  141.     else if (state == BLINKER_CMD_OFF) {
  142.         digitalWrite(LED_BUILTIN, LOW);
  143.         digitalWrite(GPIO, HIGH);

  144.         BlinkerAliGenie.powerState("off");
  145.         BlinkerAliGenie.print();

  146.         oState = false;
  147.     }
  148. }

  149. // 天猫精灵设备查询接口
  150. // 用户自定义设备查询的回调函数
  151. void aligenieQuery(int32_t queryCode)
  152. {
  153.     BLINKER_LOG("AliGenie Query codes: ", queryCode);

  154.     switch (queryCode)
  155.     {
  156.         case BLINKER_CMD_QUERY_ALL_NUMBER :
  157.             BLINKER_LOG("AliGenie Query All");
  158.             BlinkerAliGenie.powerState(oState ? "on" : "off");
  159.             BlinkerAliGenie.print();
  160.             break;
  161.         case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
  162.             BLINKER_LOG("AliGenie Query Power State");
  163.             BlinkerAliGenie.powerState(oState ? "on" : "off");
  164.             BlinkerAliGenie.print();
  165.             break;
  166.         default :
  167.             BlinkerAliGenie.powerState(oState ? "on" : "off");
  168.             BlinkerAliGenie.print();
  169.             break;
  170.     }
  171. }


  172. // 如果未绑定的组件被触发,则会执行其中内容
  173. void dataRead(const String & data)
  174. {
  175.     BLINKER_LOG("Blinker readString: ", data);

  176.     Blinker.vibrate();

  177.     uint32_t BlinkerTime = millis();

  178.     Blinker.print("millis", BlinkerTime);

  179.     BlinkerDuerOS.powerState("off");
  180.     BlinkerDuerOS.report();
  181. }

  182. void setup()
  183. {
  184.     // 初始化串口
  185.     Serial.begin(115200);
  186.     BLINKER_DEBUG.stream(Serial);
  187.     BLINKER_DEBUG.debugAll();

  188.     // 初始化有LED的IO
  189.     pinMode(LED_BUILTIN, OUTPUT);
  190.     digitalWrite(LED_BUILTIN, LOW);
  191.     pinMode(GPIO, OUTPUT); // 设定GPIO0为输出引脚
  192.     digitalWrite(GPIO, HIGH); // 设定GPIO0为高电位

  193.     // 初始化blinker
  194.     Blinker.begin(auth, ssid, pswd);
  195.     Blinker.attachData(dataRead);

  196.     Button1.attach(button1_callback);

  197.     BlinkerMIOT.attachPowerState(miotPowerState); // 注册小爱电源类操作回调函数
  198.     BlinkerMIOT.attachQuery(miotQuery); // 注册小爱设备查询的回调函数
  199.     BlinkerDuerOS.attachPowerState(duerPowerState); // 注册小度电源类操作回调函数
  200.     BlinkerDuerOS.attachQuery(duerQuery);  // 注册小度设备查询的回调函数
  201.     BlinkerAliGenie.attachPowerState(aligeniePowerState); // 注册天猫精灵电源类操作回调函数
  202.     BlinkerAliGenie.attachQuery(aligenieQuery); // 注册天猫精灵设备查询的回调函数
  203. }

  204. void loop() {
  205.     Blinker.run();
  206. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 16:32 , Processed in 0.097113 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表