语音助手-智能家居

 

 

 

-项目概述-

寝室里,我离门最远,寝室的大学牲小朋友们却总是早早的爬上了床,要我去开门关灯,这很烦!

技术宅需要解放生产力。要不,弄一个语音助手吧!

 目的:

  • 语音控制所有接入接口的开关器件
  • PWM分级控制模拟量器件(如灯的亮度)
  • 多种电平兼容
  • 场景分离控制(如主卧的灯,次卧的灯)
  • 自定义APP(可选择WiFi连接)
  • 屏幕显示接入设备,设备在线显示,离线警告,电压显示,温度显示,时显
  • 可在断网情况下手动控制

-项目预览-

 

-项目框架-

主要思路:小爱同学接入点灯科技,点灯科技留出接口供ESP8266使用,ESP8266与51串口通讯,51控制所有硬件外设。

项目框架如下:

 

 

-项目代码-

主框架代码很简单,如下:

  1 #define BLINKER_WIFI
  2 #define BLINKER_MIOT_LIGHT 
  3 #include <Blinker.h>
  4 
  5 #define LED   2  
  6 char auth[] = "077eb2b1e5a6"; // blinker 秘钥
  7 char ssid[] = "PotatoWorld";  // wifi 名字
  8 char pswd[] = "jrj827508";    // wifi 密码
  9 
 10 bool wsState;
 11 
 12 uint8_t wsMode = BLINKER_CMD_MIOT_DAY;
 13 // 新建组件对象
 14 BlinkerButton Button1("btn-abc");//注意:要和APP组件’数据键名’一致
 15  
 16 // 按下BlinkerAPP按键即会执行该函数
 17 void button1_callback(const String & state) {
 18  BLINKER_LOG("get button state: ", state);
 19  digitalWrite(D3, !digitalRead(D3));
 20  digitalWrite(LED, !digitalRead(LED)); 
 21  Blinker.vibrate();
 22 }
 23  
 24 //小爱电源类操作的回调函数:
 25 //当小爱同学向设备发起控制, 设备端需要有对应控制处理函数 
 26 void miotPowerState(const String & state)
 27 {
 28     BLINKER_LOG("need set power state: ", state);
 29 
 30     if (state == BLINKER_CMD_ON) {
 31         //digitalWrite(LED_BUILTIN, LOW);
 32         digitalWrite(D3, HIGH);
 33         BlinkerMIOT.powerState("on");
 34         BlinkerMIOT.print();
 35     }
 36     else if (state == BLINKER_CMD_OFF) {
 37         //digitalWrite(LED_BUILTIN, HIGH);
 38         digitalWrite(D3, LOW);
 39         BlinkerMIOT.powerState("off");
 40         BlinkerMIOT.print();
 41     }
 42 }
 43 
 44 void miotMode(uint8_t mode)
 45 {
 46     BLINKER_LOG("need set mode: ", mode);
 47 
 48     if (mode == BLINKER_CMD_MIOT_DAY) {
 49         
 50     }
 51     else if (mode == BLINKER_CMD_MIOT_NIGHT) {
 52         
 53     }
 54     else if (mode == BLINKER_CMD_MIOT_COLOR) {
 55        
 56     }
 57     else if (mode == BLINKER_CMD_MIOT_WARMTH) {
 58       
 59     }
 60     else if (mode == BLINKER_CMD_MIOT_TV) {
 61        
 62     }
 63     else if (mode == BLINKER_CMD_MIOT_READING) {
 64         // 床上灯光
 65         digitalWrite(D1, HIGH); 
 66     }
 67     else if (mode == BLINKER_CMD_MIOT_COMPUTER) {
 68         
 69         digitalWrite(D1, LOW);
 70     }
 71 
 72     wsMode = mode;
 73 
 74     BlinkerMIOT.mode(mode);
 75     BlinkerMIOT.print();
 76 }
 77 
 78 void setup() {
 79  // 初始化串口,并开启调试信息,调试用可以删除
 80  Serial.begin(115200); 
 81  pinMode(D1, OUTPUT);
 82  digitalWrite(D1, LOW);
 83  
 84  BLINKER_DEBUG.stream(Serial);
 85  // 初始化IO
 86  pinMode(LED, OUTPUT); 
 87  pinMode(D1, OUTPUT);
 88  pinMode(D3, OUTPUT);
 89  
 90  digitalWrite(LED, HIGH); // 初始化 led 高电平 ,则灯熄灭状态
 91  digitalWrite(D3, LOW);
 92  digitalWrite(D1, LOW);
 93  
 94  
 95  // 初始化blinker
 96  Blinker.begin(auth, ssid, pswd);
 97  Button1.attach(button1_callback);
 98  
 99  //小爱同学务必在回调函数中反馈该控制状态 
100  BlinkerMIOT.attachPowerState(miotPowerState);//注册回调函数
101  BlinkerMIOT.attachMode(miotMode);
102 }
103 
104 
105 void loop() {
106  Blinker.run();
107 }

 

  • 点灯科技的开发文档:https://diandeng.tech/doc
  • 点灯科技接入ESP8266详细教程:https://www.bilibili.com/video/BV1jg4y1q7mQ/
  • 点灯科技接入米家:https://zhuanlan.zhihu.com/p/128643917

 

-项目槽点-

 

posted @ 2023-01-17 22:21  北極星  阅读(166)  评论(0编辑  收藏  举报