笔者最近在学习使用esp8266控制空调,其控制方法有如下三种,各方法均验证成功。
下载安装IRremoteESP8266
想要通过ESP8266控制空调,首先需要下载安装库,具体方法请读者自行查阅。
方法一
第一个方法,也是最简单、最常见的方法,通过红外接收头接收并解析红外原始数据,再通过send函数发送出去。
红外接收解析程序为该库自带例程IRrecvDumpV2。
烧录好,根据例程连接上红外接收头后,便可将红外发射的红外数据通过串口显示出来(本文以实验室的美的空调为例,因为没有遥控器,所以先用手机自带的万能遥控器)。
按下手机上空调遥控开机键后,串口打印出如下信息,将稍后其中的rawData数组复制到发送程序中。
本方法发送程序如下。
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
const uint16_t kIrLed = 4;
IRsend irsend(kIrLed);
//Timestamp : 000155.307Library : v2.7.19
//Protocol : COOLIXCode : 0xB29F40 (24 Bits)Mesg Desc.: Power: On, Mode: 0 (Cool), Fan: 4 (Min), Temp: 24C, Zone Follow: Off, Sensor Temp: Off
uint16_t rawData[199] = {4418, 4488, 510, 1656, 534, 542, 536, 1632, 510, 1656, 510, 566, 510, 568, 510, 1658, 508, 568, 514, 564, 534, 1632, 512, 566, 510, 568, 518, 1674, 494, 1672, 486, 566, 512, 1656, 512, 1656, 512, 564, 516, 560, 518, 1650, 510, 1658, 534, 1632, 510, 1656, 510, 1656, 512, 566, 510, 1656, 512, 1654, 512, 566, 514, 564, 512, 566, 510, 566, 512, 566, 510, 566, 512, 1654, 514, 566, 534, 542, 512, 566, 510, 568, 512, 566, 512, 564, 512, 1656, 512, 566, 510, 1658, 510, 1658, 510, 1658, 508, 1656, 512, 1656, 510, 1656, 510, 5284, 4444, 4460, 512, 1656, 510, 566, 536, 1632, 512, 1656, 512, 566, 512, 566, 512, 1656, 514, 562, 512, 566, 512, 1656, 512, 566, 512, 566, 512, 1656, 510, 1658, 510, 566, 510, 1658, 510, 1656, 510, 566, 512, 566, 510, 1658, 510, 1656, 510, 1658, 510, 1656, 510, 1656, 512, 566, 512, 1656, 510, 1656, 510, 566, 512, 566, 512, 566, 510, 566, 512, 566, 516, 560, 512, 1656, 512, 566, 510, 566, 512, 566, 512, 566, 512, 566, 512, 566, 512, 1656, 512, 566, 510, 1656, 510, 1656, 512, 1658, 510, 1656, 510, 1656, 510, 1658, 510};
// COOLIX B29F40uint64_t data = 0xB29F40;
void setup() {
Serial.begin(115200);
irsend.begin();
delay(1000);
}
void loop() {
irsend.sendRaw(rawData, 199, 38);
delay(2000);
}
烧录好发送程序,可通过接收程序进行验证。
方法二
使用方法二,首先也需要通过红外接收程序解析出红外遥控器所用的协议,再创建对应协议类,便可随意更改参数并控制空调。
本方法发送程序如下。
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
#include <ir_Coolix.h>
const uint16_t kIrLed = 4;
IRCoolixAC ac(kIrLed);
void setup() {
Serial.begin(115200);
ac.begin();
delay(1000);
}
void loop() {
ac.on();
ac.setMode(kCoolixCool);
ac.setFan(4);
ac.setTemp(24);
ac.send();
delay(2000);
}
方法三
方法三,在通过红外接收程序解析出协议数据后,便可以直接发送数据。
比如方法一中解析到的数据为COOLIXCode : 0xB29F40
本方法发送程序如下。
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
#include <ir_Coolix.h>
const uint16_t kIrLed = 4;
IRsend irsend(kIrLed);
//Timestamp : 000155.307Library : v2.7.19
//Protocol : COOLIXCode : 0xB29F40 (24 Bits)Mesg Desc.: Power: On, Mode: 0 (Cool), Fan: 4 (Min), Temp: 24C, Zone Follow: Off, Sensor Temp: Off
uint64_t data = 0xB29F40;
void setup() {
Serial.begin(115200);
irsend.begin();
delay(1000);
}
void loop() {
irsend.sendCOOLIX(0xB29F40);
delay(2000);
}
注意事项
1、在使用各种协议时,需要在程序前面引用对应协议的头文件。
该库具体包含有哪些协议,可以到库文件中查看。
文件位置如下。
2、在进行红外数据解析时,注意将红外发射头对准接收头,同时应避免强光干扰。为获得正确解析数据,可能需要多发射接收几次,直到多次解析出的数据相同。
3、如果情况正常,每次解析出来的十六进制应是相同的,但是rawData数组中数据不可能完全相同。