通过ESP8266模块与Blinker对接,并接入小爱同学,实现语音控制

1. 硬件准备

  • ESP8266开发板
  • 继电器
  • 烧入设备CH340
  • 220V转5V电灯
  • 一条充电器线

2. 软件准备

  • 安装 Arduino IDE 和 ESP8266 扩展包

    Arduino IDE默认没有集成ESP8266扩展包,因此需要单独安装。扩展包可以通过Arduino IDE中开发板管理器安装,也可以使用离线安装包。安装扩展包后,即可在Arduino IDE菜单 > 工具 > 开发板中选择对应的开发板

    其中,Arduino IDE下载需要1.8.x及以上版本,ESP8266扩展需要2.5.0版本

  • 手机下载 点灯科技APP 

3. 开发

  1. 生成Key
    用ESP8266和小爱同学语音实现智能开关
  2. 添加独立设备
    用ESP8266和小爱同学语音实现智能开关
  3. 通过WIFI接入,并选择阿里云.生成key,并复制到剪贴板以备用用ESP8266和小爱同学语音实现智能开关

4. 烧录

  1. 安装 Arduino IDE
  2. 打开light.in 

    1. #define BLINKER_WIFI
    2. #define BLINKER_MIOT_LIGHT//小爱同学
    3. #include <Blinker.h>
    4. char auth[] = "f00c2c8069d2"; //Key
    5. char ssid[] = "H3C_3AAF1E";
    6. char pswd[] = "trj19611120";
    7. bool wsState;
    8. uint8_t wsMode = BLINKER_CMD_MIOT_DAY;
    9. BlinkerButton ButtonAll("btn-lightAll"); //定义按钮数据
    10. BlinkerButton ButtonR("btn-lightR"); //定义按钮数据
    11. BlinkerButton ButtonG("btn-lightG"); //定义按钮数据
    12. BlinkerButton ButtonB("btn-lightB"); //定义按钮数据
    13. BlinkerButton ButtonOffAll("btn-unlightAll");
    14. BlinkerButton ButtonOffR("btn-unlightR");
    15. BlinkerButton ButtonOffG("btn-unlightG");
    16. BlinkerButton ButtonOffB("btn-unlightB");
    17. BlinkerButton Button3("btn-aaa");
    18. bool oState = false;
    19. int counter = 0;
    20. void miotPowerState(const String & state)
    21. {
    22. BLINKER_LOG("need set power state: ", state);
    23. if (state == BLINKER_CMD_ON) { //小爱同学控制开命令
    24. digitalWrite(5, LOW);
    25. digitalWrite(4, LOW);
    26. digitalWrite(0, LOW);
    27. BlinkerMIOT.powerState("on");
    28. BlinkerMIOT.print();
    29. oState = true;
    30. }
    31. else if (state == BLINKER_CMD_OFF) { //小爱同学控制关命令
    32. digitalWrite(5,HIGH);
    33. digitalWrite(4,HIGH);
    34. digitalWrite(0,HIGH);
    35. BlinkerMIOT.powerState("off");
    36. BlinkerMIOT.print();
    37. oState = false;
    38. }
    39. }
    40. void miotMode(uint8_t mode)
    41. {
    42. BLINKER_LOG("need set mode: ", mode);
    43. if (mode == BLINKER_CMD_MIOT_DAY) { //红色
    44. digitalWrite(5, LOW);
    45. digitalWrite(4, HIGH);
    46. digitalWrite(0, HIGH);
    47. }
    48. else if (mode == BLINKER_CMD_MIOT_NIGHT) { //绿色
    49. digitalWrite(5, HIGH);
    50. digitalWrite(4, LOW);
    51. digitalWrite(0, HIGH);
    52. // Your mode function
    53. }
    54. else if (mode == BLINKER_CMD_MIOT_COLOR) { //蓝色
    55. digitalWrite(5, HIGH);
    56. digitalWrite(4, HIGH);
    57. digitalWrite(0, LOW);
    58. }
    59. else if (mode == BLINKER_CMD_MIOT_WARMTH) { //黄色
    60. digitalWrite(5, LOW);
    61. digitalWrite(4, LOW);
    62. digitalWrite(0, HIGH);
    63. }
    64. else if (mode == BLINKER_CMD_MIOT_TV) { //紫色
    65. digitalWrite(5, LOW);
    66. digitalWrite(4, HIGH);
    67. digitalWrite(0, LOW);
    68. }
    69. else if (mode == BLINKER_CMD_MIOT_READING) { //青色
    70. digitalWrite(5, HIGH);
    71. digitalWrite(4, LOW);
    72. digitalWrite(0, LOW);
    73. }
    74. else if (mode == BLINKER_CMD_MIOT_COMPUTER) {
    75. digitalWrite(5, HIGH);
    76. digitalWrite(4, HIGH);
    77. digitalWrite(0, LOW);
    78. }
    79. wsMode = mode;
    80. BlinkerMIOT.mode(mode);
    81. BlinkerMIOT.print();
    82. }
    83. void miotQuery(int32_t queryCode) //小爱同学控制
    84. {
    85. BLINKER_LOG("MIOT Query codes: ", queryCode);
    86. switch (queryCode)
    87. {
    88. case BLINKER_CMD_QUERY_ALL_NUMBER :
    89. BLINKER_LOG("MIOT Query All");
    90. BlinkerMIOT.powerState(oState ? "on" : "off");
    91. BlinkerMIOT.print();
    92. break;
    93. case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
    94. BLINKER_LOG("MIOT Query Power State");
    95. BlinkerMIOT.powerState(oState ? "on" : "off");
    96. BlinkerMIOT.print();
    97. break;
    98. default :
    99. BlinkerMIOT.powerState(oState ? "on" : "off");
    100. BlinkerMIOT.print();
    101. break;
    102. }
    103. }
    104. void dataRead(const String & data) // 如果未绑定的组件被触发,则会执行其中内容
    105. {
    106. BLINKER_LOG("Blinker readString: ", data);
    107. Blinker.vibrate();
    108. uint32_t BlinkerTime = millis();
    109. Blinker.print("millis", BlinkerTime);
    110. }
    111. void buttonAll_callback(const String & state) //点灯app内控制按键触发
    112. {
    113. digitalWrite(5,LOW);
    114. digitalWrite(4,LOW);
    115. digitalWrite(0,LOW);
    116. BLINKER_LOG("get button state:on", state);
    117. }
    118. void buttonR_callback(const String & state) //点灯app内控制按键触发
    119. {
    120. digitalWrite(5,LOW);
    121. BLINKER_LOG("get button state:on", state);
    122. }
    123. void buttonG_callback(const String & state) //点灯app内控制按键触发
    124. {
    125. digitalWrite(4,LOW);
    126. BLINKER_LOG("get button state:on", state);
    127. }
    128. void buttonB_callback(const String & state) //点灯app内控制按键触发
    129. {
    130. digitalWrite(0,LOW);
    131. BLINKER_LOG("get button state:on", state);
    132. }
    133. void buttonOffAll_callback(const String & state) //点灯app内控制按键触发
    134. {
    135. digitalWrite(5,HIGH);
    136. digitalWrite(4,HIGH);
    137. digitalWrite(0,HIGH);
    138. BLINKER_LOG("get button state:off", state);
    139. }
    140. void buttonOffR_callback(const String & state) //点灯app内控制按键触发
    141. {
    142. digitalWrite(5,HIGH);
    143. BLINKER_LOG("get button state:off", state);
    144. }
    145. void buttonOffG_callback(const String & state) //点灯app内控制按键触发
    146. {
    147. digitalWrite(4,HIGH);
    148. BLINKER_LOG("get button state:off", state);
    149. }
    150. void buttonOffB_callback(const String & state) //点灯app内控制按键触发
    151. {
    152. digitalWrite(0,HIGH);
    153. BLINKER_LOG("get button state:off", state);
    154. }
    155. void button3_callback(const String & state) //点灯app内控制按键触发
    156. {
    157. BLINKER_LOG("get button state:on", state);
    158. Blinker.print(state);
    159. if(state=="on"){
    160. digitalWrite(5,LOW);
    161. // Button3.print("on");
    162. }else if(state =="off"){
    163. digitalWrite(5,HIGH);
    164. // Button3.print("off");
    165. }
    166. }
    167. void setup()
    168. {
    169. Serial.begin(115200);
    170. BLINKER_DEBUG.stream(Serial);
    171. pinMode(5, OUTPUT); //定义io口为输出
    172. pinMode(4, OUTPUT); //定义io口为输出
    173. pinMode(0, OUTPUT); //定义io口为输出
    174. digitalWrite(5, HIGH); //定义io默认为高电平
    175. digitalWrite(4, HIGH); //定义io默认为高电平
    176. digitalWrite(0, HIGH); //定义io默认为高电平
    177. wsState = true;
    178. Blinker.begin(auth, ssid, pswd);
    179. Blinker.attachData(dataRead);
    180. BlinkerMIOT.attachPowerState(miotPowerState);
    181. BlinkerMIOT.attachMode(miotMode);
    182. BlinkerMIOT.attachQuery(miotQuery);
    183. ButtonAll.attach(buttonAll_callback);
    184. ButtonR.attach(buttonR_callback);
    185. ButtonG.attach(buttonG_callback);
    186. ButtonB.attach(buttonB_callback);
    187. ;
    188. ButtonOffAll.attach(buttonOffAll_callback);
    189. ButtonOffR.attach(buttonOffR_callback);
    190. ButtonOffG.attach(buttonOffG_callback);
    191. ButtonOffB.attach(buttonOffB_callback);
    192. Button3.attach(button3_callback);
    193. }
    194. void loop()
    195. {
    196. Blinker.run();
    197. }
  3. 点击开发者管理器搜索8266选择安装 (不建议选最新版本)用ESP8266和小爱同学语音实现智能开关
  4. 安装后退出,烧入器插入电脑,选择端口

用ESP8266和小爱同学语音实现智能开关

5. 移动端

  1. 烧入成功后,打开电灯科技APP,设备在线用ESP8266和小爱同学语音实现智能开关
  2. 点击右上角的 + 配置按钮
    用ESP8266和小爱同学语音实现智能开关
  3. 电灯与继电器接线
    用ESP8266和小爱同学语音实现智能开关
  4. 通过以上方式,就可以在APP上进行基本的控制开关了

6. 语音控制

  1. 下载米家APP
  2. 进入其他平台设备,找到点灯科技,进行绑定账号同步设备
    用ESP8266和小爱同学语音实现智能开关
  3. 打开小爱APP训练计划
    用ESP8266和小爱同学语音实现智能开关
  4. 以上,便实现了全部的软件控制与语音控制,感兴趣的小伙伴可以试一下,成本大概20左右。