请选择 进入手机版 | 继续访问电脑版
查看: 10194|回复: 15

关于修改sensordemo例程的一些经验

[复制链接]
jingyuxiong 发表于 2012-8-13 15:44:01 | 显示全部楼层 |阅读模式
      本人也是初学zigbee,暑假在一个老师这里做点小事打打杂,两周前老师让我改改zigbee的程序,对zigbee没什么认识的我来说确实是一个不小的挑战,在这过程中也遇到了不少问题,现在总结一下希望对大家有所帮助。
   这个程序实现的功能是上位机分别控制多个节点发送串行数据,开始使用的是serialapp这个例程,在点对点通信时程序一点都不用改都能走通(老师以前给我说程序已经调通了没问题。。),但是实际是需要对多个节点分别发送,这里就需要组网,在论坛里也有这样的帖子,我参考了奥特曼的建议放弃了使用serialapp转而研究sensordemo,sensordemo与我需要的功能可以说是恰好相反,一个是数据采集,而我需要的是简单控制,所以就进行了对例程修改的漫长过程:
    1、按键。sensordemo例程的原始功能中需要很多按键来实现,网上也有很多对如何删除按键的讨论,对终端节点,去掉按键使得能上电自动绑定后能自动发送report我采用的方法是将对应的按键处理代码剪切到  if ( event & MY_FIND_COLLECTOR_EVT )这个事件处理的代码最后;而对于协调器,按键操作就多了一点,首先是第一次烧写程序上电后需要按一次UP设置节点为Collector,之后节点会自动重启,这个按键我没有去处理,因为反正只需要设置一次,而另一个按键就是节点启动后设置Collector或者GateWay Mode,这个按键就比较烦人,每次上电都得按一次,所以我也将他处理掉了,具体的方法就是在节点初始化的时候允许绑定(allowbind)并将isGateway设置为TRUE,我的做法是将zb_AllowBind( 0xFF ); isGateWay = TRUE;两句添加到  if( event & ZB_ENTRY_EVENT )这个事件处理程序中,//start the device这个注释之前。这样就可以上电自动允许绑定了,按键事件处理函数也可以删除,我就懒得处理了。
    2、串口。sensordemo修改串口也是非常方便,大家可能都用过sensordemo配套的sensor monitor这个软件,其实这个软件就是通过串口与协调器通信,sensor monitor向协调器发送数据请求指令0x0021,协调器的串口回传函数uartRxCB就进行相应处理,调用sysPingReqRcvd();向sensor monitor发送协调器的一些基本信息。在协调器这端,串口基本不需要进行修改,由于我现在的应用是上位机向终端发送指令,所以我就需要对uartRxCB进行修改,我具体的做法是添加一个串口发送指令,在判断指令后协调器向所有节点广播串口发送数据,这里就不详细说明了;在终端节点,就需要改动更多的地方,一个首当其冲的问题就是协调器主动向终端广播,而sensordemo这个例程的终端节点是有睡眠模式的,原例程是终端节点定时唤醒然后主动向协调器发送数据,现在需要被动侦听网络中的串行数据,所有这个睡眠模式就必须去掉,具体处理方法是project--option--c/c++ compiler--Preprocessor中删除POWER_SAVING这一行。然后还得在void zb_ReceiveDataIndication( uint16 source, uint16 command, uint16 len, uint8 *pData  )这个函数下添加自己的代码,这里就不详细说了,就是简单的将接收到的数据通过串口发送出去。另外刚才删除POWER_SAVING的地方还得添加一行宏定义HAL_UART=TRUE,并在系统初始化事件  if( event & ZB_ENTRY_EVENT )内添加initUart(uartRxCB);,这里与协调器类似,这样就能使用终端节点的串口功能了。
    看起来没多少改动,我就用了两周多的时间,刚开始的时候一头雾水,钻进了代码堆里钻不出来,后来找到了飞比论坛这个平台,拜读了奥特曼等各位前辈大神的神迹,才慢慢对TI的协议栈工作的流程有了一点了解,在此我对各位前辈的无私奉献表示深切的感谢!
    这个项目完了之后我可能就不会再做zigbee了,马上就进入研究僧生涯,研究方向跟这个也没什么关系,也不能对这个进行深入的了解,希望留下这点东西能对后来人有点点作用,至少少走一点弯路受点启发之类。其实这个项目还有一点问题,就是终端节点的功耗,去掉睡眠后,功耗肯定就会升高不少,其实我也想了下也可以通过通信间的简单协议来解决,这些问题就留给后来人吧。。。
