劉靜琦, 周振虎,時 飛,阮煜婕,劉靜波,袁瑞奇
(南京工程學院信息與通信工程學院,南京 211167)
外賣騎手體溫是否正常是其身體健康指標的重要方面,外賣騎手擔負著配送食物或其他用品的職責,經常需要與不同人員近距離接觸。現在對于外賣騎手或其他人員進行體溫測量一般采用以下方法:有專門的人員進行手工測量,采用接觸式或非觸式測量工具進行測量;在固定場所安裝熱成像非接觸式體溫測量裝置。這些方法必須需要外賣騎手等被測人員到固定場所才能對其體溫進行監測,占用人力物力較多,效率較低,并且由于外賣騎手的流動性與特殊性不便于多次定時監測。按照要求,外賣騎手需佩戴安全頭盔,保證交通安全,現有智能頭盔,大多用于對佩戴人員進行定位、語音提示、環境參數測量、腦電波心率測量等,或者有一種外賣配送智能安全頭盔實時督促配送員遵守交規,自動撥打外賣客戶電話,讓客戶掌握訂單配送狀態等應用功能。這類智能頭盔具備的常規功能,多以定位、語音、拍攝或以測量環境參數為應用功能,測量腦電波、心電信號來監測佩戴者的生理參數,其內置的傳感器并不具備直接測量騎手體溫的功能,不能防范外賣騎手體溫異常造成的風險。本系統設計一種實時監測外賣騎手體溫的智能頭盔,可以定時監測騎手的體溫數據,同時把騎手身份信息、位置狀態數據等一起封裝后,通過WIFI 傳輸至云平臺,從而實現定時監測騎手體溫和位置狀態的應用功能,后臺人員通過網頁端查看數據信息。不依賴于人工測量騎手體溫,也不需要騎手到指定的地方測量體溫,智能頭盔可以準確、方便、定時監測騎手體溫,并發送數據到平臺,為多次定時測量提供可行性。
系統有頭盔部分和物聯網云平臺部分兩部分組成。頭盔部分采用主控芯片讀取非接觸式高精度紅外測溫傳感器測量的體溫數據,采集GPS 模塊的經緯度數據信息,WIFI 模塊通過連接到騎手手機熱點接入網絡,進行數據傳輸。時鐘芯片和EEPROM 存儲芯片連接于一組IIC總線上,時鐘芯片提供系統運行時間信息,也作為定時檢測體溫的時間信號,EEPROM 存儲芯片保存騎手身份信息和其他配置數據信息,光電檢測部分檢測頭盔是否正常佩戴。系統組成如圖1所示。

圖1 系統組成
非接觸紅外測溫傳感器MLX90614 體積小,非常適合安裝于頭盔正對騎手額頭的部位。通過定時測量體溫數據并發送到云平臺,實現自動檢測的功能。物聯網云平臺采用中國移動的OneNET 平臺,該平臺為用戶提供簡單高效實用的物聯網平臺,和可編輯的網頁可視化界面,在網頁端接收數據或者下發控制指令。按照云平臺協議和數據類型封裝數據包,發送數據包括騎手身份數據、體溫數據、位置信息數據等,達到定時多次監測騎手體溫的目的,提高效率。
OneNET 是中國移動推出的物聯網開放平臺,該平臺屏蔽了復雜的技術細節,提供多種協議類型,支持多種智能硬件的接入和大數據服務,開發文檔和技術支持完善。支持多種網絡協議接入,如MQTT、EDP、HTTP 等,可輕松實現設備的接入與管理。用戶按照OneNET云平臺的規范接入平臺,上傳數據,實現數據傳輸與存儲管理功能。用戶在官網注冊賬號,就可以進入云平臺創建項目。通過創建選定協議下的產品,系統給出當前產品的產品ID,添加設備,分析和創建項目數據流,添加APIKEY,從而創建用戶自己的應用項目。數據上傳完成后,用戶可以在網頁查看數據和對應的變化曲線,也可以下發控制指令,控制智能設備的運行。OneNET 系統可以在同一產品下添加多個設備,例如“智能頭盔”產品,添加1號頭盔、2 號頭盔……,OneNET 系統分配不同的設備ID和鑒權信息,允許多設備運行。
針對頭盔的結構,硬件設計采取模塊化結構設計方法。智能頭盔系統硬件分為主控芯片、非接觸式紅外測溫傳感器、WIFI 模塊、GPS 模塊、時鐘芯片、存儲芯片AT24C02 和光電檢測這幾個部分組成。圖2表示了各單元與主控單元的連接,根據不同模塊的應用特點,合理分配主控單元的外設資源,實現對智能頭盔最優的硬件資源配置。

