系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、实现功能
- 二、所需材料
- 三、导线连接
- 四、软件开发
-
- 1.开发环境建设
- 2.编写程序
- 五 手机操作部分
-
- 1.blinkerAPP
- 2. 米家APP
- 3.小米音箱APP
- 六、实物部分
-
- 1.实物图片
- 总结
前言
本科二年级通过比赛接触arduino,怀着对arduino的热爱买了arduino套件,但是想多做少,arduino买了套件后,我一直在吃灰;大学毕业后,我一直有创造智能家居的想法。下班后,我有更多的业余时间,所以在吃灰的帮助下arduino套件,然后购买其他材料来改造卧室。
一、实现功能
通过手机blinke的APP可检查卧室温湿度,控制卧室吊灯、台灯、窗帘开关;卧室吊灯、台灯、窗帘、空调开关可通过小爱扬声器控制。 注:空调开关采用小爱扬声器自带的模块,未进行编程开发。
二、所需材料
1.伺服舵机 2. L298N电机驱动模块 3. 12V2A直流电源适配器 4. WiFiduino物联网开发板 5. 减速电机 6. 面包板 7. 导线若干 8.DHT11温湿度模块 9.电位器 10. 卷拉式手拉拉链拉珠头拉绳卷轴 11. 有小爱同学的设备(小米音箱,小米手机)
三、导线连接
1.将WiFiduino的VCC接口与GND接口通过导线外接面包板 、-位置。 2.DHT11模块的VCC接口连接面包板 ,GND接口连接面包板-,DATA接口连接WiFiduino的D8接口。 3.继电器的VCC接口连接面包板 ,GND接口连接面包板-,IN接口连接WiFiduino的D4接口。 4.L298N模块的ENA连接面包板 ,IN1、IN2分别连接WiFiduino的D2、D3接口。 5.伺服舵机红线黄连接面包板。 、棕色线连接面包板-,黄色线连接到WiFiduino的D7接口。 6.继电器输出连接到台灯的导线上,作为台灯的开关; 7.12V2A直流电源输出连接L289N的输入端,L289N的OUT1、OUT2连接减速电机的输入端。
四、软件开发
注:确保小爱音箱和WiFiduino连接到同一无线网络
1.开发环境建设
不再重复详细的环境建设步骤,网上教程很多, 如果有困难,可以加我讨论。
本步骤主要完成: arduino 软件安装 esp8266 库安装 blinker 库安装
2.编写程序
注:小编买的小爱同学有红外发射功能,所以没有编写空调控制代码。
#define BLINKER_WIFI #define BLINKER_PRINT Serial #define BLINKER_MIOT_SENSOR ////小被定义为
传感器设备 #define BLINKER_MIOT_MULTI_OUTLET ///设置为小爱多个插座的模式 #include <Blinker.h>//引入blinker模块 #include <Servo.h>//引入舵机模块 #include <DHT.h>//引入温湿度模块 //0.WIFI配置关键值 char auth[] = "bd48bafdbef2";///点灯技术关键值 char ssid[] = "赚赚赚"; //要连入WIFI的名称 char pswd[] = "3.1415926535";//要连入WIFI的密码 //1.界面定义 #define CURT_1 D2 //定义窗帘接口1 #define CURT_2 D3 //定义窗帘接口2 #define TABLE_L D4 //定义台灯接口 #define DHTPIN D8 //定义温湿度传感器接口 #define ROOM_L D7 //定义卧室灯舵机接口 #define DHTTYPE DHT11 //定义温湿度传感器接口类型为DHT11 //2.舵机与传感器配置 Servo lamp_servo;//定义灯舵机 DHT dht(DHTPIN, DHTTYPE);//温湿度采集函数 float humi_read = 0, temp_read = 0; //3.点灯科技按键配置 BlinkerSlider RAN_CUR("窗帘");//定义窗帘滑块 BlinkerButton BTN_TABLE_L("台灯");//定义台灯滑块 BlinkerButton BTN_ROOM_L("卧室灯");//定义卧室灯开关按键 BlinkerNumber HUMI("湿度");//定义湿度度数据显示 BlinkerNumber TEMP("温度");//定义温度度数据显示 //4.点灯科技按键反馈函数 //4.1窗帘反馈馈函数 void RAN_CUR_callback(int32_t value_CUR) { BLINKER_LOG("get slider value: ", value_CUR); if ((0<=value_CUR)&(value_CUR<=33)){ //减速电机正转、上拉窗帘 digitalWrite(CURT_1,HIGH); digitalWrite(CURT_2,LOW); } else if((34<=value_CUR)&(value_CUR<=67)){ digitalWrite(CURT_1,LOW); digitalWrite(CURT_2,LOW); } else//减速电机反转、下拉窗帘 { digitalWrite(CURT_1,LOW); digitalWrite(CURT_2,HIGH); } } //4.2卧室灯反馈函数 void BTN_ROOM_L_callback(const String & state_ROOM_L) { BTN_ROOM_L.text("卧室灯");//按键名字 BLINKER_LOG("get button state: ", state_ROOM_L); if (state_ROOM_L== BLINKER_CMD_ON) { //开关按键 打开 lamp_servo.write(40); BTN_ROOM_L.color("#00FF00");//按键颜色 BTN_ROOM_L.print("on"); } else if(state_ROOM_L== BLINKER_CMD_OFF) { lamp_servo.write(130); BTN_ROOM_L.color("#000000");//按键颜色 BTN_ROOM_L.print("off"); } else BLINKER_LOG("get button state: ", state_ROOM_L); } //4.3台灯反馈函数 void BTN_TABLE_L_callback(const String & state_TABLE_L) { BTN_TABLE_L.text("台灯");//按键名 BLINKER_LOG("get button state: ", state_TABLE_L);//获取按键状态 if (state_TABLE_L == "on") { //开关按键 打开 digitalWrite(TABLE_L, HIGH); BTN_TABLE_L.color("#00FF00");//按键颜色为绿色 BTN_TABLE_L.print("on"); } else { digitalWrite(TABLE_L, LOW); BTN_TABLE_L.color("#000000");//按键颜色为黑色 BTN_TABLE_L.print("off"); } } //4.4用于温湿度的心跳包 void heartbeat() { //反馈湿度数据 HUMI.print(humi_read); HUMI.unit("%");//设置温度单位 HUMI.color("#fddb10"); //反馈温度数据 TEMP.print(temp_read); TEMP.unit("°");//设置湿度单位 TEMP.color("#fddb01"); } //5.小爱同学语音输出模块 char i; bool ostate[5]={ false}; //5.1小爱同学语音输出反馈模块 void miotPowerState(const String & state, uint8_t num) { BLINKER_LOG("need set outlet: ", num, ", power state: ", state); i = 0; //初始化 if (num == 0) { i = 0; } else if (num == 1) { i = 1; } else if (num == 2) { i = 2; } else if (num == 3) { i = 3; } else if (num == 4) { i = 4; } else if (num == 5) { i = 5; } if (state == BLINKER_CMD_ON) { switch (i) { case 0://窗帘反馈 digitalWrite(CURT_1, LOW); digitalWrite(CURT_2, HIGH); delay(20000); digitalWrite(CURT_1, LOW); digitalWrite(CURT_2, LOW); BlinkerMIOT.powerState("on", num); BlinkerMIOT.print(); ostate[num] = true; break; case 1://台灯反馈函数 digitalWrite(TABLE_L, HIGH); digitalWrite(i, !digitalRead(TABLE_L)); BlinkerMIOT.powerState("on", num); BlinkerMIOT.print(); ostate[num] = true; break; case 2://卧室灯反馈函数 lamp_servo.write(40); BlinkerMIOT.powerState("on", num); BlinkerMIOT.print(); ostate[num] = true; break; case 3: break; case 4: break; default: BlinkerMIOT.powerState("on", num); BlinkerMIOT.print(); ostate[num] = true; } } else if (state == BLINKER_CMD_OFF) { switch (i) { case 0://窗帘反馈 digitalWrite(CURT_1, HIGH); digitalWrite(CURT_2, LOW); delay(8000); digitalWrite(CURT_1, LOW); digitalWrite(CURT_2, LOW); BlinkerMIOT.powerState("off", num); BlinkerMIOT.print(); ostate[num] = false; break; case 1://台灯反馈函数 digitalWrite(TABLE_L, LOW); digitalWrite(i, !digitalRead(TABLE_L)); BlinkerMIOT.powerState("off", num); BlinkerMIOT.print(); ostate[num] = false; break; case 2://卧室灯反馈函数 lamp_servo.write(130); BlinkerMIOT.powerState("0ff", num); BlinkerMIOT.print(); ostate[num] = false; break; case 3: break; case 4: break; default: BlinkerMIOT.powerState("off", num); BlinkerMIOT.print(); ostate[num] = false; } } } //5.2小爱状态监测模块模块 void miotQuery(int32_t queryCode, uint8_t num){ BLINKER_LOG("AliGenie Query outlet: ", num, ", codes: ", queryCode); switch (queryCode){ case BLINKER_CMD_QUERY_ALL_NUMBER : BLINKER_LOG("MIOT Query All"); BlinkerMIOT.powerState(ostate[num] ? "on" : "off", num); BlinkerMIOT.print(); break; case BLINKER_CMD_QUERY_POWERSTATE_NUMBER : BLINKER_LOG("MIOT Query Power State"); BlinkerMIOT.powerState(ostate[num] ? "on" : "off", num); BlinkerMIOT.print(); break; default : BlinkerMIOT.powerState(ostate[num] ? "on" : "off", num); BlinkerMIOT.print(); break; } } void setup(){ Serial.begin(115200); BLINKER_DEBUG.stream(Serial); Blinker.begin(auth, ssid, pswd); //窗帘接口赋值与初始化 pinMode(CURT_1, OUTPUT); pinMode(CURT_2, OUTPUT); digitalWrite(CURT_1, LOW); digitalWrite(CURT_2, LOW); //台灯接口口赋值与初始化 pinMode(TABLE_L, OUTPUT); digitalWrite(TABLE_L, LOW); //卧室灯舵机接口赋值与初始化 lamp_servo.attach(ROOM_L); lamp_servo.write(90); //blinke按键赋值模块 RAN_CUR.attach(RAN_CUR_callback);//添加窗帘模块 BTN_TABLE_L.attach(BTN_TABLE_L_callback);//添加台灯模块 BTN_ROOM_L.attach(BTN_ROOM_L_callback);//添加卧室灯模块 Blinker.attachHeartbeat(heartbeat);//添加温湿度模块心跳包 dht.begin(); //语音控制模块 BlinkerMIOT.attachPowerState(miotPowerState); BlinkerMIOT.attachQuery(miotQuery); } void loop(){ Blinker.run(); humi_read = dht.readHumidity();//读取湿度 temp_read = dht.readTemperature();//读取温度 Blinker.delay(10); }
五 手机操作部分
1.blinkerAPP
参考文章:小爱同学+blinker+esp8266实现千里点灯
此步骤主要完成: 下载blinker APP 安装并添加按钮
通过以上两步给blinker界面添加温度、湿度显示的,添加台灯、卧室灯的,添加窗帘。添加按钮后的界面如下图所示。
2. 米家APP
下载米家APP,注册账户,之后按如下图操作。
3.小米音箱APP
下载小米音箱APP,注册账户,之后按如下图操作。
=------------------------------------------------------------------------------------------------------------------------------------= =------------------------------------------------------------------------------------------------------------------------------------= =------------------------------------------------------------------------------------------------------------------------------------=
六、实物部分
1.实物图片
2.测试视频 测试视频点击这里。
总结
本文仅仅简单介绍了使用WiFiduino、小爱同学、blinker进行智慧卧室改造的过程。Arduino还有许多其他强大的功能,希望大家一起学习。