申贊偉, 殳國華, 張士文, 張 峰, 劉彥博
(上海交通大學電子信息與電氣工程學院,上海 200240)
物聯網是在互聯網的基礎上,將連接擴展和延伸到任何物體之間,并實現信息交換的互連網絡[1]。近年來日新月異的物聯網技術深刻地改變了人們的生產、生活方式[2]。隨著大帶寬、低時延的第5代移動通信技術的逐步普及商用,“萬物互聯”的物聯網愿景將加速實現[3]。為培養與蓬勃發展的物聯網產業相適應的工程技術人才,很多高校都開設了相關的物聯網實驗課程[4]。目前這些實驗課程的實施大致分為以下幾種類型:基于簡單的傳感器物聯網實驗,如火災報警、光控和聲控電路實驗等[5-6],這類物聯網實驗較為簡單,沒有體現完整的物聯網架構,不利于學生理解掌握物聯網理論知識;基于封裝實驗箱的物聯網實驗[7],此類物聯網實驗裝置隱藏了底層原理,不利于學生理解原理知識,且難以擴展更新;有的高校采用大型物聯網實訓平臺開展物聯網實驗[8-9],雖然功能齊全,但是價格昂貴,且占地面積大,不便于安裝維護。
利用低成本器件設計瀏覽器-服務器模式的耦合度低、功能豐富、架構完整的智能家居物聯網系統實驗。利用常見傳感器采集家居環境數據,低成本32 bit系列微控制器(SGS-THOMSON Microelectronics 32 bit Microcontroller Unit,STM32)單片機開發板搭建Web服務器并同時充當網關,使用發光二極管(Light-Emitting Diode,LED)模擬用電器,同時構建超文本標記語言(HyperText Markup Language,HTML)用戶頁面,實現客戶端監視環境數據并發送指令以控制家居系統。
系統架構如圖1所示,實驗方案涵蓋了感知層、網絡層和應用層等完整的物聯網體系結構。方案采用客戶端-服務器模型,其中客戶端為Web瀏覽器,服務器為基于STM32搭建的Web服務器,兩者通過以太網方式進行通信。之所以采用Web瀏覽器-Web服務器架構,是因為大部分用戶對于萬維網較為熟悉,且網頁制作在不同的計算機平臺上的標準比較規范[10],同時萬維網覆蓋范圍廣,Web瀏覽器-Web服務器架構易于擴展。

圖1 智能家居物聯網系統架構圖
在本系統,用戶通過Web瀏覽器向服務器請求交互頁面,該頁面為存儲在Web服務器中的HTML文件,用戶通過交互頁面控制家居系統,且頁面可顯示家居環境數據。在感知層,主要是監測家居環境的傳感器,如溫度傳感器、濕度傳感器和細顆粒物(Fine Particulate Matter,PM2.5)傳感器,以及日常家用電器設備。
(1)服務器。輕量級網際互聯協議(Light weight Internet Protocol,LwIP)是一個小型開源的傳輸控制協議/網際互聯協議(Transmission Control Protocol/Internet Protocol,TCP/IP)[11]。LwIP是輕量級IP協議,在保持TCP協議主要功能的基礎上僅需要15KB左右的隨機存取存儲器(Random Access Memory,RAM)和40KB左右的只讀存儲器(Read-Only Memory,ROM)等硬件資源[12],這使得LwIP協議棧適合在低端的嵌入式設備中使用。LwIP支持地址解析協議、網際協議版本4(Internet Protocol version 4,IPv4)和Internet控制報文協議,且它實現了IP數據報分片重組、擁塞控制、數據重傳等功能。本實驗方案就是將LwIP移植到STM32單片機上,以支持以太網通信,并在此基礎上搭建Web服務器。Web服務器的核心作用就是接收客戶端用戶指令并控制電器的工作狀態,還可以獲取傳感器的測量值并傳輸至網絡層,進而可以被客戶端獲取,所以STM32單片機也充當了網關的角色。如圖2所示,服務器主要包含:STM32主芯片(STM32F407ZGT6)、以太網(ENC28J60)、液晶顯示器(Liquid Crystal Display,LCD)、溫濕度傳感器、PM2.5傳感器、實時時鐘、定時器和用電器等模塊。