圖2 智能頭盔接口電路
智能頭盔主控芯片采用STM32F103RCT6,這是基于Cortex-M3架構的高性能處理器,主頻達72 MHz,具備48 kB SRAM、256 kB FLASH,其他資源包括定時器、串口、ADC、SPI、DMA 控制器、外中斷等,滿足智能頭盔的應用需求及后續的拓展應用。在系統中,WIFI 模塊和GPS模塊分別連接于主控芯片串口3 和串口2,串口編程收發數據在本系統中是重要的環節,實際編程應用中,采用主控芯片的DMA 功能與串口中斷接收,使得串口收發數據的效率得到充分提高。
MELEXIS 公司生產的MLX90614 溫度傳感器是一種使用方便的紅外測溫器件, 直接輸出完全線性化的并已對環境溫度進行補償的數字溫度,可實現高精度和高分辨率的溫度采集,該器件具有2 種溫度輸出方式:數字PWM 輸出及SMBus 接口輸出,具有體積小、精度高、測溫范圍廣、使用方便的特點。在溫度范圍為32~42 ℃時,測量的絕對精度為±0.2 ℃,因此非常適用于對人體溫度進行測量。本系統主控芯片PB6和PB7作為SMBus接口,連接于MLX90614。
ESP8266 是一款高集成度的WIFI 模塊,其本身是一個32 位的MCU 單元可以獨立訪問網絡,也可以搭配其他主控芯片,幫助其他主控芯片接入互聯網。ESP8266 提供一對串口與主控芯片進行數據交換,與主控芯片通過串口3連接。ESP8266 允許配置為熱點(AP)、客戶端(STA),熱點+客戶端(AP+STA)三種模式,本系統把ESP8266 配置為STA 模式,通過手機熱點接入網絡,實現遠程控制與數據傳輸。
GPS 模塊采用VK2828U7G5LF 模塊,帶有高精度TCXO,內置FLASH,可自由配置多項參數,包括波特率和數據刷新率(1~10 Hz)。輸出語句NMEA0183V3.0 協議數據,可任意設置其中協議數據輸出.模塊與主控芯片之間通過串口2連接,本系統應用中,配置GPS模塊串口波特率為38400 bps,5 Hz數據更新速率。
時鐘芯片選用DS3231 芯片,這是一款內置溫補晶振的時鐘芯片,3.3 V 供電電壓,精度可達 正 負2 ppm(0°~40°),標 準IIC 接 口 與STM32 主控芯片進行數據讀寫,DS3231 的器件地址分別是0XD0(寫)0XD1(讀),該芯片具有1Hz信號輸出引腳INT/SQW,可作為中斷信號輸出,INT 引腳是開漏輸出模式,該管腳外接10k上拉電阻連接到3.3 V。在初始化DS3231時,配置控制寄存器OEH 為OOH,則OEH 其中的BIT4 和BIT3(RS2 和RS1)以及BIT2(INTCN)為0,則3 腳INT/SQW 輸出1Hz 方波,該信號連接STM32端口PC6,可作為外中斷信號,在外中斷服務程序中處理對應的程序,提高了主程序運行的效率。
本系統PB11 和PB10 配置為IIC 總線,其中PB11 為SDA 數據線,PB10 為SCL 時鐘線,其中接入10 k 上拉電阻,保證確定的電平信號。在IIC 總線上除了接有時鐘芯片DS3231,還包括EEPROM 存儲芯片AT24C02,主控芯片通過不同的器件地址訪問總線上的器件,讀取數據。EEPROM 存儲芯片AT24C02 用作存放系統配置的參數。
采用GL5516 光敏電阻與10 k 電阻分壓,接入主控芯片的PA1,程序中配置PA1 模數轉換讀取分壓的電壓數值。光敏電阻安裝于頭盔內側,正常佩戴頭盔和未佩戴頭盔兩種情形下,光敏電阻呈現出不同的電阻阻值,從而換算為不同的分壓數值,系統根據讀取的數據,如未正常佩戴頭盔,則系統通過PC0 端口驅動蜂鳴器,發出提示,確認使用者正常佩戴頭盔。
智能頭盔與OneNET 之間以MQTT 協議方式傳輸數據,該協議支持數據雙向傳輸、實時性高,也具有長時間穩定連接的優點。設備登錄OneNET 平臺后,選擇在此協議下創建“智能頭盔”產品,添加設備后,在程序中封裝數據,包括需要上傳云平臺的數據,和接收云平臺發送的指令數據,把這些數據統稱為數據流。OneNET 對數據流的封裝提供了多種數據類型封裝形式,本系統采用數據類型3(TYPE=3,JSON 格式2字符串)模式。本系統數據流根據數據傳輸方向分為兩類:①上行數據流,包括智能頭盔定時測量的體溫數據、GPS 定位模塊獲取的經緯度位置信息、騎手身份信息、發送時間等。這些數據流封裝為完整的數據包,通過ESP8266 發送至OneNET 云平臺。②下行數據流,是網頁端發出的控制指令,通過OneNET云平臺發送給智能頭盔,發布的控制指令主要是修改測量體溫的定時時間數據,智能頭盔接收到該控制指令后,可以更改定時發送的時間。
程序首先對智能頭盔系統各模塊進行初始化,包括串口2 和串口3 初始化,紅外測溫傳感器SMBus接口初始化、IIC總線端口初始化、IIC總線接入的DS3231 芯片配置初始化、ADC 轉換初始化等。然后,經串口3 發送AT 指令給ESP8266模塊,設置ESP8266為STA 模式,連接WIFI 后,等待連接OneNET 云平臺的回應信號,確認連接OneNET 服務器。在初始化連接OneNET 的過程中,程序可以設定與OneNET 服務器的KeepAlive 保活時間,每個客戶端可自定義設置連接保持時間,最短120 s,最長65535 s,用戶可以在此范圍自己設定上傳數據的時間間隔。連接OneNET后,程序中按照設定的發送時間間隔T,把測量的體溫數據和經緯度位置數據信息傳輸至云平臺。主流程如圖3所示。

