最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

语音助手-智能家居

来源:博客园
  • 文章结构:
  • 项目概述
  • 成品预览
  • 项目框架
  • 文档,代码
  • 项目槽点

-项目概述-

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

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


【资料图】

目的:

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

-项目预览-

-项目框架-

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

项目框架如下:

-项目代码-

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

1 #define BLINKER_WIFI  2 #define BLINKER_MIOT_LIGHT   3 #include   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

-项目槽点-

关键词: 回调函数 分级控制 小朋友们