惠而浦空调遥控协议分析及使用Arduino遥控空调
一、工具
1、红外接收头(HS1838);
2、940nm红外发光二极管及限流电阻100Ω左右;
3、Arduino及Prototype Shield;
4、Saleae Logic兼容逻辑分析仪(价格二三十元,可选,可用IRremote Library的RawDump分析);
5、工具软件:Saleae Logic、Excel、Arduino、Notepad++;
6、Arduino库:IRremote(下载地址:https://github.com/z3t0/Arduino-IRremote);
二、解析惠而浦空调遥控协议
①如下图,将接收头和逻辑分析仪连接好,记录遥控器发送的信号;
②记录的报文如图所示(逻辑分析仪采样率选择12Msps);
(采样率设为12Msps)
(采集到的一帧数据(接收头已过滤了遥控的38kHz载波))
③多次尝试和分析可知一帧数据的大致结构:
导引头(载波约6.2ms,空隙间隔约7.4ms)+数据块+结束块(约0.56ms载波+7.4ms空隙+0.56ms载波+7.4ms空隙)
中间数据块波形有两种形式,根据网上搜索的NEC遥控协议,我们可以暂定如下:
数值0:载波0.56ms,空隙0.56ms
数值1:载波0.56ms,空隙1.69ms
波形解析
④接着分析比较复杂的数据块,由于一帧数据块包含的位数很多(后面分析可知:多达12个字节(96位)),不可能对着分析仪一个一个的数波形,故打算使用以下方法:
1)先使用分析仪的游标大致找到波形的起始和结束时间(如下图所示);
2)导出波形数据,设置如下图(需要设置起始时间、结束时间、使用采样点数)
3)点击Export按钮,给定名字(如开机.csv),保存;
4)将开机.csv文件用Excel打开,如下图,删除多余的通道(如我的接收头连接在Channel0,所以删除Channel1到Channel7);
5)接下来需要翻译出数据块中的数值0和数值1了。
6)CSV数据中的0,1并不是实际遥控的数据,根据第③点的分析,我们可以根据高电平的时长来区分数值0和数值1。在C2单元格,我们输入如下公式,得出每个电平的宽度(基于采样数);
7)使用填充柄填充所有行,如下图;
8)接下来,需要判定B列的1的时长了,采样数小于一定的数值,则表示发送的是0,否则发送的是1;(B列所有值为0的行可以忽略了,在数据块部分,他们都是固定时长的)。在D2中输入如下公式,以判定发送的数值;注,公式中的10000与当初逻辑分析仪所设置的采样率有关联的,12Msps的使用10000正好;
9)使用填充柄填充所有行
10)筛选出B列数值为1的行。操作如下①全选B列,②按Ctrl+Shift+L,③在下拉箭头中单击,去掉0前面的勾,点确定。
11)现在剩下的差不多就是数据块了,如下图,选中并复制出除导引头和结束块外的数据块(一般是从D6开始,向下选择96个单元格),粘贴到新的表格中即可。
12)可以得到数据块的数据了,那么剩下的就是使用控制变量法,一个一个测试遥控器的按键,并找到有变更的数据,分析下即可知道,不同功能在数据块中对应的位。
⑤附件是我整理的惠而浦空调,部分功能对应的位(定时功能比较复杂,且有了自制遥控器后,作用也不大,所以没分析,应该是在前几个字节定义。)
三、使用Arduino遥控空调
有了逆向的协议后,就可以尝试使用Arduino来控制空调了。其中,我们使用IRremote 库来发射信号。
下载IRremote库,并复制到ArduinoLibraries 文件夹下(请上网查找Arduino安装库的方法)。
先使用我们解析出来的数据来测试下,分析是否正确。
①搭好发射电路如下图所示:把红外发射管串接到 Arduino数字PIN3和GND之间(注意二甲管正负极,实际测试发现取消限流电阻,发射距离更远。)
②使用IRremote的sendRaw函数来测试,在这之前,我们需要准备好提供给sendRaw函数的数组,即最底层38kHz载波打开与关闭的时长序列;
1)先把之前得到的96bits的数据块复制出来,并使用转置粘贴为横向数据,如下两图:
2)再将横向的数据复制并粘贴到NotePad++中,
3)删除第二行,接着使用“替换”功能,先后将“ ”(制表符)替换为“,”(英文的逗号);将“0”替换成“550,550”;将“1”替换成“550,1690”。并在行首添加导引头“6200,7400,”,行尾添加结束块“,560,7400,560,7400”结果如图:
③运行Arduino程序,并打开IRremote库的IrsendRawDemo示例,如下图
④清除irSignal数组中的内容,使用我们刚处理的Notepad++中的数据;
⑤编译并下载到Arduino中,将Prototype板上的红外LED靠近并正对空调,观察效果(空调发出“哔”并进入待机);
四、使用sendWhirlpool函数控制空调
虽然可以控制空调了,但为了关个机,还得输入一大串的数据,有点麻烦。接下来,我们将往IRremote库添加自己刚分析好的惠而浦遥控底层协议。
①打开 IRremote库所在文件夹(如C:\arduinotool\arduino-1.0.5\libraries\IRremote),复制并粘贴“ir_NEC.cpp”,重命名为“ir_Whirlpool.cpp”。这就是我们要修改的模板了。
②打开ir_Whirlpool.cpp,修改#define部分如下图(这部分定义了各时间参数,以μs为单位)
#defineWHIRLPOOL_BITS 96
#defineWHIRLPOOL_HDR_MARK 6200
#defineWHIRLPOOL_HDR_SPACE 7400
#defineWHIRLPOOL_BIT_MARK 560
#defineWHIRLPOOL_ONE_SPACE 1690
#defineWHIRLPOOL_ZERO_SPACE 560
#defineWHIRLPOOL_RPT_SPACE 2250
③修改发射函数如下(实测载波设为36kHz,遥控距离更远):
//+=============================================================================
#if SEND_WHIRLPOOL
void IRsend::sendWhirlpool(unsignedchar* data)
{enableIROut(36);unsigned char checksum = 0;for(unsignedchar i =0;i<11;i++){checksum += data[i];}data[11]= checksum;//Headermark(WHIRLPOOL_HDR_MARK);space(WHIRLPOOL_HDR_SPACE);// Datafor(unsignedchar bytecnt =0;bytecnt<11;bytecnt++){for(unsignedchar bitcnt =0;bitcnt<=7;bitcnt++){if(data[bytecnt]& (1<< bitcnt)){mark(WHIRLPOOL_BIT_MARK);space(WHIRLPOOL_ONE_SPACE);}else{mark(WHIRLPOOL_BIT_MARK);space(WHIRLPOOL_ZERO_SPACE);}}}//checksumfor(unsignedchar bitcnt =0;bitcnt<=7;bitcnt++){if(checksum& (1<< bitcnt)){mark(WHIRLPOOL_BIT_MARK);space(WHIRLPOOL_ONE_SPACE);}else{mark(WHIRLPOOL_BIT_MARK);space(WHIRLPOOL_ZERO_SPACE);}}//Footermark(WHIRLPOOL_BIT_MARK);space(WHIRLPOOL_HDR_SPACE);mark(WHIRLPOOL_BIT_MARK);space(WHIRLPOOL_HDR_SPACE);space(0); // Always end with the LED off
}
#endif
④接着修改“irRecv.cpp”和“IRremote.h”,方法见IRremote库的文件“ir_Template.cpp”中相关注释。
⑤完成以上动作后,重启ArduinoIDE,打开IRremote的示例文件:IrsendDemo
⑥修改turnoff数组为以下内容(这些就是抓取的关机报文,按字节整理好,并去掉最后的校验和(CheckSum)字节),代码如下:
/** IRremote: IRsendDemo - demonstrates sendingIR codes with IRsend* An IR LED must be connected to Arduino PWMpin 3.* Version 0.1 July, 2009* Copyright 2009 Ken Shirriff* http://arcfn.com*/#include<IRremote.h>IRsend irsend;
unsigned char turnoff[]={0,0,0,0,0,0,0,0x08,0,0x28,0xa5};void setup()
{
}void loop(){irsend.sendWhirlpool(turnoff);
while(1);
}
⑦再测试下,应该还是可以遥控空调的。
五、结束语
有了以上数据后,可以再添加一个函数,将实际的功能转换成对应的协议数据,并交由sendWhirlpool发送。
以上,大家可以举一反三,做出适合自己空调的遥控器,或者将Arduino联网,使用手机远程控制家里的空调,在回家前,先营造舒适的室内温度。
文中并没有说明如何调节温度,模式等,其实调节温度就是把期望的温度值减去16,转换为16进制,填到协议数据响应的位中即可。
另外,需要注意的是,惠而浦空调发送的先后顺序是低位先发,高位后发。
惠而浦空调遥控协议分析及使用Arduino遥控空调相关推荐
- 红外遥控协议分析之:NEC协议
红外遥控协议分析之:NEC协议 2009-04-08 19:55:28| 分类: 个人日记|字号 订阅 红外遥控协议分析之:NEC协议 特点 8 位地址和 8 位命令 为提高可靠性,地址和命 ...
- 超外差ASK\RF433m、RF315m射频遥控模块解码教程,无线遥控器、电动窗帘遥控、RF遥控器电平信号、协议分析
前言 RF射频遥控在生活中很多,卷帘门.电动窗帘.电动车.灯遥控很多都用这种无线遥控模式,相比红外遥控 射频遥控能穿透障碍物,且成本较低. 这篇文章简单介绍下RF射频遥控遥控协议. 材料准备 1.逻辑 ...
- 小度音箱对接之DuerOS开放平台智能家居技能协议分析
本文,旨在分析DuerOS开放平台中智能家居技能协议. 参考的官方地址: https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart ...
- 海信变频空调故障代码分析与检修案例
海信变频空调故障代码分析与检修案例 [例1] 海信KFR-2801GW/Bp型变频空调用遥控器不能开机 分析与检修:通过故障现象分析得知,说明遥控器或机内遥控接收头异常.检查遥控器的电池正常,经询 ...
- WebSocket协议分析
点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 解析websocket数据格式." 好久不见,一晃一年又过去了,祝大家新年好运. 今天,给大家分析一个常见的协议--WebSock ...
- 宅男抖音某猫协议分析及应用破解
" 分析传说中的快x,顺便提供破VIP线路及去启动广告方法." 在当今这个由应用市场主导的网络上,流传着一批应用,它们低调又神秘,依赖口碑与独立网站在地下渠道传播,应用市场中从来都 ...
- 从新手到入门,如何进入协议分析的世界
" 协议分析与还原自学及入门指南." 有部分朋友给我发消息,说对协议还原很感兴趣,但苦于没人指导,希望得到我的帮助,问我如何进行协议分析的学习. 这篇文章从初学者的角度,编列了一个 ...
- 协议分析中的TCP/IP网络协议
" TCP/IP协议作为互联网的基础,在协议分析中不可或缺,本文介绍在对协议进行分析还原的过程中的一些要点,快速掌握协议还原的精髓." 注意,本文比较枯燥乏味,若非需要了解TCP/ ...
- 五款常用协议分析处理工具推荐
工欲善其事,必先利其器,一款好的工具,能取到事半功倍的效果. 进行协议分析,好的辅助工具必不可少,本文推荐五款最常用且易用的协议分析工具给大家,包括两款综合抓包及分析工具,一款协议重放工具,一款pca ...
最新文章
- 一文盘点MWC 2019所有5G设备和研发进展
- 独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)
- 由创建一个不能被继承的类引发的对象模型的思考
- 新年红包封面来了,3000万份红包封面来啦!到点直领!
- 块状元素、内联元素和内联块状元素
- 后端 消息 转发_【后端开发】Servlet怎么转发
- xfce4截图的快捷键设置
- ubuntu之apache正向代理及反向代理(ProxyPass\ProxyPassReverse)
- WordPress post和page的区别
- 101个免费的VMware工具
- 【剑指 offer】—— 浮点数的相等性判断
- SIM868硬件设计学习(一)
- 不懂Shopee站点分析,入驻Shopee平台哪个站点?
- c语言计算两个正整数的最大公约数
- Unite之夜|千人派对开启狂欢周末,多重惊喜为你呈现!
- 泰康人寿java开发待遇怎么样_宋晓伟-泰康人寿-5年Java开发高级工程师-猿急送
- Grid控件 设置格子背景颜色
- C# 日期插入access数据库
- 奇安信VS启明星辰 欲上市“新人”与上市“老手”的全面对比
- 写交织(AXI4不在支持写交织功能)