圖3 系統主流程
其中接收GPS數據是根據串口2中斷給出中斷標志位后,對接收的GPS 位置信息分析后存入相應的變量,最后與體溫數據、身份信息等封裝打包為上行數據流,發送數據至OneNET云平臺。為適用于不同的情況,定時發送體溫的時間間隔是可以改變的,定時時間的設定由OneNET 網頁端下達控制指令,主流程中,智能頭盔的ESP8266連接于串口3,利用串口中斷處理接收指令,解析數據后,設定時間間隔T,同時存入EEPROM芯片中。
SMBus 接口為兩線協議,允許主控器件(MD)和一個或一個以上的從器件(SD)通信。系統在給定的時刻只有一個主控器件。本系統中主控器件是STM32F103RCT6,MLX90614只作為從器件使用。主控器件是通過從地址(SA)選擇從器件MLX90614 并開始數據傳輸,本系統中采用一個MLX90614作為體溫測量傳感器,其地址為0x00。SMBus 有標準的協議,主控芯片發送和接收數據都是以字節為單位進行。主控芯片每發送一個字節,會檢查從機是否有應答;當主控芯片接收數據時,如當前接收的非最后一個字節,主控芯片會給對方發送應答信號(ACK),如接收的是最后一個字節,主控芯片會給對方發送非應答信號(NACK)。
圖4是MLX90614測量體溫流程。

