藍 波,孫浩然,趙 通,劉國棟
(1.北京石油化工學(xué)院信息工程學(xué)院,北京 102617;2.北京遨博雄鷹科技有限公司,北京 102299)
信息數(shù)量的爆炸式增長伴隨著不確定性的急劇上升,顯著增加了公眾對信息可信度判斷的困難程度[1]。在大數(shù)據(jù)和智能技術(shù)蓬勃發(fā)展的今天,利用相關(guān)技術(shù)可以實現(xiàn)疫情預(yù)防,協(xié)助醫(yī)療機構(gòu)發(fā)現(xiàn)傳染源,提高醫(yī)院診療效率。與此同時,疫情數(shù)據(jù)的實時性對于疫情防控至關(guān)重要,是政府及相關(guān)部門做出相應(yīng)防控措施的保障。有研究人員開發(fā)了實時疫情地圖平臺,公眾在手機以及PC 上打開軟件或者網(wǎng)站即可查看相關(guān)疫情數(shù)據(jù)。但這種方式獲得的數(shù)據(jù)量都在幾十萬字節(jié)以上,適用于PC 端,無法適用于存儲有限的MCU,因此需要對數(shù)據(jù)進行壓縮,從而減少數(shù)據(jù)量,以便將其加載到MCU 中進行后續(xù)處理。
STM32 和ESP8266 模塊在許多行業(yè)都有著十分廣泛的應(yīng)用[2-5]。王鵬輝等[6]針對現(xiàn)有的物聯(lián)網(wǎng)溫室自動控制水平較低、管理模式落后、通信結(jié)構(gòu)復(fù)雜、建網(wǎng)成本高等缺點,設(shè)計了一種基于ESP8266 的低成本物聯(lián)網(wǎng)連棟溫室控制管理系統(tǒng)。張琥石等[7]介紹了一款基于ESP8266 WiFi模塊的物聯(lián)網(wǎng)數(shù)控直流電壓源;田旭飛等[8]設(shè)計了一種基于LoRa 和STM32的路燈自動監(jiān)控系統(tǒng);姚啟龍[9]為了實時監(jiān)測谷物水分變化,設(shè)計了一種基于STM32 的谷物水分在線監(jiān)測系統(tǒng)。陳顯等[10]設(shè)計了基于STM32 的動車組軸端加速度監(jiān)測裝置;于鵬[11]針對艦船通信系統(tǒng)容易出現(xiàn)通信指令不完整而導(dǎo)致通信周期長的問題,提出了基于STM32 嵌入式微處理器的艦船網(wǎng)絡(luò)通信系統(tǒng)設(shè)計。
雖然STM32 與ESP8266 模塊在許多行業(yè)應(yīng)用廣泛,但缺少在新冠疫情監(jiān)控方面的應(yīng)用。文中設(shè)計了一套價格低廉且實用性高的實時監(jiān)控終端系統(tǒng),用于實時呈現(xiàn)新冠疫情數(shù)據(jù),以便于相關(guān)人員開展疫情防控。
新冠疫情實時監(jiān)控終端系統(tǒng)包含數(shù)據(jù)實時抓取部分和數(shù)據(jù)實時顯示部分。抓取的數(shù)據(jù)來自網(wǎng)絡(luò),并轉(zhuǎn)化為結(jié)構(gòu)化數(shù)據(jù),最終存儲到本地計算機或數(shù)據(jù)庫。數(shù)據(jù)抓取結(jié)構(gòu)如圖1 所示。
圖1 數(shù)據(jù)抓取結(jié)構(gòu)
數(shù)據(jù)抓取部分采用爬蟲對新冠疫情數(shù)據(jù)進行爬取。爬蟲從一個或若干個初始網(wǎng)頁的URL 開始,獲得初始網(wǎng)頁上的URL。在抓取網(wǎng)頁的過程中,不斷從當(dāng)前頁面上抽取新的URL 放入隊列,直到滿足系統(tǒng)的一定停止條件為止。通過網(wǎng)頁分析算法過濾與主題無關(guān)的鏈接,保留有用的鏈接并將其放入等待抓取的URL 隊列,再根據(jù)一定的搜索策略從隊列中選擇下一步要抓取的網(wǎng)頁URL,重復(fù)上述過程,直到達到系統(tǒng)的某一條件時停止。將抓取到的數(shù)據(jù)進行壓縮,以json 數(shù)據(jù)包的形式進行存儲,最后將數(shù)據(jù)包封裝成API 接口以供終端獲取。
實時監(jiān)控終端采用STM32 作為其MCU,利用無線模塊接入到無線網(wǎng)中。接入網(wǎng)絡(luò)后,通過API 接口獲取到數(shù)據(jù)包,終端對數(shù)據(jù)進行解析,解析后的數(shù)據(jù)可以直接顯示在OLED 屏幕。為保證新冠疫情數(shù)據(jù)的實時性,終端系統(tǒng)定時對數(shù)據(jù)包進行獲取并更新到OLED 顯示。相關(guān)人員可通過OLED 屏幕顯示的內(nèi)容掌握新冠疫情的實時數(shù)據(jù),解決了手機查看新冠疫情數(shù)據(jù)需要手動刷新的問題。疫情監(jiān)控系統(tǒng)終端運行過程如圖2 所示。
圖2 疫情監(jiān)控系統(tǒng)終端運行過程
疫情監(jiān)控系統(tǒng)終端硬件部分主要由主控芯片最小系統(tǒng)模塊、電源模塊、串口通信模塊、人機交互模塊以及無線通信模塊構(gòu)成。
電源模塊有電池供電與USB 供電兩種供電方式,經(jīng)過AMS-1117-3.3 穩(wěn)壓電路與濾波電路[12-13],將輸出電壓穩(wěn)定在3.3 V,其原理圖如圖3 所示。AMS1117-3.3芯片輸入電壓需滿足4.75 V≤VIN≤12 V。該電路從左至右依次為輸入、接地、輸出部分。電解電容C18用于濾除電源輸入端的低頻紋波,無極性電容C19用來濾除電源輸入中的高頻紋波。在AMS1117-3.3 芯片輸出端加上了兩個輸出濾波電容C21和C30,用于防止電壓輸出波形出現(xiàn)振蕩。LED 用于顯示輸出電壓,當(dāng)終端中接入電源時,LED 點亮,表示供電正常。電源電路中,電阻R8為限流電阻,阻值為510 Ω。
圖3 電源電路原理圖
終端的控制部分采用STM32F103VET6 作為主控芯片,還包括由時鐘電路、復(fù)位電路和濾波電路組成的外圍電路。STM32F103VET6 具有32 位Cortex 內(nèi)核,內(nèi)置512 kB 閃存和64 kB 靜態(tài)隨機存取存儲器以及11 個定時器。該主控芯片包含80 個通用輸入輸出口,同時內(nèi)置3 路12 位模數(shù)轉(zhuǎn)換器和2 路12 位數(shù)模轉(zhuǎn)換器。主控芯片的供電電壓范圍為2~3.6 V,因此采用穩(wěn)壓后的3.3 V 電壓對主控芯片供電。穩(wěn)壓后的3.3 V 電壓經(jīng)過電容濾波后,接入主控芯片的VDD 端口。復(fù)位電路采用電阻、電容與按鍵開關(guān)實現(xiàn),當(dāng)按鍵開關(guān)懸空時,主控芯片NRST端口處于高電平;當(dāng)按鍵按下時,NRST 端口變?yōu)榈碗娖?,芯片?fù)位。終端中主控芯片最小系統(tǒng)部分如圖4 所示。
圖4 主控芯片最小系統(tǒng)
終端使用CH340G 串行轉(zhuǎn)換芯片及外圍電路實現(xiàn)USB 轉(zhuǎn)換串口功能,同時可以通過串口向主控芯片中下載程序?;贑H340G 串行轉(zhuǎn)換芯片串口轉(zhuǎn)換電路,可以通過主機實現(xiàn)STM32 單片機的擦除、編程、校驗和加密。利用該電路進行程序下載不需要單片機控制,具有電路簡單、價格低廉、功能穩(wěn)定、下載速度快、無需冷啟動等優(yōu)點[14]。終端中串口通信電路如圖5 所示。在使用串口向主控芯片下載程序過程中,首先將圖4 中主控芯片的BOOT0 引腳置于高電平,BOOT1 引腳置于低電平,按下復(fù)位按鍵,即NRST引腳由高電平置于低電平,主控芯片進入系統(tǒng)存儲器啟動模式,通過串口可把程序燒錄至主控芯片的FLASH 中。燒錄完成后,將主控的BOOT0 引腳置于 低電平,主控芯片復(fù)位后,燒錄進去的程序開始運行。
圖5 串口通信電路
終端采用OLED 顯示屏與按鍵的方式實現(xiàn)人機交互功能。OLED 顯示屏模塊具有8 引腳插針,通過插接的方式插入終端電路板的排母。終端電路板通過SPI 方式與OLED 顯示屏模塊通信。終端電路板中設(shè)計了四個按鍵用于外部輸入設(shè)置,其中一個按鍵為系統(tǒng)喚醒按鍵,其余三個為自定義按鍵,可在程序中設(shè)定。當(dāng)按鍵懸空時,按鍵所連接的主控芯片引腳狀態(tài)為高電平;當(dāng)按鍵按下時,該引腳狀態(tài)變?yōu)榈碗娖?,觸發(fā)外部中斷。人機交互電路原理圖如圖6所示。
圖6 人機交互電路原理圖
終端通信部分選用ESP8266 模塊作為網(wǎng)絡(luò)收發(fā)器接入網(wǎng)絡(luò)。ESP8266 模塊供電范圍為3.0~3.6 V,與STM32 通過串口方式通信,該模塊原理圖如圖7所示。ESP8266 模塊可以連接到2.4 GHz 的無線網(wǎng)絡(luò)當(dāng)中,同時兼容IEEE802.11b、IEEE802.11g 和IEEE802.11n 三種無線協(xié)議[1-16]。ESP8266 模塊支持三種工作模式,分別為STA 工作模式、AP 工作模式和STA+AP 工作模式。在文中終端設(shè)計中,將ESP8266模塊設(shè)置為STA 模式。
圖7 ESP8266模塊原理圖
疫情監(jiān)控系統(tǒng)終端軟件主要包含數(shù)據(jù)獲取、數(shù)據(jù)分析與數(shù)據(jù)顯示部分,其流程圖如圖8 所示。
圖8 程序流程圖
終端開始運行之后,程序首先進行初始化,包括OLED 屏幕顯示初始化、ESP8266 通信初始化和中斷程序初始化。MCU 通過串口方式與ESP8266 通信,發(fā)送AT 指令對ESP8266 進行設(shè)置。首先關(guān)閉透傳模式,將工作模式設(shè)置成WiFi 的STA 模式,隨后設(shè)置要接入WiFi 的網(wǎng)絡(luò)名稱與密碼。當(dāng)ESP8266 連接網(wǎng)絡(luò)成功后,OLED 屏幕顯示“WiFi 連接成功”字樣。若ESP8266 連接網(wǎng)絡(luò)不成功,則繼續(xù)嘗試重新連接。中斷程序初始化部分為各個按鍵觸發(fā)的外部中斷初始化。
初始化程序執(zhí)行完成后,終端通過向ESP8266寫入指令連接到API 接口,從而獲取疫情數(shù)據(jù)包。獲取到的數(shù)據(jù)包為json 數(shù)據(jù)包,通過對數(shù)據(jù)包的解析抽取出需要顯示的數(shù)據(jù)。
顯示部分采用滾動顯示的方式將國內(nèi)及全球疫情數(shù)據(jù)分別顯示。首先將國內(nèi)疫情數(shù)據(jù)進行顯示,包括現(xiàn)存確診患者人數(shù)、累計確診患者人數(shù)、累計治愈患者人數(shù)、現(xiàn)存重癥患者人數(shù)和累計死亡患者人數(shù)。當(dāng)國內(nèi)疫情數(shù)據(jù)顯示結(jié)束后,以同種方式顯示全球疫情數(shù)據(jù)。
利用網(wǎng)線將無線路由器接入網(wǎng)絡(luò),配置無線網(wǎng)絡(luò)名稱與無線網(wǎng)絡(luò)密碼。將疫情監(jiān)控系統(tǒng)終端通電,終端開機執(zhí)行初始化程序,接入到配置好的無線網(wǎng)絡(luò)當(dāng)中,隨即終端開始從網(wǎng)絡(luò)中獲取json 數(shù)據(jù)包,將數(shù)據(jù)包進行解析,如圖9 所示,數(shù)據(jù)解析完成后首先顯示國內(nèi)疫情數(shù)據(jù)。
圖9 國內(nèi)疫情數(shù)據(jù)顯示
如圖10 所示,在國內(nèi)疫情數(shù)據(jù)顯示完后,終端繼續(xù)滾動顯示全球疫情,全球疫情的顯示方式與國內(nèi)疫情顯示方式一致。
圖10 全球疫情數(shù)據(jù)顯示
基于STM32 的新冠疫情監(jiān)控系統(tǒng)終端可以通過無線通信的方式接入互聯(lián)網(wǎng),從而獲取新冠疫情數(shù)據(jù),將數(shù)據(jù)進行解析后在屏幕上顯示,方便了相關(guān)人員對疫情數(shù)據(jù)的實時掌握。但該終端仍存在一定的局限性,如數(shù)據(jù)來源單一,無法對不同平臺提供的疫情數(shù)據(jù)進行整合,后續(xù)可在疫情數(shù)據(jù)融合方面進行深入研究。