使用BC7215A芯片实现离线万能空调控制(码库)

 BC7215A是一款专门针对空调遥控信号做了优化的红外编解码芯片,SO8封装,接口为UART串口, 配合专用的BC7215A离线空调码库(免费),可以实现离线的万能空调控制。下面就介绍一下该码库的使用:

 简介

BC7215A离线空调红外遥控码库(以下简称BC7215A空调码库),是设计专门用于BC7215A芯片的空调红外遥控码库,配合BC7215A芯片使用,即可实现离线万能空调遥控的目的。目前已经覆盖全部主流空调品牌型号,二线品牌机型,覆盖率也已达到90%以上,且正在快速迭代更新中。

此空调遥控码库最大的特点,是完全离线使用,无需联网不依赖任何外部资源,且库以C源码的形式提供(经混淆处理),对处理器速度要求极低,可用于从8位单片机到Linux和Windows操作系统的各类环境。驱动库体积小巧,在Cortex-M3处理器上,编译后体积仅为17K左右,占用RAM小于700字节。

本空调遥控码库充分利用了BC7215A的解码功能,实现了基于空调遥控编码规则的驱动,而不是简单的数据库,这也是其能做到完全离线而体积小巧的原因。驱动库提供3个基本的空调控制功能:

  • 控制温度

  • 控制工作模式

  • 控制风力大小

空调遥控协议简介

空调的红外遥控,总体上分为两种,一种是固定码遥控,其特点是遥控器上每个按键发射的红外编码固定,判断特征是这类遥控器上没有液晶显示屏。这类遥控器和普通影音设备的红外遥控器本质一样,仅需简单复制其红外信号即可,使用BC7215(A)的基本功能即可实现,无需专门的驱动库。

另外一种是最常见的,可变编码遥控,其特点是遥控信号的长度很长,每一帧的遥控信号中,都包含了空调控制的完整信息,如设定温度,工作模式,风力大小等,判断特征也很简单,即这类的空调遥控器上,都会带有一个液晶显示屏。这类的空调遥控器,同一个按键,每次按下时发出的红外编码根据当前的机器工作状态不同是不一样的,而且不同的空调厂家和型号的空调的编码方式,也是不一样的,复制产生这样的空调遥控器信号,就需要借助码库来实现。

BC7215A空调库使用方法

本驱动库的使用非常简单,仅需3个步骤,即可完成任意空调的控制。

第一步:采集原空调遥控器信号

利用BC7215A的解码功能,接收解码被控空调遥控器的特定信号(制冷模式,25°C)。

注意:

不要使用“万能遥控器”作为信号源,因为该类遥控器通常每次按键会连续发出多种不同协议的遥控信号,以达到广泛适用的效果,如果实际起效的遥控信号不是第一个发出,则BC7215A会采集到错误的信号。

第二步:初始化码库

使用解码出的数据作为参数,调用本驱动库的初始化函数。

第三步:设置需要的温度、模式及风力大小

使用驱动库的设置函数,即可设置为需要的参数,函数会返回一个新的数据包,将数据包通过BC7215A发射出去,即可控制空调。

其它:电源开/关

很多空调的遥控协议中,电源的开/关是作为特殊的指令的,甚至数据的长度都和普通的设置温度等指令不一致,因此,电源的开关,可以视为固定码指令单独处理,单独采集数据。格式信息则通常是一致的,有的仅仅是数据长度的区别,因此格式信息可以通用。

系统要求

BC7215A空调码库以C源码方式提供,要求编译器C语言版本为C99或以上,所用系统需要有足够多的程序(约17K,依处理器而不同)和内存空间(约700字节,依处理器而不同)。

库详解

组成

BC7215A空调码库由两个文件组成,

bc7215_ac_lib.h

bc7215_ac_lib.c

其中bc7215_ac_lib.c为经混淆后的C语言源码。因为驱动库是必须和BC7215A共同使用的,会使用到BC7215(A)驱动库中的数据结构,因此,系统中还应该包含

bc7215_lib.h

以及其配置文件

bc7215_lib_config.h

因为有的空调遥控码长度比较长,建议BC7215驱动库中BC7215_MAX_RX_DATA_SIZE 值设置为48或以上。

接口函数

用户将本库的文件加入C项目中,并在用户源文件中包含BC7215A空调码库的头文件后,即可通过调用接口函数实现空调控制。

1. 初始化函数

bool bc7215_ac_init(uint8_t status, const bc7215DataVarPkt_t* dataPktCool25C);

该函数用于初始化驱动库,输入参数有两个,一个是BC7215A采集被控空调遥控信号时,解码输出中的状态字节,一个是指向同时输出的原始数据包的指针。

返回参数为一个bool值,为true时,表示初始化成功,false时表示初始化失败。

初始化的输入原始数据包,必须是空调在“制冷模式,25°C”时的数据,如果输入的数据不是这个指定状态下的数据,将造成初始化失败。可以先将空调遥控器设置到制冷25°C,然后按“风力调节”按键采集信号,以确保工作模式和温度设置保持不变。

2.空调设置函数

const bc7215DataVarPkt_t* bc7215_ac_set(int8_t temp, int8_t mode, int8_t fan, int8_t key);

