ESP8266 - 小爱同学智能家居

<封面摄于新疆·禾木的山间,高原下的寒松和草甸一片苍翠欲滴,哈萨克牧民就在山麓和山顶间来回迁徙。>

最近打工人搬进了出租房,闲鱼捡了个小爱触屏音箱,一百来块钱居然可以组 Mesh 网络,遂决定撘一套智能家居。可是这儿的空调、电视等都是传统设备,不支持物联网,改线又会被房东打死。唯一的办法就是借助红外遥控实现,搜了一下小米万能红外遥控器居然要一百多块钱,咋不去抢钱呢。于是默默地翻出积灰的电子元器件箱,掏出了几年前买的 ESP8266 板子,自己做一个吧,八要钱。

下面以控制 LG 空调为例,整套智能家居架构如下:

小爱触屏音箱 → Blinker(IRremote) → 电气设备

  1. 米家接入 Bliker(点灯科技)物联网平台。
  2. ESP8266 刷入 Blinker 固件,作为物联网终端。
  3. ESP8266 基于 IRremote 库发射红外信号,控制空调等设备。

接线

需要准备以下硬件,按如下方式接线:

  • ESP8266 开发板(NodeMUC)
  • 红外二极管
  • 100Ω 电阻
  • 面包线(母对母)若干

接线图

接好后,很挫

Blinker

点灯科技

首先在手机上安装点灯 APP 并打开。

点击右上角加号添加设备,选择 独立设备网络接入点灯科技,把 key 保存一下,后面需要用到。

添加设备

独立设备

点击右上角的编辑,定制遥控界面。

编辑遥控界面

点击右上角的三个点,可以重命名设备,方便之后语言控制。

重命名设备

在 Blinker APP 中编辑按钮,添加语音指令。

语音指令

米家

打开米家 APP,在 我的 页面,点击 其他平台设备,点击 添加设备,拉下来选择 点灯科技

其他平台设备

点灯科技

输入点灯科技注册的账号和密码,绑定账号。

绑定账号

点击同步设备,可以发现刚才在点灯平台添加的设备。

同步设备

刷入固件

首先下载并安装 Arduion-IDE 打开,我们需要安装 ESP8266 相关库。

文件 → 首选项 → 附加开发板管理配置 中添加 ESP8266 的官方源:http://arduino.esp8266.com/stable/package_esp8266com_index.json

添加源

然后在 工具 → 管理包 中搜索 IRremoteESP8266 安装这个包,用来控制输出红外信号的。

安装 IRremoteESP8266

也可以直接在 GitHub 下载 master 分支文件,丢到 Arduino安装目录\Arduino\libraries 目录下,需要下载以下包:

然后在编辑器中输入以下代码:

#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT

#include <ESP8266WiFi.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
#include <ir_LG.h> // 换成对应型号空调
#include <Blinker.h>

char auth[] = "**********"; // Bliker key
char ssid[] = "**********"; // WiFi 名称
char pswd[] = "**********"; // WiFi 密码

BlinkerButton Button1("btn-abc"); // 按钮名称换成 Blinker 中设置的名称
IRLgAc _ac(D3); // D3 对应开发板上火线口


// 按钮
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state == "on") {
digitalWrite(LED_BUILTIN, LOW);
Button1.print("on");
IRLgAc _ac(D3);
_ac.begin();
_ac.on();
_ac.send();
} else if (state == "off") {

digitalWrite(LED_BUILTIN, HIGH);
Button1.print("off");
IRLgAc _ac(D3);
_ac.begin();
_ac.off();
_ac.send();
}
}

//小爱
void miotPowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);

if (state == BLINKER_CMD_ON) {
digitalWrite(LED_BUILTIN, LOW);
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
IRLgAc _ac(D3);
_ac.begin();
_ac.on();
_ac.send();
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LED_BUILTIN, HIGH);
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
IRLgAc _ac(D3);
_ac.off();
_ac.send();
}
}

void setup() {
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
Blinker.begin(auth, ssid, pswd);
Button1.attach(button1_callback);
BlinkerMIOT.attachPowerState(miotPowerState);

}

void loop() {
Blinker.run();
}

然后用 USB 线连接至电脑,点击输入按钮刷入即可。

输入固件

可以在 [IRremoteESP8266 包的目录下找到几乎所有型号的空调,更改一下代码即可。

空调型号

类名

开始装逼

一切都妥当后,将 ESP8266 和小爱同学连接至同一 WiFi 下。唤起小爱同学,输入刚才编辑的语音指令,即可发送红外信号控制电器设备。

这里只是简单地示范了一下开/关 LG 空调,后续请学习相关库的文档,自行开启高阶能力。

查看评论