周三下午,我的索尼电视突然罢工。客服电话打了半小时,对方一脸茫然——"上帝才知道怎么回事",这是原话。
问题是,我刚买了《蜘蛛侠2》,PS5还热乎着。情急之下,我把主机搬到卧室,接上了那台吃灰已久的小米电视。开机,亮屏,一切正常。直到我发现:遥控器找不到了。
![]()
小米有官方遥控App,但有个死结——这台Mi TV 4A 43寸没有蓝牙,必须连WiFi才能用。而我刚好在月初换了WiFi密码,电视断网了。App变砖。
这时候我瞥见了抽屉里的D1-Mini,一块ESP8266开发板,含税不到20块钱。上面还插着之前玩过的红外发射模块。一个念头冒出来:既然遥控器本质是往电视里发红外信号,我自己造一个不就行了?
第一步,让Claude写了个最简单的程序:串口输入"p",红外模块发射电源键信号。烧录,打开串口监视器,敲下p——电视没反应。换了几组网上找的电源键编码,依然沉默。
事情比想象复杂。红外遥控不是"发个1就开机"这么简单,不同品牌用不同协议,同品牌不同型号也可能不兼容。我的电视是小米,但手头没有原装遥控器,连它用什么协议都不知道。
下一步是穷举。网上能找到7组常见的电源键编码,我写了段循环程序,让模块每隔两秒发射一组,我在旁边盯着电视。7组发完,屏幕依旧黑着。
穷举失败,只能逆向工程。小米遥控App能控制所有小米电视,说明它内置了完整的编码库。但拆App太麻烦,我先搜了搜有没有人做过——GitHub上真有。这个仓库里,有人把小米遥控的数据库扒了出来。
仓库里有品牌ID和型号ID的对应表。我的电视对应小米品牌153、型号5122。用作者提供的Python脚本导出,格式选Flipper Zero,再提取38kHz载波下的原始脉宽数据——mark和space的微妙级时长。
这里有个意外发现:小米电视用的不是常见协议。普通红外遥控一般用二进制,脉冲间隔两种长度代表0和1。但小米用了四种间隔长度:578微秒、867微秒、1147微秒、1428微秒。四进制编码,信息密度更高,但也意味着通用库直接失效。
有了原始脉宽数据,事情变得简单。我先烧录三个指令:电源、音量加、音量减。串口输入p,电视亮了。输入+,音量条弹出。输入-,音量下降。全中。
接下来是一晚上的复制粘贴。把导航键、返回键、主页键、菜单键全部录入,一个完整遥控器的功能集齐了。先连上WiFi,让官方App暂时接管——至少现在能用了。
但WiFi密码总会再换。下次断网,这套串口指令还得派上用场。不如一劳永逸:给D1-Mini写个Web界面,手机浏览器直接访问,点击按钮就发射红外信号。不需要App,不需要蓝牙,不需要连小米服务器,局域网内甚至不需要互联网。
最终成品是个巴掌大的盒子,插着USB供电。手机连上家里WiFi,打开浏览器输入192.168.1.xxx,一个极简遥控界面跳出来。电源、方向、确认、返回、音量、主页——该有的都有,延迟不到100毫秒。
总成本:D1-Mini约12元,红外发射模块3元,杜邦线若干,一个下午的时间。代码在这里,如果你也丢了遥控器。
这件事的有趣之处不在于"省钱"——原装遥控器也就几十块。而是当你发现消费电子产品被设计成一个封闭黑箱时,底层协议其实开放得惊人。红外、WiFi、串口,这些上世纪的技术标准至今通用,一块20块钱的开发板就能桥接所有断层。
索尼电视最终送修了,主板故障。但那个用D1-Mini搭的遥控器还留在床头,偶尔用来开关小米电视。它提醒我:很多"智能"设备的所谓智能,不过是把简单的红外信号包装成云端服务、会员订阅和强制登录。而当网络断开、服务器宕机、公司倒闭时,最原始的物理层通信依然可靠。
下次换WiFi密码,我不会再焦虑了。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.