支持二次開發的Zigbee模塊(SNAP技術)

 

支持二次開發的Zigbee模塊(SNAP技術)

最近參與規劃的一個項目,須要大量的Zigbee(約5000個)進行數據採集。因爲是大面積布點,採用的是Mesh網絡架構,因此不少節點都是所謂的路由節點,這就引起一個問題,路由節點通常狀況下須要持續供電,因爲現場條件只能採用電池供電,這和電池使用1到2年的要求產生了很大的衝突,因此須要zigbee支持一種同步休眠的技術。html

最初的方案考慮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網絡簡介以下:app

 

直接從周立功公司購買的Zigbee套件,默認部署的是點對點的固件,經過ZigbeeCfg工具能夠升級該固件,或更換爲對等網固件。若是須要部署支持SNAP的固件須要用Synapse公司公司的Portal軟件進行部署(以下圖)。框架

 

警告:作這一步須要慎重考慮,由於部署後,周立功公司提供的ZigbeeCfg的工具上的SNAP選項也沒法訪問該模塊,這個時候若是恢復爲原先的固件須要返廠處理。ide

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')     # Here's where we specify any "Event Handlers" we need.
 snappyGen.setHook(SnapConstants.HOOK_STARTUP, start)  snappyGen.setHook(SnapConstants.HOOK_100MS, timer100msEvent)
複製代碼

部署運行後,你會發現RXD/TXD和ERR燈會依次閃爍。post

 

不過因爲該固件爲國外公司所開發,如要求底層進行定製開發,好比支持單總線的溫溼度採集,就很難實現了。想到這裏,卻是有一個建議,國內如用STM32W Zigbee芯片作zigbee模塊的公司,能夠考慮集成一個簡單的.NET MF框架,這樣用戶就能夠用C#或VB.net進行Zigbee二次開發了,感受要比Python編寫容易,且功能也強大的多。

相關文章
相關標籤/搜索