圖2 服務器結構圖
溫度傳感器、濕度傳感器及PM2.5傳感器測量得到溫、濕度值、PM2.5值后,將數據發送給服務器。服務器得到傳感器數據后,通過服務器端嵌入技術將數據插入網頁[13]。當瀏覽器對服務器發起請求時,服務器就將網頁發送至瀏覽器,通過瀏覽器解析顯示數據,用戶就可在客戶端的瀏覽器上實時監視環境溫度、濕度值及PM2.5值。
當服務器接收到客戶端的定時開啟請求時,服務器首先獲取客戶端所發送的開啟指令和定時時間,利用STM32的實時時鐘模塊實現對用電器的定時開啟。實時時鐘模塊擁有一個連續計數的計數器,在相應的軟件配置下,可以提供時鐘日歷的功能。該模塊還提供了鬧鐘中斷功能[14],設置鬧鐘中斷允許位,將用戶提交的定時開啟時間值存儲至鬧鐘寄存器,當系統時間與定時時間匹配時,可以產生鬧鐘中斷。在鬧鐘中斷程序中,點亮LED,即執行打開用電器的指令。
本方案采取脈寬調制(Pulse Width Modulation,PWM)技術進行功率調節。PWM利用微處理器的輸出來調節脈沖信號的占空比[15]。服務器根據用戶指令相應地改變捕獲/比較寄存器值,通過改變輸出脈沖的占空比,實現調節LED的亮度,即改變電器相關模塊的工作電壓。
(2)通信網絡。本方案采用家庭路由器搭建以太網。Web服務器和客戶端個人電腦(Personal Computer,PC)分別接入家庭路由器的兩個局域網(Local Area Network,LAN)口,服務器和客戶端的IP地址均由路由器的動態IP配置功能分配得到。圖3(a)為客戶端所獲取的IP地址示意圖,可見,PC的IP地址為192.168.1.105,子網掩碼為255.255.255.0。圖3(b)為服務器IP地址示意圖,Web服務器初始化成功以后,STM32單片機的LCD顯示其獲得的IP地址為192.168.1.101。所以客戶端與服務器位于同一個子網中,無須路由器進行IP數據報轉發,兩者即可通信。基于家用路由器搭建以太網,以以太網作為設備連接的基本形式,便于網絡的進一步擴展,且可使學生更形象直觀地理解計算機網絡理論知識。

圖3 路由器動態IP地址配置示意圖
(3)客戶端。如圖4所示為客戶端頁面。為使用戶頁面更加優雅和形象,采用了jQuery用戶界面(jQuery User Interface,jQuery UI)庫文件和層疊樣式表(Cascading Style Sheets,CSS)技術[16]。頁面實現了空調、加濕器和電燈的控制界面,包含了用電器開啟按鈕、開啟時間文本框、調節電器相關模塊工作電壓的滑塊和LED亮度視覺反饋的矩形區域。用戶可在文本框中輸入開啟時間并點擊開關按鈕,實現對用電器的定時開啟。用戶還可以移動滑塊,實現對用電器的相關模塊工作電壓控制。另外,頁面中還可以顯示傳感器所測量得到的家居環境的溫度、濕度及PM2.5值,為用戶決策提供依據。

圖4 客戶端頁面
客戶端頁面的核心是利用JavaScript代碼程序偵測HTML頁面事件,該事件可以接受用戶輸入并發送至服務器[17]。以定時開啟用電器為例,頁面部分關鍵代碼如圖5所示,代碼中定義了clickSwitch()函數,在這個函數里指定了硬件統一資源定位符(Uniform Resource Locator,URL)地址,并讀取表單數據(定時開啟指令及時間值),將其打包為JavaScript對象簡譜(JavaScript Object Notation,JSON)格式,method屬性指定請求方式為超文本傳輸協議(Hyper Text Transfer Protocol,HTTP)GET請求,并將clickSwitch()函數注冊為鼠標點擊事件。當用戶點擊按鈕時,clickSwitch()函數會被觸發運行,讀取用戶動作內容,并發送至Web服務器。采用異步JavaScript和XML(Asynchronous JavaScript And XML,AJAX)技術提交用戶請求,以實現向服務器發送異步請求,節約網絡帶寬和服務器資源,這對以STM32單片機作為低成本服務器的智能家居系統,具有重要意義。以控制家用空調(以LED1進行模擬)為例,在頁面的“開啟時間”文本框里輸入“17”“36”(17:36),點擊開啟按鈕,此時會觸發clickSwitch()函數,將“17”“36”時間值和開關指示“1”(代表要開啟電器)3個參數通過HTTP 1.1協議向Web服務器提交GET請求,假設服務器IP地址為192.168.1.101,則請求鏈接格式為http://192.168.1.101/led1?switch=1&hour=17&minute=36,學生可以通過瀏覽器調試工具直觀、形象地觀察到該用戶請求鏈接。當用戶移動滑塊進行功率調節時,程序讀取滑塊所指示的PWM值,同時觸發clickSwitch()函數執行,函數將PWM值以GET請求方式提交至服務器,假如PWM值為240,則請求鏈接格式為http://192.168.1.101/led1?PWM=240。

