在物聯網(IoT)領域,裝置可以使用乙太網和無線網進行網路連線。
常見的低功耗WiFi裝置有:可視門鈴,可視貓眼,智慧門鎖等裝置。
他們的特點是:裝置依賴鋰電池供電,電池容量一般較低,對裝置功耗非常敏感。
正常工作的時候,裝置是處於休眠保活的低功耗狀態,它可以通過兩種方式喚醒裝置:
通過上面介紹,我們可以知道該類裝置主要的功耗消耗在於兩個方面:
最理想的功耗控制方案是:裝置休眠保活時的功耗非常低,裝置事件觸發正常工作的頻率非常低,每次喚醒工作的時間非常短。
我們可以看下面360可視門鈴對功耗和續航的描述:
低功耗保活技術,實際上也就是低功耗裝置在休眠的時候,裝置端與IoT平臺保持一個網路上的連線,這樣做有兩個目的:
為了降低裝置端的功耗,裝置端一般是設定60秒或是更加長的時間週期往IoT平臺傳送一個心跳包,以保持裝置線上狀態。
如果IoT平臺超時沒有收到裝置端的心跳,會判定裝置以及離線。
正常保活功耗圖如下:
對於上面介紹的這類通過WiFi進行休眠保活的裝置,在實際應用中會出現各種問題,比如:
為什麼會出現這些差異?其根本原因是什麼?又可以通過什麼方式進行規避呢?
這裡主要是跟路由器的beacon有關係,beacon是路由器定期廣播的一種管理幀,它攜帶了關鍵的網路資訊,比如SSID,Rates,DSPS等資訊。下面是使用抓包工具抓得一個beacon幀資訊
路由器一般是100ms廣播一次,同樣的,裝置端的WiFi模組也會以相同的週期去接受路由器的beacon,這裡有兩個目的:
那為什麼裝置連線不同的路由器,裝置端休眠保活的功耗會不一樣呢?
主要原因是:路由器的beacon包規律性存在差異
同一個裝置,連線到同一個路由器功耗會存在差異,主要原因有:
距離與障礙物遮擋,這類問題還是比較容易被發現,但無線干擾這個就比較難定位,無線干擾主要是指同頻段的電磁波干擾。
因為有干擾源的存在,路由器發出的beacon廣播包,裝置端可能會接收不到,所以裝置端會超時接收,導致功耗變大。
如何檢視環境的干擾情況呢?
下圖是使用抓包工具去抓路由器 beacon
廣播包的情況,FAST_EA06
是路由器名
通過分析抓取到的beacon包,可以知道功耗偏高問題,是當前環境干擾引起的,還是裝置端自身的問題。
其它的一些問題,比如:同時生產的一批裝置,在國內沒問題,在國外使用就會出現只能用幾天的問題,或者是連線到某些路由器時就會出現電量消耗很快的情況。
這類問題的原因可能會比較多,主要是跟路由器的設定有關係,比如路由器的租期時間長短,路由器ARP快取表更新策略等
這裡分析一下路由器ARP快取表更新引起的功耗變大問題
路由器和主機都會維護一個ARP快取表,目的是為了解析IP地址與MAC地址之間的關係。
如果裝置剛連線上裝置,路由器ARP快取表上沒有該裝置IP和MAC地址資訊,那麼路由器會廣播,「誰擁有這個IP地址對應的MAC地址?」,該IP的裝置收到該廣播後,正常應該將自己的MAC地址告知路由器。
如果裝置端沒有應答該路由器的ARP請求,或者是說該應答機制有問題,那麼,有些路由器有可能會斷開該IP的所有連線,導致的結果就是裝置端與IoT的保活連線被斷開
如果保活鏈路被斷開了,那麼裝置端需要被喚醒,重新建立保活連線,這樣一來,裝置端的功耗就會變得很高。
如果一直沒有ARP應答,那麼裝置可能間隔一小段時間,就會被喚醒去重新建立網路。最終的結果就是裝置使用幾天就沒電了。
要優化嵌入式WiFi保活功耗,主要的方式有:
功耗控制是一個綜合性問題,與裝置結構,硬體,軟體都有關係。在電池技術沒有突破性進展的前提下,要想做到超時長續航,在產品功能上勢必需要做一些取捨。