语音助手-智能家居
寝室里,我离门最远,寝室的大学牲小朋友们却总是早早的爬上了床,要我去开门关灯,这很烦!
技术宅需要解放生产力。要不,弄一个语音助手吧!
目的:
- 语音控制所有接入接口的开关器件
- 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