『瀚思彼岸』» 智能家居技术论坛

标题: DIY个多按键zigbee2mqtt zigbee 遥控器 [打印本页]

作者: zro22    时间: 2021-7-26 11:33
标题: DIY个多按键zigbee2mqtt zigbee 遥控器
本帖最后由 zro22 于 2023-7-29 13:23 编辑

该遥控器免费送,邮费到付

家里各种设备都接入HA了。面对一大堆遥控器,能否大统一。之前搞了ESPHOME接收红外遥控器信号接入HA,地址不过遥控器需要对着红外接收头,基本只能在一个房间控制。
也搞过ESPHOME接收RF射频接入HA,地址 不过弄了半天反应不灵敏,不知道为何。
最近搞了zigbee2mqtt,翻网页发现老毛子有人做了一个20建zigbee遥控器地址
[attach]30832[/attach]
不过他这个遥控器感觉有点粗犷,并且按键还是不够多。
我想要一个可以用来控制我的N1 CE媒体播放的遥控器,另外可以遥控窗帘,灯,功放和投影。
这样一个遥控器搞定看片。
按照他这个思路,我只要找一个电视遥控器,然后把主控换成cc2530就可以了。
说干就干,先找一个便宜的遥控器
这个便宜,咸鱼几块钱,这个有7x7=49个键,不错就他了。
[attach]30833[/attach] [attach]30834[/attach]
先画原理图
[attach]30835[/attach]
然后做了一个PCB
[attach]30836[/attach]
回来发现问题了,锅仔片的地方我画错焊盘了。
后来想了想,我直接用他原来的PCB,只要把cc2530相应的GPIO连上就可以了
同时觉得这个中国电信遥控器实在做工太差了,继续寻找便宜做工好的遥控器,最后锁定HP的MCE遥控器,买。同样是7x7 49键。
[attach]30838[/attach]
拆 焊线,一气呵成,就成这样了,丑是丑了点,不过都会被外壳包住的。线粘好不乱跑就好。
[attach]30839[/attach][attach]30840[/attach]
硬件完成,同时把dc dd rest拉线出来压到电池下面,好刷固件用。
硬件完成,接下来是软件。
先把开源固件源程序下载下来。
下载TI z-stack,以及IAR 10 就可以打开程序了,程序需要放到这个目录 Texas Instruments\Z-Stack 3.0.2\Projects\zstack\HomeAutomation\freepad-2.0.7
原本程序是20个按键的,先给修改到49个,程序超大了,编译不过,一顿修改,编译过了。
不过改完按钮就连不上z2m了。看来需要按照新器件来添加,总之折腾了好几天,没弄成功,放弃了这条路。
自定义设备走不通,那就再原设备基础上看看怎么把20个按键扩充到49个。
原设备EP有20个,对应每个按键,每个按键支持单击 双击 三击 四击 按住。
[attach]30842[/attach]
我的遥控器只需要单击功能,所以我可以把1-20对应单击,21-40对应双击,41-60对应三击。嗯,想法不错,去程序里面看看咋修改。
程序如下:对,那两句红色是我加的。
static void zclFreePadApp_SendKeys(byte keyCode, byte pressCount, bool isRelease) {
    byte button = zclFreePadApp_KeyCodeToButton(keyCode);
    pressCount = button/FREEPAD_BUTTONS_COUNT + 1;
    button = button%FREEPAD_BUTTONS_COUNT;
    uint8 endPoint = zclFreePadApp_SimpleDescs[button - 1].EndPoint;
    if (isRelease) {
        zclFreePadApp_SendButtonPress(endPoint, RELEASE_CODE);
    } else {
        zclFreePadApp_SendButtonPress(endPoint, pressCount);
    }
}


