声明
本系列内容为单片机业余爱好者所写,仅作个人技术交流分享不做任何商业用途。
如内容有错误,可评论区留言,本人及时修正。
摘要
本系列内容讲述:如何将ESP8266开发板连接天猫精灵,以获得设定的需求指令。并进一步扩展通过万能遥控器执行该指令的内容。
目录
前言
夏天又到了,天气越来越热。前些天想开个空调在书房摸鱼,结果平日里天天都能看见的遥控器,那一天怎么找都找不到。正好不才,在大学里曾经接触过一些单片机,就想给空调增加一个万能遥控器外设,如此就能实现语音遥控啦。
材料准备
ESP8266开发板(有能力可以直接用最小系统电路)
48键遥控学习模块
USB数据线(适配的)
CH340
杜邦线母对母
天猫精灵(白嫖来的)
基础设备
一、开发板介绍
ESP8266支持多种网络通信协议,如TCP/IP协议、UDP协议、HTTP协议、MQTT协议等。
TCP/IP协议日常随处可见,主要用于大量的数据传输,其稳定性强;UDP协议适用于传输低延迟数据场合,但传输数据量较少;HTTP协议常用于网页;MQTT协议一般用于物联网设备之间的数据通信。
本次使用的是NodeMCU Lua V3物联网开发板,其不仅价格低廉,而且引脚功能丰富。
1.点亮led
(1)定义引脚
const int LED_BUILTIN = 16;
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);}
(2)定义引脚输出模式
digitalWrite(LED_BUILTIN, LOW);
2.串口通信测试
(1)打开串口通信
//Serial port Settings
void setup()//enable serial port
{
Serial.begin(9600);}//write baud rate
(2)串口输出数据
char ddata[8] = {0x55,0xAA,0x01,0x01,0x02};//write char
Serial.println(ddata);//send char ddata
3.完整代码(密钥在后面章节)
#define BLINKER_WIFI
#define BLINKER_ALIGENIE_MULTI_OUTLET
#define air_conditioner
#include <Arduino_JSON.h>
#include <Blinker.h>
char auth[] = "xxxxxxxx";//blinker 密钥
char ssid[] = "xxxxxxxx";//WIFI name
char pswd[] = "xxxxxxxx";//passward
bool oState[5] = { false };
int i = 0;
char ddata[8] = {0x55,0xAA,0x01,0x01,0x02};
void aligeniePowerState(const String & state, uint8_t num)
{
if (state == BLINKER_CMD_ON) {
if(num == 0){
char ddata[8] = {0x55,0xAA,0x03,0x01,0x03};
Serial.println(ddata);
}
digitalWrite(LED_BUILTIN, HIGH);
BlinkerAliGenie.powerState("on", num);
oState[num] = true;
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LED_BUILTIN, LOW);
BlinkerAliGenie.powerState("off", num);
char ddata[8] = {0x55,0xAA,0x03,0x03,0x05};
Serial.println(ddata);
oState[num] = true;
if (num == 0)
{
for (uint8_t o_num = 0; o_num < 5; o_num++)
{
oState[o_num] = false;
}
}
}
}
void aligenieQuery(int32_t queryCode, uint8_t num)
{
BLINKER_LOG("AliGenie Query outlet: ", num,", codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("AliGenie Query All");
BlinkerAliGenie.powerState(oState[num] ? "on" : "off", num);
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("AliGenie Query Power State");
BlinkerAliGenie.powerState(oState[num] ? "on" : "off", num);
break;
default :
BlinkerAliGenie.powerState(oState[num] ? "on" : "off", num);
break;
}
}
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();
uint32_t BlinkerTime = millis();
}
void setup()
{
Serial.begin(9600);
BLINKER_DEBUG.stream(Serial);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
BlinkerAliGenie.attachPowerState(aligeniePowerState);
BlinkerAliGenie.attachQuery(aligenieQuery);
}
void loop()
{
Blinker.run();
}
二、遥控模块介绍
1.接线
2.简码通讯
TX:0X55 0XAA 0X03 0x00 0x02
0x55,0xAA 固定的数据头
0x03 操作码 03,发送红外键值
0x00 键值 0
0x02 累加和校验,0X55+0XAA+0X03+0x00=0x102,只保留一字节就是 0x02
RX:0x55 0XAA 0X03 0x01 0x03
0x55,0xAA 固定的数据头
0x03 操作码 03,发送红外键值
0x01 结果值:1 发送成功,0 发送失败
0x02 累加和校验,0X55+0XAA+0X03+0x01=0x103,只保留一字节就是 0x03
三、点灯科技
下载并安装点灯Blinker,并按下图操作获得密钥。
四、天猫精灵APP增加外设
1.打开天猫精灵,单击右上角加号
2.选择添加设备,跳转页面后搜索blinker
3.选择第一个设备
4.确保天猫精灵已经联网,选择“设备已联网,下一步”
5.选择“绑定账号平台”,对blinker账号进行绑定
6.到这里设备绑定就完成了,对设备设置语音口令即可实现语音遥控
7.BLINKER_ALIGENIE_MULTI_OUTLET内部其实支持控制5种不同的设备,在arduino里可以设置单独控制任一设备,由于是新手教程这里就不多去介绍了。