Wi-Fi無線接入技術基于IEEE802.11協議,是目前無線通信中最常用的無線接入技術。然而,Wi-Fi無線接入技術有一個致命弱點——功耗高。因此,如何降低Wi-Fi無線接入技術的功耗成為了急需解決的問題。移動終端通過無線路由器提供的Wi-Fi信號接入互聯網或者進行定位服務,然而由于Wi-Fi的高功耗使得無線路由器必須一直連接電源才能保持正常工作,這就嚴重限制了人們的使用范圍。我們希望在沒有電源接入的地方(比如古老景區、歷史遺跡)也可以使用無線路由器,為移動終端提供服務。
1、IEEE802.11協議
IEEE802.11協議是由美國電氣與電子工程師學會(IEEE)開發的一組無線傳輸協議。這些協議定義了無線站點(或接入點)之間兩個或多個無線站點之間的通信的接口。該協議主要包含物理層和MAC層,主要工作在ISO協議的最低兩層上,本文主要研究該協議的MAC層。
IEEE802.11協議定義幀包含以下幾個部分:
◆MAC頭部。包含幀控制、持續時間、地址和排隊控制信息。
◆有效長度的幀體。包含幀信息、幀類型。
◆FCS。包含CRC校驗的信息。
控制幀:主要用于協助數據幀的傳遞,所有控制幀都使用相同的Frame Control字段。
管理幀:負責在工作站和AP之間建立初始的通信,提供認證和連接服務,包括連接請求/響應、輪詢請求/響應、Beacon幀等。
Beacon幀:主要聲明網絡的存在。定期傳送的信標可以讓移動式工作站得知該網絡的存在,從而調整加入該網絡所必需的參數。在基礎結構網絡中,接入點負責傳送Beacon幀。
由圖1的IEEE802.11協議幀結構可以看出,如果僅僅保留IEEE802.11協議廣播Beacon幀功能的話,則只需發送很少的數據,可以大大地降低功耗,而且我們還可以通過開源路由技術修改IEEE802.11協議來達到降低功耗的目的。
2、開源路由技術
圖2為TCP/IP與OSI參考模型的對應關系,可以看出路由器是工作在OSI模型中的第3層,即網絡層。同時也是TCP/IP協議的第3層,即網際層。路由器利用網絡層定義的“邏輯”網絡地址(即IP地址)來區別不同的網絡,實現網絡的百聯和隔離,保持各個網絡的獨立性。路由器不轉發廣播消息,而把廣播消息限制在各自的網絡內部。發送到其他網絡的數據均被送到路由器,再由路由器轉發出去。
無線路由器是基于開源的Linux操作系統,然而商業路由器為了保護自己的技術是不會把固件源碼公開的,因此不能由第三方軟件開發者直接對其固件進行開發。自從Linksys釋放WRT54G/GS的源碼后,開源軟件愛好者開發出很多不同版本的固件,以增強原有的功能或者增加原來沒有的功能。下面是主流的無線路由的Linux發行版:
①Open-WRT。國內最早興起刷固件行動的人基本上都是將自己的設備刷新成Open-WRT,由此可見Open-WRT具有極大的影響力。該固件通過SSH加密協議來配置,與Cisco設備在很多指令和操作上類似。
②DD-WRT。該固件是國內外目前最為流行的固件之一,它是在Open-WRT固件的基礎上改進后發布的,很多功能都是取自Open-WRT。存應用范同上DD-WRT支持極多的硬件平臺,并且新版本的發布也很及時。
③Hyper-WRT。該固件是以穩定著稱的第三方同件,不過功能上要比前兩種稍遜一籌。從核心代碼上看,它是最接近Linksys官方固件的固件。對很多用戶來說,新功能、新應用的出現是他們刷新同件的主要動力,如果只是要求單一的穩定,那么直接使用官方默認固件即可。
④Tomato。這是一款逐漸流行的固件,個頭比較小,實際使用起來非常穩定,而且基于SVG的圖形化流量圖非常有特色。它是由Hyper-WRT研發團隊中的一個組員開發的。
本文選用的第三方固件是Open-WRT,之所以選擇Open-WRT是因為它是完全開源的,方便編譯和配置,有對應路由器所需要的固件,重新刷固件也很方便。
3、低功耗無線路由器的實際應用
眾所周知,在古老歷史遺跡和古老景區內是很難實現網絡接入的,主要原因是布線困難,因為布線會對歷史遺跡產生損害。這時候就需要離線的導游導覽系統來實現智慧景點的建設。本文研究的系統就是基于離線移動互聯網沒備(Mobile Internet Device,MID)的導游導覽系統。在這個系統中,無線路由器所要實現的功能是以固定間隔發送廣播幀,游客在游玩的時候,MID會根據廣播幀的信號強度和SSID號來判斷游客所在的位置,同時自動播放游客所到景點的視頻和語音介紹信息。
在這個系統中無線路由器只需要提供以同定間隔發送廣播幀的功能即可。由路由器的工作原理和IEEE802.11協議幀結構可以看出,無線路由器的功耗主要在數據傳輸和實現其路由功能上面,而發送廣播幀的功耗很低。由此想到,如果將路由器的路由功能禁止并且不讓其傳輸數據,只讓其以固定間隔發送廣播幀,那么將會大大降低功耗,而我們需要的這些功能是可以通過修改第三方固件Open-WRT實現的。
4、無線路由器和Open-wRT固件的選擇
經調查研究各種路由器,最終選擇了中興公司的H118B路由器,使用的是BCM5354芯片,支持DD-WRT、Open-WRT等主流第三方固件,此款路由器的硬件配置是:8 MB Flash、32 MB ROM、BCM5354 CPU。
從Open-WRT官網上查得支持BCM5354芯片的固件是openwrt-brcm47xx-squashfs. trX。準備好路由器和固件之后,就是將固件刷入路由器以覆蓋原來的固件,使用tftp方式進行刷機。當刷機成功后,用telnct登錄路由器會顯示結果。刷機成功界面如圖3所示。
刷機成功之后是鋰電池的準備,選擇的是輸入電壓12.6 V、輸出電壓12 V、容量為5000 mAh的鋰電池進行測試。
5 Open-WRT固件的修改和測試
Open-WRT固件配置的修改
首先,Open-WRT固件的SSID廣播是默認隱藏的,需要修改其顯示為SSID。修改方式如下:
◆執行vi/etc/config/wireless命令;
◆將option disabled 1改為option disabled 0;
◆修改過之后發現筆記本的無線網絡列表里面顯示的路由器的SSID名稱為openwrt。
然后需要做的事情是禁止路由器的路由功能。修改方式如下:
◆輸入vi/etc/sysctl.conf命令;
◆將net.ipv4.ip_forward=1改為net.ipv4.ip_for ward=0。
最后需要做的就是改變路由器發送廣播幀的間隔時間,路由器的默認發送廣播幀的間隔是100ms,而對于我們的導覽系統是不需要這么頻繁地發送廣播幀的。對于游客來說在100ms之內移動的距離太短了,所以經過研究最終決定將發送廣播幀的間隔改為2 s。在實際的游覽景區中游客行走的很慢,2 s的時間只能行走很短的距離,恰好符合系統的需求。通過給Open-WRT固件的無線配置文件加上控制幀,可以改變發送的間隔。
修改方式如下:
◆輸入vi/etc/config/wireless命令;
◆在配置文件中加入option beacon_int 2000,次命令行是將Beacon幀的發送間隔設置為2 s。
修改過程中的測試結果
測試過程共分為兩次:第一次是在刷入固件后不做任何修改的情況下測試無線路由器的使用時間,在12 V、5 000 mAh供電的情況下,路由器可以使用約8 h。第二次是禁止路由功能只發送廣播幀的情況下,經測試路由器可以持續工作約42 h。
可以得出結論:在禁止路由功能并且默認發送廣播幀的時間間隔為100 ms的情況下,路由器可以持續工作約42 h;在把路由器發送廣播幀的時間間隔改為2 s的情況下,路由器大約可以持續工作800h,固件修改過程中的無線路由器工作時間對比如圖4所示。
按照景區一天開放時間為10 h計算,一塊電池可以給路由器供電80天,這樣基本達到了我們的要求,因為兩三個月給路由器電池充一次電還是比較方便的。