2

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

 2 years ago
source link: https://www.kejiwanjia.com/jiaocheng/85189.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

📖 目录 [显示]

通过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 
  1. 生成Key
    75
  2. 添加独立设备
    75
  3. 通过WIFI接入,并选择阿里云.生成key,并复制到剪贴板以备用75
  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选择安装 (不建议选最新版本)
  4. 安装后退出,烧入器插入电脑,选择端口

5. 移动端

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

6. 语音控制

  1. 下载米家APP
  2. 进入其他平台设备,找到点灯科技,进行绑定账号同步设备
  3. 打开小爱APP训练计划
  4. 以上,便实现了全部的软件控制与语音控制,感兴趣的小伙伴可以试一下,成本大概20左右。
-> 加入科技玩家交流群组:点击加入 <-
注意:
1.文中二维码和链接可能带有邀请性质,请各位玩家自行抉择。
2.请勿通过链接填写qq号与密码、银行卡号与密码等个人隐私信息。
3.禁止纯拉人头,拉app注册等信息,发现必小黑屋。
4.同一种信息仅发一次,多发会被删除。
5.文章关联方不想展示也可以微信站长“socutesheep”删除。

玩家不容易,请Ta吃颗糖。

给TA买糖
如果我的文章对你有帮助,快来当第一个赞赏的人吧!
3

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK