余閏,王慧
湖北工業(yè)大學(xué),湖北武漢,430068
我國(guó)老人占全國(guó)人口的比重在不斷加大,截至2018年我國(guó)老年人口高達(dá)2.5億人,其中獨(dú)居老和空巢老人增加到了1.18億人[1]。并且老年人的慢性病患病情況由2015年的44.81%上升到2021年的54.52%[2],空巢老人獨(dú)自服藥的問題變得十分突出。根據(jù)調(diào)查,老年人平均用藥品種有五六種[3],但我國(guó)市場(chǎng)上銷售的智能藥盒產(chǎn)品種類卻十分有限,現(xiàn)有產(chǎn)品普遍都不能滿足消費(fèi)者的需求。國(guó)內(nèi)典型藥盒的功能設(shè)計(jì)分析如表1所示,總體表現(xiàn)為功能十分單一,不具有實(shí)時(shí)監(jiān)測(cè)等聯(lián)網(wǎng)功能[4]。
表1 國(guó)內(nèi)典型藥盒實(shí)例
在國(guó)內(nèi)市面上的常見藥盒都沒有實(shí)時(shí)監(jiān)控以及提醒的功能,成本相對(duì)也較高。如今伴隨著通信技術(shù)的普及和物聯(lián)網(wǎng)的快速發(fā)展,針對(duì)老年人經(jīng)常忘記吃藥的問題,本文設(shè)計(jì)出一種居家智能藥盒解決方案,其可以聯(lián)網(wǎng)使用,通過MQTT協(xié)議將吃藥信息傳輸?shù)椒?wù)器并保存到數(shù)據(jù)庫(kù)中。其支持微信小程序顯示設(shè)備狀態(tài)、查詢數(shù)據(jù)庫(kù)內(nèi)容、刪除已設(shè)鬧鐘、設(shè)定時(shí)間、精準(zhǔn)設(shè)定語(yǔ)音和燈光提醒。其支持OLED面板顯示當(dāng)前城市時(shí)間與天氣、室內(nèi)溫濕度、吃藥記錄以及接收服務(wù)器信息。
整個(gè)系統(tǒng)框圖如圖1所示。該系統(tǒng)包括三個(gè)大的方面:硬件設(shè)備端(如ESP32為主控的設(shè)備端),服務(wù)器后端,軟件應(yīng)用前端。
圖1 總體系統(tǒng)框圖
硬件設(shè)備端通過WiFi與路由器相連接入互聯(lián)網(wǎng)之后,便可基于TCP協(xié)議的應(yīng)用協(xié)議MQTT與云服務(wù)器進(jìn)行通信,主要用于傳輸ESP32采集到的數(shù)據(jù),以及來自應(yīng)用前端的指令。首先,移動(dòng)應(yīng)用端是通過蜂窩網(wǎng)絡(luò)或者路由器連接上互聯(lián)網(wǎng)之后與云服務(wù)器進(jìn)行通信,然后通過服務(wù)器介質(zhì)獲取硬件設(shè)備端的狀態(tài),隨后傳輸指令和訪問服務(wù)器中的數(shù)據(jù)庫(kù)。
本文介紹的硬件方案主要采用的是ESP32芯片作為主控芯片,滿足標(biāo)準(zhǔn)的TCP/UDP Client要求[5],藍(lán)牙與WiFi集成其中,功耗小、成本低。最高主頻可達(dá)到240MHz,內(nèi)置雙核處理器,滿足實(shí)時(shí)處理數(shù)據(jù)信息以及OLED實(shí)時(shí)顯示動(dòng)畫的要求。
硬件整體框架圖如圖2所示,此方案主要由四大部分組成,其中復(fù)制電路中的電源轉(zhuǎn)換電路采用的是典型的Buck電路設(shè)計(jì),LM2596能將8~24V的電壓穩(wěn)定到5V輸出,最大輸出電流能達(dá)到3A,具有完善的保護(hù)電路[6]。由于自身是開關(guān)電源設(shè)計(jì),因此其損耗只有肖特基二極管以及MOS在開關(guān)時(shí)的損耗,損耗小,并且可以達(dá)到額定15W的輸出,滿足系統(tǒng)整體供電需求。在音放電路中,由于老年人的聽力衰減比較嚴(yán)重,因此就需要大的音量來提醒老年人按時(shí)服用藥物。本方案采用的功率放大電路則是采用D類功放芯片LTK5128D來驅(qū)動(dòng)喇叭,此芯片效率高,最高可輸出5W功率,滿足大音量的設(shè)置要求。
圖2 硬件整體框架圖
本方案在硬件端的MCU主程序圖如圖3所示,具體包括兩個(gè)大的狀態(tài),即聯(lián)網(wǎng)狀態(tài)和未聯(lián)網(wǎng)狀態(tài)。
圖3 主程序流程圖
ESP32上電之后會(huì)對(duì)所有傳感器和OLED屏幕進(jìn)行初始化操作。如果設(shè)備當(dāng)前處于未連接上網(wǎng)絡(luò)狀態(tài),首先ESP32會(huì)讀取內(nèi)存中儲(chǔ)存的上一次保存的WiFi名稱以及密碼,并進(jìn)行聯(lián)網(wǎng)操作。若超時(shí)未成功,設(shè)備則會(huì)重新配網(wǎng),然后設(shè)備打開WiFi熱點(diǎn)。當(dāng)手機(jī)連接到當(dāng)前的WiFi熱點(diǎn),ESP32會(huì)將寫進(jìn)程序的網(wǎng)頁(yè)發(fā)送到手機(jī)端,此網(wǎng)頁(yè)包括附近WiFi熱點(diǎn)信息以及提交WiFi密碼和名稱的輸入框。當(dāng)用戶通過手機(jī)輸完目標(biāo)WiFi名稱和密碼時(shí),ESP32會(huì)將得到的數(shù)據(jù)儲(chǔ)存到內(nèi)存中,并進(jìn)行復(fù)位,程序重新運(yùn)行。當(dāng)設(shè)備處于聯(lián)網(wǎng)的狀態(tài)時(shí),ESP32會(huì)通過MQTT協(xié)議與服務(wù)器進(jìn)行通信,訂閱主題、監(jiān)聽端口信息;若服務(wù)器有消息輸入,則處理對(duì)應(yīng)事務(wù),例如時(shí)間、消息留言板信息、數(shù)據(jù)庫(kù)回傳信息事務(wù)等。若藥盒蓋打開則發(fā)送消息到服務(wù)器,服務(wù)器則記錄數(shù)據(jù)到數(shù)據(jù)庫(kù)。由于ESP32本身是雙核處理器,因此可以多開線程。另一個(gè)線程則主要處理OLED顯示屏的動(dòng)態(tài)顯示,以及每隔一段時(shí)間發(fā)送當(dāng)前采集到的溫度與濕度數(shù)據(jù)到服務(wù)器[7]。
1.3.1 服務(wù)器軟件搭建
本文采用搭載了EMQ環(huán)境和MySQL數(shù)據(jù)庫(kù)的服務(wù)器來搭建一個(gè)MQTT服務(wù)端的方案。由于本文主要介紹的方案是輕量級(jí)的,所以數(shù)據(jù)量不會(huì)特別龐大,因此采用了MySQL數(shù)據(jù)庫(kù)來管理吃藥的次數(shù)與時(shí)間等相關(guān)數(shù)據(jù)。在Python腳本程序的控制下,服務(wù)器可以動(dòng)態(tài)化管理數(shù)據(jù)庫(kù)。當(dāng)接收到設(shè)備端或者移動(dòng)端發(fā)來的指令時(shí),對(duì)MySQL數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行增刪查改等操作。
搭載物聯(lián)網(wǎng)環(huán)境與數(shù)據(jù)庫(kù)的服務(wù)器通信模型如圖4所示,其主要是在服務(wù)器內(nèi)部由python程序來進(jìn)行數(shù)據(jù)管理。在服務(wù)器外部,設(shè)備端通過MQTT協(xié)議與1883端口進(jìn)行數(shù)據(jù)通信,管理端則是通過連接服務(wù)器的18083端口來對(duì)后臺(tái)物聯(lián)網(wǎng)平臺(tái)進(jìn)行管理;在服務(wù)器外部另外一側(cè)的微信小程序部分,由于騰訊公司規(guī)定小程序只能用WSS協(xié)議與認(rèn)證的443端口進(jìn)行通信,因此我們還需用Nginx將其數(shù)據(jù)轉(zhuǎn)發(fā)到8084端口,連接上物聯(lián)網(wǎng)環(huán)境平臺(tái)。
圖4 服務(wù)器通信模型
1.3.2 微信小程序
微信小程序的前端設(shè)計(jì)主要采用綠色為主色調(diào)。小程序主要包括兩個(gè)界面,功能如圖5所示。主頁(yè)主要是接收設(shè)備端的濕度溫度數(shù)據(jù)、在線狀態(tài)、所在城市氣溫狀態(tài)的數(shù)據(jù),也可以輸入要發(fā)送至設(shè)備端留言板的內(nèi)容;數(shù)據(jù)庫(kù)查詢頁(yè)主要是對(duì)數(shù)據(jù)庫(kù)里的內(nèi)容進(jìn)行增刪查改操作的界面,不僅能夠直接對(duì)硬件設(shè)備端進(jìn)行控制,也可對(duì)數(shù)據(jù)庫(kù)直接控制。此設(shè)計(jì)具有輕型化、實(shí)用性、實(shí)時(shí)性、系統(tǒng)完整性的特點(diǎn)[8],非常符合輕型化物聯(lián)網(wǎng)開發(fā)方案的要求。
圖5 微信小程序功能圖
整個(gè)系統(tǒng)的成本在于硬件端,其個(gè)體成本不超過40元。租用輕量級(jí)服務(wù)器的價(jià)格在一年70塊,但是隨著設(shè)備的增多,其服務(wù)器成本就微乎其微,因此成本較低。在其他方面,本節(jié)主要對(duì)上述系統(tǒng)進(jìn)行測(cè)試,測(cè)試分別從實(shí)時(shí)可靠性、低功耗、精準(zhǔn)性這三個(gè)方面進(jìn)行。
本項(xiàng)在整個(gè)系統(tǒng)程序的功能不變的情況下,通過設(shè)備端向服務(wù)器方發(fā)送一個(gè)指令并用串口打印發(fā)送完成,觀察服務(wù)器端是否接收到指令,是否存在丟包現(xiàn)象,以及在未丟包的情況下傳輸延遲情況。具體情況如表2所示。
表2 數(shù)據(jù)延時(shí)和丟包部分示例
本次測(cè)量是從2022年4月16日19:36開始的,采樣次數(shù)百次,設(shè)備端與服務(wù)器通信的時(shí)間延時(shí)大約1秒鐘,未出現(xiàn)丟數(shù)據(jù)情況。時(shí)間差是通過記錄設(shè)備端的串口打印時(shí)間與服務(wù)器接收數(shù)據(jù)的時(shí)間的差值得來,由于設(shè)備串口打印時(shí)間也需要耗費(fèi)時(shí)間,因此實(shí)際傳輸延時(shí)時(shí)間少于1秒[9]。本實(shí)驗(yàn)結(jié)果證明該系統(tǒng)傳輸穩(wěn)定可靠,能夠滿足實(shí)時(shí)監(jiān)測(cè)并記錄數(shù)據(jù)的要求。
在常溫條件下,對(duì)處于不同狀態(tài)下的設(shè)備進(jìn)行功耗測(cè)量,具體數(shù)據(jù)見表3。
表3 不同狀態(tài)下設(shè)備功耗
本次分別測(cè)量了硬件設(shè)備處于3種工作狀態(tài)下的功耗。當(dāng)處于未聯(lián)網(wǎng)的狀態(tài)時(shí),由于ESP32處于STA情況下,需要向外發(fā)射WiFi信號(hào),因此功耗會(huì)比聯(lián)網(wǎng)情況下高許多。當(dāng)處于聯(lián)網(wǎng)并且語(yǔ)音播報(bào)工作的情況下時(shí),由于喇叭需要消耗能量,因此會(huì)有5W左右的能量損耗,符合設(shè)計(jì)要求。總的來說,硬件系統(tǒng)的各個(gè)工作狀態(tài)都符合低功耗的要求。
本項(xiàng)是通過移動(dòng)應(yīng)用前端設(shè)置鬧鐘時(shí)間,然后指定時(shí)間到達(dá)后,設(shè)備端串口打印數(shù)據(jù)。根據(jù)串口打印時(shí)間戳與指定時(shí)間的插值來評(píng)判鬧鐘功能是否精準(zhǔn),見表4。
表4 鬧鐘功能測(cè)試表
此表采樣收集數(shù)據(jù)5次,平均誤差2.74s,最大誤差不超過4s。此誤差產(chǎn)生的原因是由于服務(wù)器要一直讀取動(dòng)態(tài)數(shù)據(jù)庫(kù)的數(shù)據(jù),因此不能精準(zhǔn)到只有1秒鐘的誤差。但是此誤差范圍還是符合實(shí)用性標(biāo)準(zhǔn)的,因此具有實(shí)用性。
本方案對(duì)市面上的智能藥盒存在的功能單一、不能實(shí)時(shí)聯(lián)網(wǎng)的問題進(jìn)行了解決,提供了一個(gè)成本低、功耗小、實(shí)用性高、實(shí)時(shí)聯(lián)網(wǎng)的輕量級(jí)解決設(shè)計(jì)。但目前本設(shè)計(jì)只是解決了智能藥盒實(shí)時(shí)監(jiān)控的設(shè)計(jì),相信在不遠(yuǎn)的未來,智能藥盒一定能夠?qū)崿F(xiàn)智能配藥的功能,從此老年人不用再擔(dān)心吃錯(cuò)藥或者要吃多少的問題了。