初始化成功后,使用此函数设置空调的状态。

函数具有4个输入参数,前三个分别为温度、工作模式,以及风力,第4个参数为按键,部分空调的红外编码中,带有按键的信息,比如同样 25°C,从26°C按“温度-”按键和从24°C按“温度+”按键,虽然最终空调状态一样,但遥控器发射的编码是不同的。这种情况出现在个别品种的空调上,如果不确定是否需要,一般可设置为“保持不变”或者“温度+”。

所有的输入参数,均为8位有符号整数,每个参数均有各自的取值范围,超出取值范围的输入值,均视为该项设置保持不变。

温度temp:

取值范围 0-14, 分别对应温度值 16°C - 30°C

模式mode:

取值范围 0-4, 分别对应为:

0 - 自动(Auto)

1 - 制冷(Cool)

2 - 制热(Heat)

3 - 除湿(Dry)

4 - 通风(Fan)

风力fan:

取值范围 0-3, 分别对应为:

0 - 自动(Auto)

1 - 低(Low)

2 - 中(Med)

3 - 高(High)

按键key:

取值范围 0-3,分别对应为:

0 - 温度+ 键

1 - 温度- 键

2 - 模式按键

3 - 风力按键

本函数的返回值,为一个指向BC7215(A)数据包的指针,该数据包即为按照被控空调格式编码的包含用户所需设置的数据包,使用发射指令(F5 02)将其发给空调机,即可实现空调的控制。有关发射指令详情,请参照BC7215(A)数据手册及BC7215(A)驱动库手册。


 

注意:

  1. BC7215A空调码库是基于编码规则的码库,仅负责产生复合编码规则的数据包,但不会检查其设置是否有效。在各种设置的组合中,有很多是实际空调无法达到的,各种机型会有各自的限制,比如,多数机型可能在“通风”模式下设置温度无效,有的机型可能最低温度只能设置到18°C等等,使用本码库时应该以所控制机型的实际限制为准,如果设置超出该机型的允许范围,空调机的反应将不可预知。

  2. 数据长度超过 16字节(BC7215(A)内部缓存大小)时,必须使用基于BUSY信号的流控制,否则会造成发出的红外信号出错,空调机无法识别。有关流控制,详情请参阅BC7215(A)数据手册。

  3. 本驱动库不涉及格式信息包的操作,格式信息包包含了红外信号的调制格式,用户必须自行保存所控空调信号的格式信息,并在BC7215A芯片进入发射模式后将其加载到芯片。如果BC7215A芯片不退出发射模式或断电,则格式信息仅需加载一次,无需每次发射前再次加载。

3. 寻找下一匹配函数

bool bc7215_ac_find_next(void);

初始化时,码库会根据采集的数据,自动判断空调所用的编码协议,不过,因为市面上空调品牌型号众多,会有不同型号的空调编码协议很接近,但又有所不同的情况,偶尔会有码库初始化后,空调机的实际动作和设置不相符的情况。如果发生这种情况,可以尝试调用此函数,查找码库中是否有其他和被控空调相符的协议。此函数无输入参数,返回也是一个bool值,意义和初始化函数中一致。

如果此函数返回为true,则表示码库已经按照新协议初始化成功,用户可以尝试控制空调看是否能够正常操作,如果仍不正常,还可以继续再次调用,直至返回为false,表示已经没有更多能够匹配的编码协议。

此函数仅可以在初始化正确后调用,调用后,如果想恢复使用初始化后的编码协议,必须重新调用初始化函数。

4. 预定义数据包

有少数的几种空调遥控协议,不能由BC7215A芯片直接解码,或会将一个控制信号分为几段输出,在这种情况下,无法通过BC7215A自身的解码完成信号采集,需要通过外部方式来提供供BC7215A空调码库初始化的数据包和发射红外信号所需的格式信息包。用户可以通过使用在线的转换工具完成转换,随着BC7215A空调码库本身,也提供了内置的预置数据,供用户直接调取。当发现BC7215A无法完成数据采集,或者采集到的信号无法正常工作时,可以尝试使用预定义数据看是否可以工作。

有关预定义数据相关的函数主要有:

获取预定义数据数量

uint8_t bc7215_ac_predefined_cnt(void);

返回值为库中内置的预定义数据的数量。

获取预定义数据的格式信息包

const bc7215FormatPkt_t* bc7215_ac_predefined_fmt(uint8_t index);

输入参数为预定义数据的序号,取值范围从0开始,其值必须小于上面 bc7215_ac_predefined_cnt()函数的返回值。

获取预定义数据的原始数据包

const bc7215DataVarPkt_t* bc7215_ac_predefined_data(uint8_t index);

输入参数与上面函数一致,返回为指向数据包的指针,用户可以直接用返回的指针初始化BC7215A空调码库。

获取预定义数据的名称

const char* bc7215_ac_predefined_name(uint8_t index);

输入参数为预定义数据的序号,而返回为一个字符串,为该预置数据的助记名称,帮助用户区分。

5. 获取版本信息函数

const char* bc7215_ac_get_ver(void);

该函数无需输入参数,返回值为一个字符串,包含当前码库的版本信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值