圖4 MLX90614測量體溫流程
MLX90614 測溫程序中,設定一個計數值,該計數值遞減計數,如果計數到0,則表示測量不成功,退出本次測量。對于測量不成功包含兩個方面:①主控器件在每次發送數據后,檢查MLX90614 的應答情況,如從機應答不成功,則重新開始循環,直到計數值為0,則退出本次測量。②從機應答正常,但最后主機讀取的校驗字節與校驗計算和不一致,循環測量后,判斷計數值為0,則退出本次測量。一個完整的體溫測量,實際上包括MLX90614正常應答和校驗正確,只有滿足這兩個方面,就得到本次測量的體溫數據。MLX90614 測量流程如圖4 所示。讀出的體溫數據字節是高字節和低字節數據,按照按照式(1)組合為16 進制數據,式(2)得到體溫。

DS3231 有INT 輸出引腳,接入STM32F103 RCT6 的PC6 端口,這是一個每秒的輸出中斷信號,在智能頭盔系統中可以配置PC6 端口的外中斷,在外中斷服務子程序,每次中斷執行一次讀取時間和日期數據。同時,讀取模數轉換的數據也在外中斷中執行,用于檢測是否佩戴頭盔,檢測數值低于設定數值后,驅動蜂鳴器每秒發出提示。外中斷程序的利用,減少系統主程序的占用,提高程序的執行效率。外中斷程序如下所示。
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line6)!=RESET)//外中斷PC6入口
{
ds3231_get_time(); //獲取時間日期
ds3231_get_date();
//光線傳感檢測佩戴頭盔
if(Adc_Average(5)<1500)//取AD 轉換值,小于數值1500未佩戴
FMQ=!FMQ;//驅動蜂鳴器
else FMQ=1;//蜂鳴器停止
}
EXTI_ClearITPendingBit(EXTI_Line6);//清除PC6中斷標志
}
體溫監測智能頭盔系統軟硬件搭建完成,進行實際測試。加電后,等待系統連接OneNET,在網頁端可看到設備狀態,系統連接到OneNET后,設備顯示為在線狀態。在網頁端刷新數據流,實時接收到測量的體溫數據和當前的經緯度、發送時間等信息。也可以利用OneNET 提供的可視化用戶界面編輯設計功能,組合編輯文本框、旋鈕等控件,在其應用界面上展示數據結果,圖5是實際測量數據展示,其中包含體溫、經緯度、時間等,可視化界面中添加的旋鈕控件,用于網頁端下發指令,控制數據上傳的時間間隔。實際測試表明,系統運行穩定,數據接收和下發指令功能正常,可視化界面簡潔,有較好的應用效果。

圖5 實際測試可視化用戶界面顯示
本系統采用非接觸式紅外測溫傳感器定時測量外賣騎手體溫,按照預設的定時時間測量數據。采用模塊化結構,對系統進行實際測試,結合OneNET物聯網云平臺方便簡潔的可視化應用界面設計,實現了定時測量體溫并遠程上傳體溫數據、經緯度信息等功能。STM32 豐富的資源,為系統優化提供了基礎,后續可進一步對系統進行優化,對系統進行集成化設計,使系統小型化集成化,優化電源管理,加入低功耗設計,則更具實用性。加入碰撞跌倒檢測與報警,或者網頁端可以下發指令,加入呼叫功能等,都是可以進一步優化的環節。