閩南理工學(xué)院電子與電氣工程學(xué)院 于雷 安玲玲
本文設(shè)計(jì)了基于物聯(lián)網(wǎng)的教室數(shù)據(jù)采集管理系統(tǒng),采用Arduino Nano單片機(jī),通過JDY-10M藍(lán)牙模塊讀取教室環(huán)境數(shù)據(jù)及設(shè)備使用情況,使用樹莓派4B和Django框架分別搭建云服務(wù)器和人機(jī)界面。測試結(jié)果表明,系統(tǒng)可以實(shí)現(xiàn)對教室環(huán)境實(shí)時(shí)監(jiān)控及教室設(shè)備的遠(yuǎn)程管理,能夠提升高校教室管理信息化水平。
目前許多高校教室采取的管理方式是僅通過一個(gè)管理系統(tǒng),對所有教室設(shè)備進(jìn)行管理和監(jiān)控[1],操作起來不是很方便。本文提出一種基于物聯(lián)網(wǎng)的高校教室數(shù)據(jù)采集管理系統(tǒng),能夠?qū)崿F(xiàn)教室環(huán)境參數(shù)與設(shè)備使用情況實(shí)時(shí)采集與遠(yuǎn)程管理。
系統(tǒng)在結(jié)構(gòu)上由下至上依次為感知層、傳輸層、云服務(wù)層和應(yīng)用層[2]。感知層由智能節(jié)點(diǎn)組成,包括燈、電扇、窗簾、二氧化碳傳感器、溫濕度傳感器、PM2.5傳感器。傳輸層由智能網(wǎng)關(guān)和無線通信模塊組成,功能是將感知層采集到的數(shù)據(jù)上傳至云服務(wù)層并接收控制數(shù)據(jù)。云服務(wù)層主要由TCP服務(wù)器和MySQL數(shù)據(jù)庫組成,功能是向MySQL數(shù)據(jù)庫儲存數(shù)據(jù),接收應(yīng)用層操作請求,向智能節(jié)點(diǎn)發(fā)送控制信息。應(yīng)用層功能是與管理人員進(jìn)行交互,對MySQL數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行可視化呈現(xiàn)。
(1)溫濕度傳感器。傳感器型號為DHT11,傳感器Signal引腳與Arduino Nano的A7引腳相連;Vcc與Arduino Nano的17引腳相連;GND與Arduino Nano的任意GND相連[2]。
(2)PM2.5傳感器。傳感器型號為PMS5003,傳感器PIN5引腳與Arduino Nano的10引腳相連并設(shè)置該引腳為軟串口;Vcc與Arduino Nano的27引腳相連;GND與Arduino Nano的任意GND相連。
(3)二氧化碳傳感器。傳感器型號為MG811CO2,傳感器S引腳與Arduino Nano的A5引腳相連;Vcc與Arduino Nano的27引腳相連;GND與Arduino Nano的任意GND相連。
(1)JDY-10M藍(lán)牙模塊組網(wǎng)設(shè)計(jì)。使用SSCOM串口助手軟件對JDY-10M藍(lán)牙模塊發(fā)送AT命令,設(shè)置流程如下:開始——設(shè)置串口波特率:AT+BAUD115200——配置廣播名:AT+NAME1024——配置組網(wǎng)ID號:AT+NETID785630——配置短地址:AT+MADDR01——重啟:AT+REST——結(jié)束。
每個(gè)藍(lán)牙的波特率設(shè)置為115200bps,廣播名設(shè)置為1024,組網(wǎng)ID設(shè)置為785630[3]。
(2)ESP8266 WiFi模塊聯(lián)網(wǎng)設(shè)計(jì)。采用站點(diǎn)模式,使用USB-TTL轉(zhuǎn)接頭與SSCOM串口助手進(jìn)行AT命令設(shè)置,流程如下:發(fā)送AT+RESTORE,使其回到初始狀態(tài)——發(fā)送AT+CWMODE=1,將ESP8266的模式設(shè)置為STA模式——使用AT+CWJAP=“TPLINK_5G”,“l(fā)ab404404”命令搜索并接入路由器,設(shè)置CIPMUX=0——發(fā)送AT+CIPMODE=1,設(shè)置為透傳模式——發(fā)送AT+CIPSTART= AT+CIPSTART=“TCP”,“192.168.1.237”,8080命令連接系統(tǒng)服務(wù)器——使用AT+REST重啟模塊并保存。
(3)主控模塊設(shè)計(jì)。采用Arduino Nano硬件通信串口TXRX連接ESP8266WiFi模塊,再通過軟件串口增加一組通信串口連接JDY-10M藍(lán)牙模塊,使用Arduino自帶的
云服務(wù)器采用樹莓派4B開發(fā)板進(jìn)行搭建,其處理器為ARM架構(gòu)A72四核處理器,服務(wù)器使用Ubuntu Mate 20.04.1LTS系統(tǒng)。
樹莓派4B安裝UbuntuMate20.04.1LTS系統(tǒng)后,使用apt-get命令安裝MySQL8.0。配置Python3安裝mysqlclient,安裝前置依賴libmysqlclient-dev,然后配置MySQL8.0的遠(yuǎn)程連接。
數(shù)據(jù)庫表由9個(gè)字段組成,具體如表1所示。
表1 MySQL數(shù)據(jù)庫表的定義Tab.1 The definition of MySQL database table
使用Python3 Socket搭建TCP服務(wù),共搭建四個(gè)TCP連接并分為兩組,一組進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù),另一組進(jìn)行數(shù)據(jù)存儲與通信服務(wù)[4]。
TCP數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)流程如下:初始化一個(gè)Socket,綁定樹莓派8082端口,當(dāng)云平臺需要發(fā)送控制數(shù)據(jù)時(shí),使用TCP Client方式建立TCP連接,然后發(fā)送控制數(shù)據(jù)。
TCP數(shù)據(jù)存儲服務(wù)流程如下:初始化兩個(gè)Socket,分別綁定樹莓派8080和8081端口,分別監(jiān)聽智能節(jié)點(diǎn)主控模塊上傳的環(huán)境數(shù)據(jù)以及數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)發(fā)送的控制數(shù)據(jù)。主控模塊與該服務(wù)進(jìn)行TCP連接后,自動定時(shí)上傳節(jié)點(diǎn)數(shù)據(jù)。該服務(wù)在接收數(shù)據(jù)后進(jìn)行解析并存入MySQL數(shù)據(jù)庫,同時(shí)開啟8081端口監(jiān)聽,在收到控制數(shù)據(jù)時(shí)發(fā)送給智能節(jié)點(diǎn)主控模塊。
通信模塊用于連接遠(yuǎn)程數(shù)據(jù)庫,以便對數(shù)據(jù)庫進(jìn)行增、刪、改、查的操作。使用Django自帶的數(shù)據(jù)庫mysqlclient,在Django的文件中settings.py設(shè)置如下:
將默認(rèn)連接的SQLite數(shù)據(jù)庫修改成遠(yuǎn)程的MySQL數(shù)據(jù)庫,使用Django Admin時(shí)即可自動連接數(shù)據(jù)庫。
(1)管理員登錄模塊。采用Django自帶的超級管理員創(chuàng)建方法,通過make migrations和migrate命令在MySQL中生成默認(rèn)表,使用create superuser命令創(chuàng)建管理員賬戶。
(2)數(shù)據(jù)監(jiān)測模塊。使用搭建的樹莓派云服務(wù)器,用于讀取數(shù)據(jù)庫最新的時(shí)間、溫度、濕度等數(shù)據(jù)。讀取方法為:在HTML頁面上加入一個(gè)Get請求,在后端Django中View中加入一個(gè)Get監(jiān)聽,在該View的Get監(jiān)聽方法中將讀取的數(shù)據(jù)使用env_data.objects.order_by("-time")「0」按照時(shí)間倒序排列并取第一行的值。讀取的數(shù)據(jù)為Query Set類型,將其轉(zhuǎn)換為Json類型,通過rander_to_response()方法將數(shù)據(jù)發(fā)送至前端HTML。在前端HTML中使用JavaScript設(shè)置一個(gè)定時(shí)刷新,從而獲取教室環(huán)境實(shí)時(shí)數(shù)據(jù)。
(3)設(shè)備管理模塊。該模塊用于控制燈、窗簾、電扇等設(shè)備。在云平臺設(shè)備管理界面選擇設(shè)備,將控制參數(shù)通過HTTP Post提交,在Django中的view.py中設(shè)置一個(gè)Post監(jiān)聽,監(jiān)聽到Post提交的參數(shù)后,通過TCP Client連接云服務(wù)器的數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù),將數(shù)據(jù)發(fā)送給云服務(wù)器[5]。云服務(wù)器將設(shè)備控制參數(shù)傳輸給智能節(jié)點(diǎn)主控板后,通過藍(lán)牙模塊發(fā)送至對應(yīng)設(shè)備。
(4)數(shù)據(jù)導(dǎo)出模塊。數(shù)據(jù)導(dǎo)出是為了系統(tǒng)擴(kuò)展機(jī)器學(xué)習(xí)功能模塊做準(zhǔn)備,數(shù)據(jù)導(dǎo)出功能使用Django的插件django_import_export,從MySQL數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)并保存為CSV文件,之后便于用Pandas庫和Numpy庫對數(shù)據(jù)進(jìn)行清洗[6],進(jìn)而進(jìn)行機(jī)器學(xué)習(xí)。
登錄云平臺后通過數(shù)據(jù)監(jiān)測功能可以查看教室設(shè)備狀態(tài)與環(huán)境數(shù)據(jù),打開環(huán)境與設(shè)備狀態(tài)信息查看存儲在云服務(wù)器數(shù)據(jù)庫上的數(shù)據(jù),如圖1所示。測試結(jié)果表明,智能節(jié)點(diǎn)數(shù)據(jù)傳輸正常,云服務(wù)器中的TCP數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù)以及存儲與通信服務(wù)均正常。
圖1 環(huán)境與設(shè)備狀態(tài)信息界面Fig.1 Environment and equipment status information interface
本文根據(jù)物聯(lián)網(wǎng)的三層結(jié)構(gòu)搭設(shè)計(jì)了高校教室數(shù)據(jù)采集管理系統(tǒng),能夠?qū)崿F(xiàn)對教室環(huán)境的實(shí)時(shí)監(jiān)控以及對教室設(shè)備的遠(yuǎn)程管理,具有良好的實(shí)用價(jià)值,同時(shí)也為下一步搭建機(jī)器學(xué)習(xí)模型以實(shí)現(xiàn)對教室設(shè)備的智能化控制奠定了基礎(chǔ)。