WiFiduino+blinker+小爱同学打造智慧卧室

news/2024/11/16 17:58:36/

系列文章目录


文章目录

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


http://www.ppmy.cn/news/675376.html

相关文章

Swagge文档根据IP进行授权拦截

我们在上一篇文章中介绍了swagger加密码的方式和代码。 swagger添加访问密码_zlfjavahome的博客-CSDN博客 但是有的公司有更严格的要求&#xff0c;比如限制IP访问&#xff0c;这篇文章就讲一下如何通过IP进行访问控制&#xff0c;只允许特定的IP地址访问Swagger接口。 第一…

Python实现发送电子邮件功能

大家好&#xff0c;以编程方式发送电子邮件可以成为自动化通信过程的一种强大方式&#xff0c;本文将探讨如何使用Python发送电子邮件&#xff0c;介绍如何设置SMTP服务器、为Gmail生成应用程序密码&#xff0c;并提供使用smtplib库发送电子邮件的逐步指南。 在深入研究编码之…

maven-plugin的理解与定义

文章目录 一、plugin的定义与配置1. 自定义plugin2. 绑定goal到maven执行周期3. 定义goal默认的maven周期4. 命令执行当前pom定义的execution5. plugin运行时采用最新dependencies6. 插件配置不在子pom生效 二、扩展 一、plugin的定义与配置 1. 自定义plugin 参考: 官网 基本…

【Docker私有仓库】创建与配置

Docker私有仓库 一、 私有仓库搭建与配置 &#xff08;1&#xff09;拉取私有仓库镜像&#xff08;此步省略&#xff09; docker pull registry&#xff08;2&#xff09;启动私有仓库容器 docker run -di --nameregistry -p 5000:5000 registry&#xff08;3&#xff09;打…

【python】解决TypeError: ‘str‘ object cannot be interpreted as an integer

当用python的input输入一个数字时 其格式默认为string格式 所以要用int()转换为int格式 比如 import math def opgg(): # x input("请输入第一个数字") # y input("请输入第二个数字") x int(input("请输入第一个数字")) …

lol最克制诺手的英雄_LOL:62个上单英雄,竟只有3个能克制诺手?第1名很多人想不到!...

在英雄联盟中&#xff0c;诺克萨斯之手一直是个非常热门的英雄&#xff0c;以暴力的伤害能力&#xff0c;极强的对面能力和大招斩杀技能的快感&#xff0c;深受很多玩家的喜欢&#xff0c;无论是低分段还是高分段&#xff0c;使用诺手上单的玩家都很多。诺手在上路可以算是食物…

wegame饥荒一直登录中_WeGame到底有多难用?“LOL大神自己编写一个插件,完美代替WG”...

前言&#xff1a;英雄联盟作为一款已经运营了十年之久的游戏&#xff0c;已经有了非常多的玩家和粉丝&#xff0c;随时游戏的不断发展&#xff0c;比赛机制的不断完善&#xff0c;这款游戏正在逐渐的走向世界。电竞行业的越来越热门&#xff0c;导致腾讯官方加大了对游戏的监管…

SAP PP T-Code

事务码 描述(中英文) CNR1 Create Work Center 生成工作中心 CNR2 Change Work Center 更改工作中心 CNR3 Display Work Center 显示工作中心 CR00 Resource Planning Menu 资源计划菜单 CR01 Create Work Center 生成工作中心 CR02 Change Work Center 更改工作中心 CR03 Disp…