现在的位置: 首页资讯>正文
对遥控装置进行逆向工程——为什么每个工程师都应该学习Python
2018年03月23日 作者: 暂无评论 1,364+ 0

python-1

我的遥控原型

最近,我决定恢复我几年前开始的一个旧项目。我有一个高保真音响系统,那是我从过去几年收集的零碎器件拼凑而成的。 我还有一台非常酷的先锋300 CD自动点唱机,Technics唱盘机,Nikko参数均衡器,Denon DRA-295接收机和Harmon / Kardon扬声器。我非常在意在想听的时候能够立即获得高品质的音乐。因为如果我想听一首歌,我想立马就能大声地听到它。

然而,Denon接收器没有红外遥控器。先锋CD播放器也没有。这些设备的遥控器在eBay上是昂贵的,而一些通用遥控器可能支持先锋,但他们不一定会支持Denon。你可以购买与协议无关的高端通用遥控器,并简单地存储频率和时间信息,但转念一想,明明可以自己设计一个,为什么偏要买呢?

第一步是要尝试找到这两台机器的控制代码。如果我手中有遥控器可以工作,我可以进行逆向工程,然而我并没有。话又说回来,如果我有遥控器的话,整个项目就没有必要做了。

大多数红外代码的在线存储库都采用Pronto HEX格式。这基本上是一个巨大的文本文件,每一行都是一个单独的命令。前几个字节描述脉冲的频率,其余字节指定发送该特定代码的开启/关闭时间。如果你对协议一无所知,那么这是一个很好的参考格式,因为它实际上只是存储产生命令所需的脉冲的确切序列;然而,它的代码长度非常没有效率。我为Denon接收器找到的Pronto HEX文件有超过1500行文字! 如果你可以在代码中指定协议,则可以将每个代码存储为无符号的32位变量。它比本来需要的242K文本要小得多!

python-2

测试红外LED

但是我们怎样才能从Pronto HEX得到一个无符号的32位整数呢? 如前所述,代码只是保持IR LED开启或关闭的时间量。在Denon使用的协议中,与大多数红外协议一样,这两个数字之间的比率决定了发送的位是0还是1,这很简单——我们只需要剥离标头字节,然后将每对的数字并查看结果以确定二进制输出。但我们这里讨论的可是1500行的内容! 手动做这些工作需要花费数天的时间。 幸运的是,我们有电脑! 我的第一个想法是用C语言编写一个程序,这么说吧,就编程语言来说,C语言就是我的的母语。然而,在C语言中操纵文本和文本文件真的很痛苦。然后我在脑海中立马想到了另一个方案——使用脚本语言!

文章分页: 1 2

相关文章

Facebook 宣布开源基于 Python 和 R 语言的数据预测工具——“Prophet”

前天,Facebook 宣布开源一款基于 Python 和 R 语言的数据预测工具——“Prophet”,即“先知”。取名倒是非常直白。

MWC 2017:三星推出新款Gear VR,这回还带了遥控器哦

2017年2月27日,三星在MWC 2017上发布了全新的Gear VR虚拟现实显示装置。和老版本相比,新版本最大的不同自然其实是加入了一个独立的手持无线遥控器。新款的Gear VR所兼容的智能手机包括Gala...

MicroPython:STM32上的Python开发

虽然Python在国外是一门非常火的语言,在黑客界更是赫赫有名,然而中国的大学却极少开设 Python 课程,故而国内 Python 程序员多属自学。而一个没有MCU编程经验的初学者,要想让芯片跑起来,...

MicroPython:STM32 上 的 Python 开发

虽然Python在国外是一门非常火的语言,在黑客界更是赫赫有名,然而中国的大学却极少开设 Python 课程,故而国内 Python 程序员多属自学。而一个没有MCU编程经验的初学者,要想让芯片跑起来,...

Python开发已成趋势:几种主流的Python开发板对比

Python是一门近几年崛起很快也很火的编程语言。区别于我们国家大学里的第一门编程语言往往是C语言,Python则成为了国外本科学的入门级编程语言。同时随着科技的发展,拥有高容量、高速度和多...

给我留言

您必须 [ 登录 ] 才能发表留言!