用 M61模组做一个红外空调遥控器

2024-08-23

本作品由安信可社区用户

WildboarG制作

使用

连接 wifi

订阅 MQTT 服务

接入 HOMEASSISTANT

材料准备

用 M61模组做一个红外空调遥控器 (https://ic.work/) 技术资料 第1张

红外发射模块原理图

用 M61模组做一个红外空调遥控器 (https://ic.work/) 技术资料 第2张

原理

空调遥控器简单来讲就是通过红外发射管的亮灭来承载编码信息,对应的空调设备上有一个接收管,它接收到发射管的光信号来解析协议获取数据,然后对空调进行对应指令的控制

例如:将温度设置为 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 卡片,类型为恒温器

用 M61模组做一个红外空调遥控器 (https://ic.work/) 技术资料 第3张

备注

1.定时器模拟载波已经更新为 PWM 控制更准确

2.更新了 WB2 版本的,在同一仓库下

帖子链接:【DIY 电子作品】WB2 复刻一个空调遥控器

下载:

git clone -b wb2 https://github.com/WildboarG/AirCondition.git

上图:

获取红外编码的 esp8266+ 淘宝不知名的红外接收模块

用 M61模组做一个红外空调遥控器 (https://ic.work/) 技术资料 第4张

以前画的一个红外发射模块,淘宝买的没有三极管放大,距离太近了

用 M61模组做一个红外空调遥控器 (https://ic.work/) 技术资料 第5张

视频演示

https://www.bilibili.com/video/BV1nevPefE5E/?t=19.532662&spm_id_from=333.1350.jump_directly&vd_source=54c5db21948db2378659b7e8e42bafbf

用 M61模组做一个红外空调遥控器 (https://ic.work/) 技术资料 第6张

审核编辑 黄宇

文章推荐

相关推荐