一、工具

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遥控空调相关推荐

  1. 红外遥控协议分析之:NEC协议

    红外遥控协议分析之:NEC协议 2009-04-08 19:55:28|  分类: 个人日记|字号 订阅 红外遥控协议分析之:NEC协议  特点    8 位地址和 8 位命令 为提高可靠性,地址和命 ...

  2. 超外差ASK\RF433m、RF315m射频遥控模块解码教程,无线遥控器、电动窗帘遥控、RF遥控器电平信号、协议分析

    前言 RF射频遥控在生活中很多,卷帘门.电动窗帘.电动车.灯遥控很多都用这种无线遥控模式,相比红外遥控 射频遥控能穿透障碍物,且成本较低. 这篇文章简单介绍下RF射频遥控遥控协议. 材料准备 1.逻辑 ...

  3. 小度音箱对接之DuerOS开放平台智能家居技能协议分析

    本文,旨在分析DuerOS开放平台中智能家居技能协议. 参考的官方地址: https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart ...

  4. 海信变频空调故障代码分析与检修案例

    海信变频空调故障代码分析与检修案例 [例1] 海信KFR-2801GW/Bp型变频空调用遥控器不能开机   分析与检修:通过故障现象分析得知,说明遥控器或机内遥控接收头异常.检查遥控器的电池正常,经询 ...

  5. WebSocket协议分析

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 解析websocket数据格式." 好久不见,一晃一年又过去了,祝大家新年好运. 今天,给大家分析一个常见的协议--WebSock ...

  6. 宅男抖音某猫协议分析及应用破解

    " 分析传说中的快x,顺便提供破VIP线路及去启动广告方法." 在当今这个由应用市场主导的网络上,流传着一批应用,它们低调又神秘,依赖口碑与独立网站在地下渠道传播,应用市场中从来都 ...

  7. 从新手到入门,如何进入协议分析的世界

    " 协议分析与还原自学及入门指南." 有部分朋友给我发消息,说对协议还原很感兴趣,但苦于没人指导,希望得到我的帮助,问我如何进行协议分析的学习. 这篇文章从初学者的角度,编列了一个 ...

  8. 协议分析中的TCP/IP网络协议

    " TCP/IP协议作为互联网的基础,在协议分析中不可或缺,本文介绍在对协议进行分析还原的过程中的一些要点,快速掌握协议还原的精髓." 注意,本文比较枯燥乏味,若非需要了解TCP/ ...

  9. 五款常用协议分析处理工具推荐

    工欲善其事,必先利其器,一款好的工具,能取到事半功倍的效果. 进行协议分析,好的辅助工具必不可少,本文推荐五款最常用且易用的协议分析工具给大家,包括两款综合抓包及分析工具,一款协议重放工具,一款pca ...

最新文章

  1. 一文盘点MWC 2019所有5G设备和研发进展
  2. 独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)
  3. 由创建一个不能被继承的类引发的对象模型的思考
  4. 新年红包封面来了,3000万份红包封面来啦!到点直领!
  5. 块状元素、内联元素和内联块状元素
  6. 后端 消息 转发_【后端开发】Servlet怎么转发
  7. xfce4截图的快捷键设置
  8. ubuntu之apache正向代理及反向代理(ProxyPass\ProxyPassReverse)
  9. WordPress post和page的区别
  10. 101个免费的VMware工具
  11. 【剑指 offer】—— 浮点数的相等性判断
  12. SIM868硬件设计学习(一)
  13. 不懂Shopee站点分析,入驻Shopee平台哪个站点?
  14. c语言计算两个正整数的最大公约数
  15. Unite之夜|千人派对开启狂欢周末,多重惊喜为你呈现!
  16. 泰康人寿java开发待遇怎么样_宋晓伟-泰康人寿-5年Java开发高级工程师-猿急送
  17. Grid控件 设置格子背景颜色
  18. C# 日期插入access数据库
  19. 奇安信VS启明星辰 欲上市“新人”与上市“老手”的全面对比
  20. 写交织(AXI4不在支持写交织功能)

热门文章

  1. java三大框架是什么?
  2. redis的bitmap使用场景
  3. 制作系统U盘详细教程,以及分盘等基础操作
  4. css如何把图片设置为黑白_使用CSS将图像转换为黑白图像
  5. knn中k的选取策略
  6. 框架中的高大上设计为了啥?
  7. python可以用来编写计算机网络程序吗_python学习——网络程序设计
  8. Vscode配置gopath
  9. android权限申请完成后app闪退,Android动态申请Camera权限应用闪退问题
  10. 个人面经整理中电药明