还需要修改hal_key.c.把原本只上报4x5 20个按键换成 上报7x7 49个按键,原本是这样上报的。key = (((row << 2) | col >> 1)) >> 1;
修改成,至于为什么不按照顺序来,是为了让key1 两个程序兼容。当然还需要修改 HAL_KEY_P0_GPIO_PINS HAL_KEY_P1_GPIO_PINS HAL_KEY_P0_INPUT_PINS HAL_KEY_P1_INPUT_PINS 的宏定义,把对应的GPIO打开。
if(row & 0x80)
          row2 = 6;
        else if(row & 0x40)
          row2 = 5;
        else if(row & 0x20)
          row2 = 4;
        else if(row & 0x10)
          row2 = 3;
        else if(row & 0x08)
          row2 = 2;
        else if(row & 0x04)
          row2 = 1;
        //else if(row & 0x02)
        //  row2 = 2;
        else if(row & 0x01)
          row2 = 7;
        else
          row2 = 0;

        if(col & 0x80)
          col2 = 6;
        else if(col & 0x40)
          col2 = 5;
        else if(col & 0x20)
          col2 = 4;
        else if(col & 0x10)
          col2 = 3;
        else if(col & 0x08)
          col2 = 2;
        else if(col & 0x04)
          col2 = 1;
        else if(col & 0x02)
          col2 = 7;
        else if(col & 0x01)
          col2 = 8;
        else
          col2 = 0;
        key = (row2 << 4) | col2;


