上周用esp8266做了一个语音智能台灯,也参考了很多网上的教程,也不难,挺简单的,在这里分享一下。
首先我用的是arduino IDE对esp8266进行的编译,arduino对8266编译环境的具体配置可参考
太极创客网站arduino配置esp8266
大家如果想学习esp8266的知识,推荐太极创客网站,讲解的很好。
先说一下本次预期想要实现的功能:
1.利用WiFiManager库实现自动配网,亦能够满足在不同WiFi下可以不用更改程序即可链接不同的WiFi
2.利用esp8266 OTA功能实现应用程序在局域网内升级,解除数据线限制
3.通过MQTT协议实现摆脱局域网限制的远程控制,实现远程控制灯的亮和灭
4.接入自己小米手机的米家软件,实现小爱同学语音控制
5.利用另一个机械开关实现网络和机械双控制,以应对网络不稳定情况的发生
6.利用继电器进行控制,实际上可以不用,但因为自己没用过,所以借此机会应用一下,了解一下
7.另外还想利用一下esp8266多任务处理的Ticker库,因为感觉只用几个引脚控制一个灯有点大材小用,比如可以再连接温湿度传感器或者0.96寸oled屏幕之类的
但是后面实际做的时候由于时间不充足,所以砍掉了几项功能
完成的有:
基本电路连接、点灯、手机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
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中点击你的设备,但后点击右上角的三个点图标,修改设备名就可以了,还可以设置定时任务等)