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

发表评论

相关文章

暴击,编程纳入高考!输在编程,你家小孩连未来的起跑线都将失去

2018年开始,浙江省信息技术教材已将Python纳入浙江高考内容之一;北京、山东也已确定要把Python编程基础纳入信息技术课程和高考的内容体系。编程是“通向未来”的语言,给予了学生创建未来世...

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编程经验的初学者,要想让芯片跑起来,...