圖5 客戶端頁面關鍵代碼
基于教學成本和場地考慮,方案采用紅色LED模擬空調,綠色LED模擬加濕器,藍色LED模擬電燈,LED的亮滅和亮度變化可以很好地模擬用電器的開關和相關模塊的工作電壓調節場景。同時,使用PC、家用路由器、STM32單片機、DHT11濕度傳感器、DS18B20溫度傳感器、GP2Y1014AU PM2.5傳感器等器件搭建如圖6、7所示的系統裝置。客戶端PC和單片機服務器通過網線接入路由器LAN口,傳感器和LED置于“通用”電路板上,通過杜邦線與單片機輸入、輸出(Input Output,I/O)口連接。可見,該物聯網系統包含了完整感知層、網絡層、應用層3層架構,并且架構各層之間實現了松耦合。對系統進行功能測試時,首先用瀏覽器打開HTML用戶頁面,在“空調開關”的區域的文本框輸入時間(17:36),并開啟開關按鈕。當系統時間達到所預約的定時時間后,可以觀察到,如圖7(a)所示,空調成功開啟(紅色LED點亮)。當用戶在瀏覽器上向右移動滑塊,調節空調制冷模塊的工作電壓,紅色LED亮度增加。在服務器端,空調的工作狀態還可以由LCD顯示。如圖7(b)所示,空調(Air Conditioner,AC)的開關狀態為“On”,Power(制冷功率)狀態為“High”。LCD也正確顯示了當前環境的溫度、濕度和PM2.5值,表明傳感器也都處于正常工作狀態。溫度、濕度和PM2.5值等數據還可以傳輸至客戶端,由瀏覽器解析并顯示,實現客戶端監視。

圖6 智能家居物聯網系統裝置圖

圖7 智能家居物聯網系統感知層設備及狀態顯示
本實驗構造了涵蓋感知層、網絡層和應用層等完整架構的物聯網系統,學生不僅鍛煉了傳感電路設計、控制電路設計等基本的電工電子技能素養,并且基于計算機網絡原理和前后端開發技術搭建起完整的客戶端-服務器架構,形成了專業理論的有效銜接,實現了多學科背景知識的融會貫通。同時,通過編寫簡單的前后端代碼、調試觀察瀏覽器請求信息,可深刻理解物聯網的應用層與感知層的信息傳輸過程,觸摸物聯網技術本質。
本實驗功能需求豐富多樣,采取了層次遞進、靈活要求的設計方式,以實現因才施教、區分教學。設定了多層次任務目標供學生靈活選擇。
基本任務:使用傳感器實現對環境指標數據的采集,搭建用電器控制電路。
進階任務:搭建完整的Web瀏覽器-Web服務器模型,并且編寫HTML用戶頁面,以實現客戶端控制和監視家居系統。
本實驗是一個融合較多學科背景的綜合實踐,涉及知識面較廣,教學實施過程中注重詳略得當,著重加強對學生的啟發引導,培養學生自主學習知識、自主解決問題的能力。比如實驗中所涉及必需但非核心知識點,比如前端設計中的HTTP協議、URL、HTML、CSS、jQueryUI庫等知識,教師會向學生推薦相關的參考書籍、網課等,鼓勵學生自主學習;對于路由器的設置、LwIP協議移植等操作方法,向學生提供技術手冊或者開源網址供學生查閱參考,以鍛煉學生自主實踐動手能力。
本物聯網系統實現了架構各層之間的松耦合,安裝有支持HTML標準的瀏覽器的個人電腦、平板電腦或手機均可以作為客戶端,服務器為STM32單片機,通過家用路由器或小型交換機就可以搭建以太網。有效降低了系統的搭建、測試、聯調的場地和設備要求,便于裝置的靈活部署,學生在實驗室、自習室甚至宿舍均可以進行實驗探究與操作。松耦合性還有助于學生充分發揮主觀能動性,通過發散思維,實現系統功能的進一步擴展。例如,學生嘗試將以太網通信方式改為Wifi無線通信方式時,僅需要在“通用”板上添加一個ESP8266模塊,并與STM32串口相連,再通過發送AT指令與路由器實現連接即可。本實驗所需要的器件成本較低、易于獲取,有利于推廣教學。
本實驗以日常家居場景為切入點構建物聯網系統,實現了客戶端監視家居溫度、濕度、PM2.5值和定時開啟用電器并調節相關模塊的工作電壓,其功能需求貼近生活實際,可以很好地激發學生的動手興趣。由于學生對該情景比較熟悉,所以更利于學生迸發創新思維、實現功能拓展。
本文以智能家居為背景,設計了涵蓋感知層、網絡層和應用層的物聯網系統實驗,學科背景知識綜合度高、覆蓋知識面廣,有助于學生專業知識的融會貫通,深刻理解掌握物聯網理論知識;采用層次遞進的教學方式,注重培養學生自主學習、自主實踐的能力;實驗系統各部分耦合性弱,有利于實驗的靈活擴展,各部分所采用的分立器件成本較低,利于實驗的推廣教學;實驗場景貼近生活實際,可以很好激發學生動手興趣。