系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、实现功能
  • 二、所需材料
  • 三、导线连接
  • 四、软件开发
    • 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");}elseBLINKER_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还有许多其他强大的功能,希望大家一起学习。

WiFiduino+blinker+小爱同学打造智慧卧室相关推荐

  1. ESP8266+Blinker+小爱同学舵机控制开关

    ESP8266 文章目录 ESP8266 一.简介 二.硬件连接 三.代码 四.blinker软件配置 总结 一.简介 最近想着用我们的小爱同学语音控制卧室的灯,这样就可以在睡觉的时候不用下床了,之前 ...

  2. ESP8266 Blinker 小爱同学 本地控制 手机配网 四路开关 物联网 arduino编程详细注释

    作为一名注册12年CSDN的电脑爱好者,没有从事喜欢的IT行业还是颇有那么一丝丝的想念. 通过一段时间的arduino编程和ESP8266学习,参考示例程序等,完善了自己的一份小爱同学四开关控制的程序 ...

  3. esp8266接入Blinker小爱同学控制WS2812的RGB以及亮度调节

    esp8266接入Blinker小爱同学控制WS2812的RGB以及亮度调节 所需准备的库: Adafruit_NeoPixel Blinker 开发板选择 1.源代码部分: 源代码: //WS281 ...

  4. Blinker+小爱同学+四路继电器+(RFID+舵机模拟开门)代码

    #define BLINKER_WIFI //支持wifi //#define BLINKER_ESP_SMARTCONFIG //Smartconfig或者手机微信扫码自动配网,代码配网请注释此条 ...

  5. ESP8266用点灯app接入小爱同学

    ESP8266接入小爱同学-智能LED台灯或风扇 首先用的是arduino IDE对esp8266进行的编译,arduino对8266编译环境的具体配置可参考 1.利用WiFiManager库实现自动 ...

  6. ESP8266利用Bliker、小爱同学和本地按钮控制4路开关

    ESP8266利用Bliker.小爱同学和本地按钮控制4路开关 Blinker函数说明: Button.color("#FFFF00"); //设置app按键是纯黄色,16进制颜色 ...

  7. ESP8266 快速对接小爱同学 语音控制

    ESP8266 快速对接小爱同学 一.环境资料 二.安装配置 三.下载Blinker手机APP,并更改符合小米小爱协议的代码 四.米家绑定Blinker点灯 一.环境资料 1. 硬件:ESP8266 ...

  8. ESP8266-NodeMCU项目(二):ESP8266-NodeMCU+Blinker+DHT11+小爱同学

    错开の折腾经历:ESP8266 NodeMCU 文章目录 前言 一.Blinker 1.Blinker--点灯科技 特性: blinker应用场景: 二.任务开始 1.实验材料 2.安装库文件 3.安 ...

  9. 小米手机连接奔驰android,小米牵手奔驰!小爱同学启动人机交互,打造AI智能化的用车体验...

    雷军多次强调,"AI+IoT"是小米的核心战略之一.在2018年上海世界人工智能大会上,雷军结合小米的发展,预测人类将进入AI和IoT结合的万物智慧互联新时代,率先提出了" ...

最新文章

  1. 【廖雪峰python入门笔记】多重循环
  2. pandas编写自定义函数高亮显示(highlight)dataframe中的指定内容(数值)(highlighting a specific values or content of a panda
  3. golang辟谣之模板编程
  4. 误落迷宫2(BFS)
  5. 【ZOJ - 2968 】Difference Game (贪心,思维模拟)
  6. AOP处理事务静、动态代理(jdk方法)
  7. AI编辑SVG格式的相关问题
  8. python-gui-pyqt5的使用方法-8--实际案例可参考使用
  9. 【Vim命令大全】史上最全的Vim命令
  10. FGMap一个仿GoogleMap的WebGIS客户端
  11. iot_programe Makefile hacking
  12. 北斗短报文通信原理及功能介绍
  13. 【PX4自动驾驶用户指南】距离传感器
  14. Python这些操作,逆天且实用
  15. (下篇)校园小程序前端部署教程-优雅草老八写
  16. C语言文件操作函数总结——超详细
  17. 为什么需要重写 equals方法?
  18. 如果万物数连,那么建筑应当如何与大数据结合?
  19. Navicat Premium和Navicat for MySQL的区别
  20. IDF实验室-伟人的名字

热门文章

  1. 天风非银: 券商结算基金的现状和潜力
  2. 高/低压供配电系统设计——安科瑞变电站电力监控系统的应用
  3. mysql pmt函数怎么用_在Golang中如何正确地使用database/sql包访问数据库
  4. layui批量获取复选框的值
  5. 2022年理财规划师前景与现状分析
  6. SAP销售返利(回扣)实现方法
  7. html代码字号div style=,div字体大小设置 css设置div中字体大小尺寸样式
  8. Laravel使用SFTP上传文件
  9. python from import什么意思_Python import与from import使用及区别介绍
  10. 微信公众号自定义回复(关键词回复:文本消息、图文消息)