然后再到zcl_freepadapp_data.c里面修改转换函数。
byte zclFreePadApp_KeyCodeToButton(byte key) {
#if defined(HAL_BOARD_FREEPAD)
  return ((key>>4)-1)*8 + (key&0xF);
#else


这里还有一个坑,cc2530的P1.0为高的时候不知道为什么P1.1也会为高,导致连接在这两个IO的按键分不开,所以可以看原理图,我没有使用P1.0这个IO。
改完后发现,快速按按键,会漏报,修改下面 200到50.这样间隔50ms的按键都可以捕捉到。
void HalKeyPoll(void) {
    uint8 keys = 0;

    keys = HalKeyRead();

    if (pHalKeyProcessFunction) {
        (pHalKeyProcessFunction)(keys, HAL_KEY_STATE_NORMAL);
    }

    if (keys != HAL_KEY_CODE_NOKEY) {
        osal_start_timerEx(Hal_TaskID, HAL_KEY_EVENT, 200);
    } else {
        halKeyTimerRunning = FALSE;
    }
}

编译,生成程序,配对。完成。
按下按键后命令在这个topic里面
zigbee2mqtt/<friendly_name>/action我把程序放到这里了https://github.com/almus2zhang/zb49remoter
gerber文件
[attach]31086[/attach]



作者: bluebaby    时间: 2021-7-26 11:37
牛人,我也打了个板
作者: zro22    时间: 2021-7-26 11:42
bluebaby 发表于 2021-7-26 11:37
牛人,我也打了个板

我的PCB白做了,用不上,直接用原来的板子还更方便
作者: zro22    时间: 2021-7-26 13:07
bluebaby 发表于 2021-7-26 11:37
牛人,我也打了个板

量了一下中国电信遥控器发现,没法用他的PCB,他的按键居然不是矩阵式结构,是网状结构的。晕了。
作者: zxyny1989    时间: 2021-7-26 13:37
大佬厉害。
作者: 924215947    时间: 2021-7-26 16:02
这个想法我之前也想过  不过遥控器不行啊  没办法做这个东西   然后楼主的代码在哪里找到的 我找了很久都没有找到  在哪里编译能不能发链接给我 谢谢
作者: zxl_hass    时间: 2021-7-26 16:30
向大佬学习
作者: zro22    时间: 2021-7-26 17:47
924215947 发表于 2021-7-26 16:02
这个想法我之前也想过  不过遥控器不行啊  没办法做这个东西   然后楼主的代码在哪里找到的 我找了很久都没 ...

程序地址
https://github.com/diyruz/freepad
然后去TI网站下载Z-stack3.0.2
然后下载IAR https://www.jb51.net/softs/537074.html
就可以编译了


作者: bluebaby    时间: 2021-7-27 08:42
zro22 发表于 2021-7-26 11:42
我的PCB白做了,用不上,直接用原来的板子还更方便

主要是捷配和嘉立创免费打板,就打了几个。
作者: 924215947    时间: 2021-7-27 11:26
zro22 发表于 2021-7-26 17:47
程序地址
https://github.com/diyruz/freepad
然后去TI网站下载Z-stack3.0.2

好的 谢谢 不过看到这样样子  我也是不会编译程序的
作者: star_liu    时间: 2021-7-27 20:00
楼主测试连接稳定性和连击效果怎么样?之前打板做过这个大佬的20键,后来长时间唤醒很慢或者就直接连不上z2m了,5秒内连续点击5次,会丢几次,还有延迟,不知道是当时z2m网关的问题还是什么问题
作者: honry    时间: 2021-7-27 20:14
做的这个到现在还没做完,就缺键帽了
[attach]30869[/attach]

作者: zro22    时间: 2021-7-28 09:48
star_liu 发表于 2021-7-27 20:00
楼主测试连接稳定性和连击效果怎么样?之前打板做过这个大佬的20键,后来长时间唤醒很慢或者就直接连不上z2 ...

我刚调试好,使用几天看看效果
作者: skyflying5    时间: 2021-7-30 10:17
这个项目好玩啊,以后 场景都移植到按键上面,往墙上一挂岂不是很happy
作者: 情非殇    时间: 2021-8-2 11:01
这吊炸天的焊功,我这辈子不知道有没有机会做到
作者: tomcruise    时间: 2021-8-2 16:13
终于见到牛人了,佩服啊
作者: guibaodear    时间: 2021-8-4 14:55
膜拜一下大神。
以前刷过俄罗斯那个人的乐视小遥控器,不过发现电池撑不过一个星期,估计是低功耗没做好还是怎么地
有时间试试这个
作者: zro22    时间: 2021-8-5 12:37
guibaodear 发表于 2021-8-4 14:55
膜拜一下大神。
以前刷过俄罗斯那个人的乐视小遥控器,不过发现电池撑不过一个星期,估计是低功耗没做好还 ...

乐视那个小遥控器,电池那么快就完了?那我还是不买了
作者: zro22    时间: 2021-8-6 18:59
我新作的PCB回来了,有动手能力的可以免费送PCB,需要自己焊接模块,刷固件。
[attach]31071[/attach]
作者: dpznyfwzx    时间: 2021-8-6 19:27
感谢分享
作者: star_liu    时间: 2021-8-6 20:31
zro22 发表于 2021-8-6 18:59
我新作的PCB回来了,有动手能力的可以免费送PCB,需要自己焊接模块,刷固件。
...

大佬能不能分享下打印文件?这个嘉立创5元打不了吧?
作者: bynow    时间: 2021-8-6 20:52
楼主我这边有个zigbee控制阀门,能写个程序吗?   有偿,有兴趣联系我,vx :AHONXXX
作者: zro22    时间: 2021-8-6 22:50
star_liu 发表于 2021-8-6 20:31
大佬能不能分享下打印文件?这个嘉立创5元打不了吧?

5元打不了,5块38块钱。gerber文件我放在首页了
作者: guibaodear    时间: 2021-8-8 18:39
zro22 发表于 2021-8-5 12:37
乐视那个小遥控器,电池那么快就完了?那我还是不买了

是啊,我当时刷的那个固件确实费电,电量嗖嗖的往下降,坚持不了几天,而且还是南孚的纽扣电池。
后来也没时间折腾,就扔那里没玩了。
当时一口气买了十几个,楼主要研究研究吗?免费送啊,研究好分享一下就行
作者: cym9007    时间: 2021-8-10 11:33
honry 发表于 2021-7-27 20:14
做的这个到现在还没做完,就缺键帽了

如果你在北京可以联系我,我有键帽
作者: zro22    时间: 2021-8-10 21:19
guibaodear 发表于 2021-8-8 18:39
是啊,我当时刷的那个固件确实费电,电量嗖嗖的往下降,坚持不了几天,而且还是南孚的纽扣电池。
后来也 ...

我也不会高,就是刷刷别人的固件,你刷过那个pm3固件吗?应该省点电吧?
作者: innx    时间: 2021-8-11 22:52
guibaodear 发表于 2021-8-8 18:39
是啊,我当时刷的那个固件确实费电,电量嗖嗖的往下降,坚持不了几天,而且还是南孚的纽扣电池。
后来也 ...

我也是一直想折腾乐视小遥控器来着还没买就看到了你这个帖子,只是想实现按键触发的效果而已,一直没考虑到原来刷固件会影响电量
作者: honry    时间: 2021-8-12 08:00
cym9007 发表于 2021-8-10 11:33
如果你在北京可以联系我,我有键帽

不在北京呢。主要是不知道用啥键帽
作者: cym9007    时间: 2021-8-12 20:56
honry 发表于 2021-8-12 08:00
不在北京呢。主要是不知道用啥键帽

明天上班争取给你发个图,或者自己搜索kb78可编程键盘,那个就是这个按键
作者: guibaodear    时间: 2021-8-15 22:58
zro22 发表于 2021-8-10 21:19
我也不会高,就是刷刷别人的固件,你刷过那个pm3固件吗?应该省点电吧? ...

别的没刷过,应该是有好几种固件,我看xian鱼上的用的固件就不太一样,有空试试
作者: guibaodear    时间: 2021-8-15 23:02
innx 发表于 2021-8-11 22:52
我也是一直想折腾乐视小遥控器来着还没买就看到了你这个帖子,只是想实现按键触发的效果而已,一直没考虑 ...

正常情况应该是很省电的吧,一般只在按键按下才发送数据,其他情况通信应该不多。
难道我固件烧的有问题?但除了功耗高,其他一切正常。
有时间换个别的固件试试
作者: 924215947    时间: 2021-10-9 15:43
楼主这个修改好了吗  
作者: 散步d小螃蟹    时间: 2021-11-7 09:55
honry 发表于 2021-7-27 20:14
做的这个到现在还没做完,就缺键帽了

大佬的这个做好了吗?想跟着做一个
作者: honry    时间: 2021-11-9 09:04
散步d小螃蟹 发表于 2021-11-7 09:55
大佬的这个做好了吗?想跟着做一个

做好了,但是感觉一般般
作者: 散步d小螃蟹    时间: 2021-11-9 10:30
honry 发表于 2021-11-9 09:04
做好了,但是感觉一般般

哪里不满意?大佬出个教程呗?
作者: trz0332    时间: 2022-2-19 22:12
实在搞不定。楼主可否帮我编译一个固件,6个按键的遥控的固件?6个按键对应的GPIO分别是P1.2到P1.7.感谢万分
作者: elliot    时间: 2022-5-6 23:07
有没有20键的遥控器推荐?
作者: elliot    时间: 2022-5-10 22:05
哎,模块不带pa   一米远就没反应了。。。
作者: zro22    时间: 2023-7-29 13:23
该遥控器免费送,邮费到付
作者: nxwgzs    时间: 2024-8-14 09:33
这个穿1个墙发射距离是多少
作者: 12505669    时间: 2024-12-10 16:32
本帖最后由 12505669 于 2024-12-10 16:40 编辑

1.  程序空间不够用,这个问题没有碰到。这个需注意ccdebug的固件(确定是不是刷CC2530的)。
2.  使用z2m内置的转化器只能是20个按键,内部转换器这个数(20个按键)是写死的。
3.  好像git上原作者的外部转化器不能正常使用。
4.  我下面提供一个25个按键的cc2530单片机程序(只提供改动部分),和一个能正常使用的外部转换器(25个按键的),按键处理部分根据自己的硬件键盘修改,我就不提供了。
5.  单片机程序修改内容
(1) 调整按键的数量  preinclude.h文件中
(2)调整  zcl_freepadapp_data.c  中的数组内数据

(3)为了使用外部转化器,对模型ID进行修改,避免使用内置的转换器

6. 提供外部转化器的完整代码
   1. 转化器文件名称: DIYRuZ_FreeBrd.js
   2. 具体代码见附件。   




作者: 12505669    时间: 2024-12-10 16:38
图片在这个文件里面




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5