支撑二次开辟的Zigbee模块(SNAP技巧)

    添加时间:2013-5-3 点击量:

    比来参与规划的一个项目,须要多量的Zigbee(约5000个)进行数据采集。因为是大面积布点,采取的是Mesh收集架构,所以很多节点都是所谓的路由节点,这就激发一个题目,路由节点一般景象下须要连气儿供电,因为现场前提只能采取电池供电,这和电池应用1到2年的请求产生了很大的冲突,所以须要zigbee支撑一种同步休眠的技巧。


    最初的规划推敲zigbee芯片+STM8l芯片,经由过程在单片中编程,用法度逻辑实现同步休眠,思路相对简单,就是主节点广播一个休眠指令,单片机收到后,把握zigbee进入休眠状况,同时本身也进入休眠中,经过预设的一段时候后,由时钟唤醒芯片,然后芯片再唤醒Zigbee,进行相干数据发送。因为STM8l是低功耗芯片,其采集传感器数据比zigbee模块直接采集传感器数据功耗会低很多,并且只是发送数据的时辰才开启zigbee,整体功耗会更低,然则电路的错杂性和本钱会增长不少。


    赫立讯公司的一个持续者在赫立讯Zigbee芯片技巧的架构上实现了一种所谓的同步休眠的技巧,在Zigbee模块中实现了上述的休眠逻辑,因为是在zigbee模块中直接实现,履行效力会更一些,外围电路也会更简单,不过其实现的靠得住性和稳定性,还有外部开辟和设备的才能须要进一步考验。


    在研究周建功zigbee芯片的时辰,发明周建功的zigbee芯片支撑一种SNAP的技巧,其大特点就是支撑用户二次开辟,这也是我第一次发明支撑用户二次开辟的Zigbee模块。该技巧在Zigbee模块中实现了一个Python虚拟机,用户经由过程编写Python脚本法度进行二次开辟(这算是第二次研究Python相干说话了,第一次是多年前实现LED大屏显示殊效的时辰用过Python脚本,请拜见相干博文《IronPython脚本应用之LED影像体系》)。


    SNAP是Synapse公司开辟的无线mesh收集和谈,供给脚本开辟对象和相干固件,其应用是须要授权费用的(可以免费应用6个,一个授权可能30元阁下)。SNAP收集简介如下:


     


    直接从周建功公司购买的Zigbee套件,默认安排的是点对点的固件,经由过程ZigbeeCfg对象可以进级该固件,或调换为对等网固件。若是须要安排支撑SNAP的固件须要用Synapse公司公司的Portal软件进行安排(如下图)。


     


    警告:做这一步须要稳重推敲,因为安排后,周建功公司供给的ZigbeeCfg的对象上的SNAP选项也无法接见该模块,这个时辰若是恢复为本来的固件须要返厂处理惩罚。


    SNAP当前新版本的Python脚本支撑72个体系函数,可以操纵AD、GPIO、串口、SPI、I2C等相干接口,也可以履行休眠,重启等相干指令。


    下面代码是一个把握LED灯闪烁的脚本示例,内容如下:



    Cycle the LEDs on the ZIC2410 eval board
    

    led
    = 0

    def start():

    Initialize LED pins as outputs

    setPinDir(0, True)

    writePin(0, False)

    setPinDir(
    1, True)

    writePin(
    1, False)

    setPinDir(
    2, True)

    writePin(
    2, False)

    setPinDir(
    3, True)

    writePin(
    3, False)



    def timer100msEvent(currentMs):

    On the 100ms tick, increment led count and pulse next LED

    global led

    led
    = (led + 1) % 4

    pulsePin(led,
    75, True)



    def remoteLQ():

    As an added bonus, respond to Link Quality Ranger requests too

    rpc(rpcSourceAddr(),
    remoteLQ



    Heres where we specify any Event Handlers we need.

    snappyGen.setHook(SnapConstants.HOOK_STARTUP, start)

    snappyGen.setHook(SnapConstants.HOOK_100MS, timer100msEvent)


    安排运行后,你会发明RXD/TXD和ERR灯会依次闪烁。


     


    不过因为该固件为国外公司所开辟,如请求底层进行定制开辟,比如支撑单总线的温湿度采集,就很难实现了。想到这里,倒是有一个建议,国内如用STM32W Zigbee芯片做zigbee模块的公司,可以推敲集成一个简单的.NET MF框架,如许用户就可以用C#或VB.net进行Zigbee二次开辟了,感触感染要比Python编写轻易,且功能也强大的多。


    我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
    分享到: