ESP8266接入小爱同学—智能LED台灯或风扇
首先用的是arduino IDE对esp8266进行的编译,arduino对8266编译环境的具体配置可参考
1.利用WiFiManager库实现自动配网,亦能够满足在不同WiFi下可以不用更改程序即可链接不同的WiFi
2.利用esp8266 OTA功能实现应用程序在局域网内升级,解除数据线限制
3.通过MQTT协议实现摆脱局域网限制的远程控制,实现远程控制灯的亮和灭
4.接入自己小米手机的米家软件,实现小爱同学语音控制
5.利用另一个机械开关实现网络和机械双控制,以应对网络不稳定情况的发生
6.利用继电器进行控制,实际上可以不用,但因为自己没用过,所以借此机会应用一下,了解一下
另外还想利用一下esp8266多任务处理的Ticker库,因为感觉只用几个引脚控制一个灯有点大材小用,比如可以再连接温湿度传感器或者0.96寸oled屏幕之类的
其他说明
1.如果绑定blinker账号后,点灯科技列表中没有设备,可能是您设备中没有烧写小爱支持程序,或者设备没有成功上线。
2.绑定blinker账号后,通过手机上的小爱同学也可以控制设备
3.blinker App中对设备进行修改或新增后,可在米家App中,通过 我的>其他平台设备>点灯科技>同步设备
但是后面实际做的时候由于时间不充足,所以砍掉了几项功能
完成的有:
基本电路连接、点灯、手机app控制、小爱同学语音控制、单独机械开关控制 (台灯在app和小爱语音端处于开状态时,便可单独用机械开关控制,)
硬件准备:
ESP8266-2102开发板一块
5V继电器一个
控制设备一个
母对母杜邦线三根
数据线(micro usb接口)一根
首先我们要用到继电器(可淘宝购买),先说一下继电器的原理及用法:
电磁继电器的作用:使用来用弱电控制强电,保证人们不会在高压电路中因为某种因为发生危险
先看右端三个脚的作用:(右端三个脚接8266开发板(我们直接采用8266的引脚供电)):
VCC就是电源正极,GND就是电源负极,IN是通断信号的输入引脚。
再看左端三个脚的作用:
NC即常闭端(normal close),COM即公共端,NO即常开端(即断路状态),也就是说,在没有任何上电之类的动作时,NC和COM端相当于已经连通,而NO和COM是断开的。
当8266引脚向右面三个脚中的IN端输入控制信号时,NC和COM断开,而COM和NO连接,IN失电时,恢复为NC和COM连通,NO和COM断开。
我们将利用继电器的上述特性来控制灯的亮灭:
当8266引脚向右面三个脚中的IN端输入信号时,NC和COM将断开,而NO和COM将连接。
8266和继电器具体接法看下图(用D4引脚控制):
继电器和灯的供电线的连接见下图:
即灯(或风扇)的两条电路中的一条穿过NO、COM端,然后正常连接电源。
剩下的就是程序了,我们需要用到点灯科技平台,直接百度搜索就可以了。然后点击进入官网.具体操作即步骤顺序见下图:
1.手机端下载blinker app并安装及注册完成。
2.电脑端arduino IDE安装好上图中5号步骤中的库。(安装步骤可参考下图)
然后在弹出页面中选择下载的库文件,不用解压缩,直接选中点击确认即可。
手机APP端设置:
1.打开后点击右上角加号,点击独立设备,点击网络接入,点击阿里云(因为点灯科技云暂时不支持小爱同学)。然后复制KEY备用。(放入电脑端程序用以匹配设备)。
2.返回后点击添加的设备,再点击右上角编辑符号,添加一个按钮,注意数据键名,此名称要与你的电脑端程序中一致(此示例程序中命名为bin)。
确认线路接线无误为ESP8266烧入程序:
usb数据线连接esp8266开发板到电脑,打开arduino IDE写入以下程序,然后上传到开发板。
#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#include <Blinker.h>
int LIGHT = D4;
char auth[] = "你复制的KEY";
char ssid[] = "你的无线网(或热点)名称";
char pswd[] = "无线网密码";
// 新建组件对象
BlinkerButton Button1("bin");//你的按钮名称
BlinkerNumber Number1("num-abc");
int counter = 0;
void miotPowerState(const String & state)//用户自定义电源类操作的回调函数
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
digitalWrite(LIGHT, LOW);
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LIGHT, HIGH);
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
}
}
// 按下按键即会执行该函数
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
digitalWrite(LIGHT, !digitalRead(LIGHT));
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
counter++;
Number1.print(counter);
}
void setup() {
// 初始化串口
Serial.begin(115200);
#if defined(BLINKER_PRINT)//这里不一样
BLINKER_DEBUG.stream(BLINKER_PRINT);
#endif
// 初始化有LED的IO
pinMode(LIGHT, OUTPUT);
digitalWrite(LIGHT, HIGH);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
Button1.attach(button1_callback);
BlinkerMIOT.attachPowerState(miotPowerState);//小爱用户自定义电源类操作的回调函数:
}
void loop() {
Blinker.run();
}
然后便可使用blinker app控制灯或风扇的开关了。
接入小爱同学:
下载米家app并打开点击我的,点击其他平台设备,找到点灯科技,输入点灯科技注册账号。然后试一试语音叫小爱同学开关灯试试。有时一次可能添加不成功,多试几次看看是不是哪里出了问题。
(还有一个问题就是你的设备名称,这个可以在blinker app中点击你的设备,但后点击右上角的三个点图标,修改设备名就可以了,还可以设置定时任务等)
对于blinker平台更丰富一点功能的使用方法清参考ESP8266+DHT11温湿度传感器+小爱同学语音智能LED灯(状态可视化)
Blinker小爱同学接口函数
light:
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#include <Blinker.h>
outlet:
#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET
#include <Blinker.h>
sensor:
#define BLINKER_WIFI
#define BLINKER_MIOT_SENSOR
#include <Blinker.h>
multi_outlet:
#define BLINKER_WIFI
#define BLINKER_MIOT_MULTI_OUTLET
#include <Blinker.h>
同步设备后可显示一个插座和四个插孔(名为插孔的插座设备)
风扇fan:
#define BLINKER_WIFI
#define BLINKER_MIOT_FAN
#include <Blinker.h>
aircondition:
#define BLINKER_WIFI
#define BLINKER_MIOT_AIR_CONDITION
#include <Blinker.h>
设备设置后即可使用 小爱同学 BlinkerMIOT
小爱数据管理
智能音箱接口, 反馈数据到小爱同学
==任何控制务必即时反馈==
==超时2s以上再反馈,小爱同学就默认设备不在线,小爱同学会反馈“智能家居控制出了点问题”==
函数
- powerState()
BlinkerMIOT.powerState()
反馈电源状态 - mode()
BlinkerMIOT.mode()
反馈运行模式 - color()
BlinkerMIOT.color()
反馈颜色属性 - colorTemp()
BlinkerMIOT.colorTemp()
反馈色温属性 - brightness()
BlinkerMIOT.brightness()
反馈亮度属性 - temp()
BlinkerMIOT.temp()
反馈温度属性 - humi()
BlinkerMIOT.humi()
反馈湿度属性 - pm25()
BlinkerMIOT.pm25()
反馈PM2.5属性 - level()
BlinkerMIOT.level()
反馈风速/挡位属性 - hswing()
BlinkerMIOT.hswing()
反馈左右摆风状态 - vswing()
BlinkerMIOT.vswing()
反馈上下摆风状态 - eco()
BlinkerMIOT.eco()
反馈ECO节能模式状态 - anion()
BlinkerMIOT.anion()
反馈负离子模式状态 - heater()
BlinkerMIOT.heater()
反馈辅热功能状态 - dryer()
BlinkerMIOT.dryer()
反馈干燥功能状态 - sleep()
BlinkerMIOT.sleep()
反馈睡眠模式状态 - soft()
BlinkerMIOT.soft()
反馈柔风功能状态 - uv()
BlinkerMIOT.uv()
反馈UV杀菌功能状态 - unStraightBlow()
BlinkerMIOT.unStraightBlow()
反馈防直吹功能状态 - print()
BlinkerMIOT.print()
将以上属性发送出去, 务必最后调用该函数
小爱设备支持的控制类型
- 设备控制
- 电源类的操作
- 设备打开
- 设备关闭
- 颜色的设置
- 模式的设置
- 亮度的控制
- 亮度设置指定值
- 亮度调成最值(最大、最小)
- 步长设置亮度(调亮、调暗)
- 色温的控制
- 色温设置指定值
- 步长设置色温(调冷、调暖)
- 温度的控制
- 温度设置指定值
- 步长设置温度
- 摆风的控制
- 上下/左右摆风
- 设备查询
- 单个属性的查询
小爱支持的语音指令
- 灯
- 打开/关闭{门口}的{灯}
- 把{卧室}的{灯}调为{红色}
颜色范围为0-16777215(0xFFFFFF) - 把{卧室}的{灯}的{亮度调高一点}
亮度范围为1-100 - 把{门口}的{灯}的{色温}调到{1400}
色温范围为1000-10000 - 把{卧室}的{灯}调为{月光模式}
- 查询{卧室}的{灯}的状态
- 插座
- 打开/关闭{厨房}的{插座}
- {客厅}的{插座}是否打开
- 传感器
- {设备名}室内{温度}/{湿度}/{PM2.5}/{空气质量}/{二氧化碳含量}
- 风扇
- 打开/关闭{客厅}的{风扇}
- 打开{客厅}{风扇}的{上下扫风}
- 把{客厅}的{风扇}调到{一档}
- 空调
- 打开/关闭{客厅}的{空调}
- 打开{客厅}{空调}的{上下扫风}
- 把{客厅}的{风扇}调到{一档}
- 把{客厅}的{空调}调为{自动模式}
- 把{客厅}的{空调}调到{25摄氏度}
- 把{客厅}的{空调}温度调{高一点}
- 查询{客厅}的{空调}的{温度}/{湿度}
小爱支持控制的模式表
模式 | 中文描述 |
DAY | 日光 |
NIGHT | 月光 |
COLOR | 彩光 |
WARMTH | 温馨 |
TV | 电视模式 |
READING | 阅读模式 |
COMPUTER | 电脑模式 |