本作品由安信可社区用户
WildboarG制作
使用
连接 wifi
订阅 MQTT 服务
接入 HOMEASSISTANT
材料准备
红外发射模块原理图
原理
空调遥控器简单来讲就是通过红外发射管的亮灭来承载编码信息,对应的空调设备上有一个接收管,它接收到发射管的光信号来解析协议获取数据,然后对空调进行对应指令的控制
例如:将温度设置为 16° 冷风 风速 1 级
既然要控制灯的亮灭,那么就只需要一个 IO 口控制就可以了(除去 VCC 和 GND),手上刚好有一个
M61 板子刚好用上了。一般的控制红外遥控器使用的 38KHZ 频率,所以只要模拟 GPIO 产生 38KHZ 的高低电平就可以控制红外发射管发送数据了。
红外编码
借助 esp8266+ 红外接收模块,用你的遥控器怼着接收模块按键,读取红外发射的原始数据,arduino 有对应的示例代码(IRremoteESP8266/IRrecvDumpV2.ino),连接好线,刷入示例程序,手动按你的遥控器,从串口读取 rawData 数组。
获取的数据大概是这样的:
uint16_t rawData[279] = { 9000, 4442, 608, 1624, 584, 494, 610, 496, 608, 1600, 608, 1602, 608, 494, 608, 496, 608, 496, 608, 496, 608, 494, 610, 520, 584, 1624, 586, 498, 606, 518, 586, 496, 608, 518, 586, 496, 608, 494, 610, 494, 610, 496, 608, 518, 586, 1624, 586, 494, 610, 494, 610, 496, 606, 498, 608, 496, 608, 498, 606, 1600, 610, 520, 584, 1624, 584, 496, 608, 496, 608, 1602, 608, 518, 638, 20150, 606, 496, 608, 496, 608, 496, 608, 496, 608, 1602, 606, 494, 610, 518, 586, 494, 610, 494, 610, 518, 586, 518, 586, 496, 608, 494, 610, 1602, 608, 494, 608, 496, 608, 494, 610, 520, 584, 496, 608, 498, 606, 496, 608, 498, 606, 496, 608, 518, 586, 518, 586, 496, 608, 494, 610, 494, 610, 494, 610, 1600, 608, 1600, 608, 1602, 660, 40406, 9158, 4440, 610, 1602, 608, 496, 608, 496, 608, 1602, 608, 1600, 608, 494, 610, 494, 610, 494, 610, 496, 608, 518, 584, 496, 608, 1602, 608, 518, 584, 496, 608, 496, 608, 496, 608, 496, 608, 496, 608, 496, 608, 494, 610, 498, 606, 1600, 610, 494, 610, 518, 586, 494, 610, 518, 586, 494, 610, 496, 608, 1600, 608, 1600, 608, 1624, 584, 496, 608, 520, 584, 1600, 608, 520, 664, 20150, 608, 518, 584, 496, 608, 496, 608, 496, 608, 520, 584, 496, 608, 496, 608, 494, 610, 518, 586, 496, 608, 496, 608, 498, 606, 496, 608, 494, 610, 496, 608, 496, 608, 494, 610, 496, 608, 496, 606, 496, 608, 1624, 584, 496, 608, 496, 608, 520, 584, 496, 608, 496, 608, 498, 606, 496, 608, 520, 584, 494, 610, 1602, 608, 1600, 608 }; // 24 度
只需要借助 GPIO 连接的红外灯亮灭对应的时长就将数据发送出去了。具体的协议高低电平起始不同,以我的格力空调为例子,它的起始数据是高电平 第一个数据是 9000 也就是说 需要我的 GPIO 输出 9000us 的高电平,(这里说的高电平不是真正的高电平 1,而是需要以 38KHZ 载波的高电平,也就是说需要用 38khz 频率一直高低翻转的电平),而第二个数据是 4442,这就需要真正的低电平延时 4442us,以此类推奇数需要电平反转,偶数需要真正的低电平。直到将这 279 个数据发送完。就完成了控制部分。
参考了zzbinfo 的这篇帖子用 Ai-M61 实现物联网开发(2)---实现远程开机、无线控制、红外遥控"
和 wxlinus 的这篇帖子Ai-M61-32S-Kit 开发板 mqtt 调试
逻辑实现
采用 pwm 输出 38Khz 频率。
pwm 配置:
#if 0 // 定时器配置 struct bflb_timer_config_s cfg0; cfg0.counter_mode = TIMER_COUNTER_MODE_PROLOAD; cfg0.clock_source = TIMER_CLKSRC_XTAL;//外部时钟为40M cfg0.clock_div = 39; //预分频后 1M cfg0.trigger_comp_id = TIMER_COMP_ID_0; cfg0.comp0_val = 13; //计数13us 约等于38kHz cfg0.preload_val = 0; timer0 = bflb_device_get_by_name("timer0"); bflb_timer_init(timer0, &cfg0); bflb_irq_attach(timer0->irq_num, timer0_isr, NULL); bflb_irq_enable(timer0->irq_num); #endif
// PWM配置
pwm = bflb_device_get_by_name("pwm_v2_0"); //给外设接口赋名pwm_v2_0 /* period = .XCLK / .clk_div / .period = 40MHz / 7 / 150 ≈ 38KHz */ struct bflb_pwm_v2_config_s cfg = { .clk_source = BFLB_SYSTEM_XCLK, .clk_div = 7, .period = 150, }; //设置PWM的频率,选择时钟,分频,和周期。根据上面的公式算出最终的频率。 /*初始化PWM输出*/ bflb_pwm_v2_init(pwm, &cfg); bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH0,0, 75); //占空比50% 发送配置: void Send_IR(uint16_t *buf,uint8_t len) { // printf("Sending IR code...n"); bflb_pwm_v2_channel_positive_start(pwm, PWM_CH0); //开启正向通道 for (uint16_t i = 0; i < len; i++) { if (i%2==0) { //bflb_timer_start(timer0); // 启用38kHz载波的定时器 bflb_pwm_v2_start(pwm); //开启pwm bflb_mtimer_delay_us(buf[i]); // 高电平(脉冲时间) //bflb_timer_stop(timer0); // 停止38kHz载波 bflb_pwm_v2_start(pwm); //关闭pwm } else { bflb_gpio_reset(gpio, IR); bflb_mtimer_delay_us(buf[i]); // 低电平(空闲时间) } } }
使用
克隆仓库AirCondition
首先需要获取你家空调遥控对应的红外编码(上边给了两种方法)
修改本例程
配置 wifi ,mqtt 订阅主题 (/state/user_state.h)
获取空调遥控器的 RawData 以数组的形式存放 user_aric.c 目录下
烧录
使用
克隆仓库AirCondition
首先需要获取你家空调遥控对应的红外编码(上边给了两种方法)
修改本例程
配置 wifi ,mqtt 订阅主题 (/state/user_state.h)
获取空调遥控器的 RawData 以数组的形式存放 user_aric.c 目录下
烧录
接入 HOMEASSISTANT
1.在 HACS 中下载 Lovelace Thermostat 组件,按照说明配置
2.修改 configuration.yaml 文件
3.添加设备发现
mqtt:
- climate:
name: AC
temperature_command_topic: "home/ac"
precision: 1.0
代码
4.然后更新配置,再到概览中添加 UI 卡片,类型为恒温器
备注
1.定时器模拟载波已经更新为 PWM 控制更准确
2.更新了 WB2 版本的,在同一仓库下
帖子链接:【DIY 电子作品】WB2 复刻一个空调遥控器
下载:
git clone -b wb2 https://github.com/WildboarG/AirCondition.git
上图:
获取红外编码的 esp8266+ 淘宝不知名的红外接收模块
以前画的一个红外发射模块,淘宝买的没有三极管放大,距离太近了
视频演示
https://www.bilibili.com/video/BV1nevPefE5E/?t=19.532662&spm_id_from=333.1350.jump_directly&vd_source=54c5db21948db2378659b7e8e42bafbf
审核编辑 黄宇