天天看點

支援二次開發的Zigbee子產品(SNAP技術)

最近參與規劃的一個項目,需要大量的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子產品(SNAP技術)
直接從周立功公司購買的Zigbee套件,預設部署的是點對點的固件,通過ZigbeeCfg工具可以更新該固件,或更換為對等網固件。如果需要部署支援SNAP的固件需要用Synapse公司公司的Portal軟體進行部署(如下圖)。
支援二次開發的Zigbee子產品(SNAP技術)

警告:做這一步需要慎重考慮,因為部署後,周立功公司提供的ZigbeeCfg的工具上的SNAP選項也無法通路該子產品,這個時候如果恢複為原先的固件需要返廠處理。

SNAP目前最新版本的Python腳本支援72個系統函數,可以操作AD、GPIO、序列槽、SPI、I2C等相關接口,也可以執行休眠,重新開機等相關指令。

下面代碼是一個控制LED燈閃爍的腳本示例,内容如下:

"""Cycle the LEDs on the ZIC2410 evalboard"""

led = 0

def start():

    # Initialize LED pins asoutputs

    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 the100ms tick, increment led count and pulse next LED"""

    global led

    led = (led + 1) % 4

    pulsePin(led, 75, True)

 

def remoteLQ():

    """As anadded 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燈會依次閃爍。

支援二次開發的Zigbee子產品(SNAP技術)

不過由于該固件為國外公司所開發,如要求底層進行定制開發,比如支援單總線的溫濕度采集,就很難實作了。想到這裡,倒是有一個建議,國内如用STM32W Zigbee晶片做zigbee子產品的公司,可以考慮內建一個簡單的.NET MF架構,這樣使用者就可以用C#或VB.net進行Zigbee二次開發了,感覺要比Python編寫容易,且功能也強大的多。