outman 发表于 2012-8-13 22:27:32 | 显示全部楼层
已经提升为vip会员,多谢楼主的共享,不管您以后用不用zigbee,经验总结下来,后来人一定会受益的
 楼主| jingyuxiong 发表于 2012-8-13 22:58:54 | 显示全部楼层
outman 发表于 2012-8-13 22:27
已经提升为vip会员,多谢楼主的共享,不管您以后用不用zigbee,经验总结下来,后来人一定会受益的

非常感谢奥特曼的回复!有点小激动{:soso_e136:}
我就是在修改例程的过程中深刻的体会到找点资料方法不容易,才想起写出来给后面的一点启示。。
wukaiing 发表于 2012-8-14 22:44:20 | 显示全部楼层
楼主你好,我这两天也在弄sensordemo的按键,但是出现了有些问题很奇怪,想向你请教,能否加我qq497447935让我向你请教啊。
 楼主| jingyuxiong 发表于 2012-8-14 23:10:00 | 显示全部楼层
wukaiing 发表于 2012-8-14 22:44
楼主你好,我这两天也在弄sensordemo的按键,但是出现了有些问题很奇怪,想向你请教,能否加我qq497447935让 ...

说不上请教吧,大家有问题可以讨论,你说得我害羞。。。
wukaiing 发表于 2012-8-14 23:16:08 | 显示全部楼层
jingyuxiong 发表于 2012-8-14 23:10
说不上请教吧,大家有问题可以讨论,你说得我害羞。。。

那你qq多少啊
wukaiing 发表于 2012-8-14 23:24:39 | 显示全部楼层
jingyuxiong 发表于 2012-8-14 23:10
说不上请教吧,大家有问题可以讨论,你说得我害羞。。。

本人用飞比的温湿度传感器例程做的实验,把原来collector和sensor需要的按键都去掉了,在飞比的EB板和BB板上也能跑通了,collector能每隔2秒收到sensor的数据。后来我用自己做的板子做sensor,飞比的EB板做collector也能每隔2秒收到数据。但是我把collector也改为用自己做的板子就没法收到数据了(感觉好像sensor就没入网,因为入网后sensor自动发送数据的话LED灯会快速闪烁。我的collector板的串口测试过是好的,无线也是能用的),能请教下大概会是什么问题吗
 楼主| jingyuxiong 发表于 2012-8-14 23:57:40 | 显示全部楼层
wukaiing 发表于 2012-8-14 23:24
本人用飞比的温湿度传感器例程做的实验,把原来collector和sensor需要的按键都去掉了,在飞比的EB板和BB板 ...

你可以使用仿真器调试嘛,看数据在哪里断了,先从sensor端调试看看,看看程序的运行情况再说,具体问题我也不好说得。你做的板子跟飞比的板子硬件上没什么区别吧?
 楼主| jingyuxiong 发表于 2012-8-14 23:58:29 | 显示全部楼层
wukaiing 发表于 2012-8-14 23:24
本人用飞比的温湿度传感器例程做的实验,把原来collector和sensor需要的按键都去掉了,在飞比的EB板和BB板 ...

还有,烧写不去掉按键的原始程序也跑不通吗?
wukaiing 发表于 2012-8-15 09:33:37 | 显示全部楼层
jingyuxiong 发表于 2012-8-14 23:58
还有,烧写不去掉按键的原始程序也跑不通吗?

我做的板子没有按键的啊,帅哥你qq多少啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表