调遥控最烦的是拿到一颗没文档的红外接收头,对着示波器抓波形才知道用户码和键值怎么排。ECH220322这类太阳能路灯红外遥控芯片倒是给了明确用户码:AABB,省了逆向的功夫。

先说硬件。红外接收头输出接到芯片的IR脚(第4脚),平时空闲为高,收到有效帧后按协议拉低送出数据。接收头要选对载波频率,常见红外遥控都跑固定载波,频率不对就收不到,这一点比用户码更常被忽略。IR脚内部一般带弱上拉,外部不用再并电阻,直接连接收头输出即可。
协议上这颗料认用户码AABB。解码时先收地址段,比对是不是0xAABB,不对就丢弃,避免邻居家同频遥控串扰。地址匹配后再收命令字节,命令字节对应具体的键。下面是一段键值映射的伪代码思路:
if recv_user_code() == 0xAABB:
cmd = recv_command()
switch(cmd):
case KEY_ON: enter_on_mode() #50%亮60秒后转自动
case KEY_OFF: enter_off_mode() #关输出关所有功能
case KEY_AUTO: enter_auto_mode() #8段亮度到天亮
case KEY_ECO: enter_eco_mode() #节能段位
case KEY_TIMER_3H: start_timer(180) #3H定时
case KEY_TIMER_5H: start_timer(300) #5H定时
case KEY_TIMER_8H: start_timer(480) #8H定时
case KEY_TIMER_10H:start_timer(600) #10H定时
case KEY_CANCEL: cancel_timer() #取消定时
case KEY_LEVEL: cycle_brightness() #四档亮度切换
注意注释里的分钟数是把小时换算成秒便于定时器计数,实际亮度档里100%亮10分钟后转90%这类细节由内部状态机处理,外部只管发键值。
键值表里有个坑:开键触发后灯以50%亮度亮60秒再转自动键状态,而且除了关键,所有键在开键ON状态下才有效。新手常犯的错是按了自动键没反应,其实是没先按开键进入ON状态。关键任何时候都能用,它是硬关闭,会把输出和功能全停掉。
定时键也能叠加。自动或节能模式下再按3H/5H/8H/10H,会从亮灯开始计时到点停止,中途再按定时键重新计时,不改当前模式亮度。想取消就按取消定时键。这些状态转移都靠芯片内部的红外遥控接收芯片逻辑完成,外部不用管时序,只发命令。
边界条件要写清楚。红外是视距通信,户外灯罩如果有反光或脏污,接收距离会缩水;太阳光里含红外成分,正午强光下接收头容易饱和误触发,靠滤光片和方向朝向缓解。还有遥控器电量低时发射功率不足,远处按了没反应,别急着怀疑芯片,先换电池。
另一处踩坑是用户码固定AABB带来的串扰。同一小区多盏同型号灯,用同码遥控会一起动作,工程上要么靠安装距离隔离,要么让原厂改用户码区分。这颗料支持按需求定制程序,改码是可行的。
需要这颗料的红外协议说明、样片,或者想把键值映射改成你自己的遥控器,可以找原厂拿规格书,按功能要求定制开发程序,把用户码和键值重新定义。