洪俊權(quán),紀(jì)松波,白鵬,霍斌
內(nèi)蒙古工業(yè)大學(xué) 信息工程學(xué)院,內(nèi)蒙古 呼和浩特 010080
隨著人們經(jīng)濟水平的提高,我國養(yǎng)寵家庭的數(shù)量越來越多。寵物丟失被盜的現(xiàn)象也越來越嚴(yán)重,流浪寵物不僅會對環(huán)境造成污染,而且其自身容易攜帶病毒,對人類的生命健康有很大安全隱患,甚至有不法分子偷盜寵物并宰殺用以售賣,或利用寵物之間的交配獲取幼崽來欺騙消費者,嚴(yán)重擾亂市場秩序和社會風(fēng)氣[1]。因此防止寵物丟失是一個亟待解決的問題。
早在15世紀(jì),人們開始探索海洋的時候,定位技術(shù)就已經(jīng)出現(xiàn)。隨著社會和科技的不斷發(fā)展,對導(dǎo)航定位的需求已經(jīng)不再局限于傳統(tǒng)的海洋、航空、航天、軍事等領(lǐng)域。民用市場對定位技術(shù)的需求也越來越大。而如今,隨著GPS、北斗、伽利略、格洛納斯等全球定位導(dǎo)航系統(tǒng)的發(fā)展,人們的導(dǎo)航定位技術(shù)也越來越先進[2]。
文獻(xiàn)[3]以STM32F407ZGT6為CPU對GNSS(Global Navigation Satellite System)板卡輸出信息進行解包;采用卡爾曼濾波與加權(quán)融合技術(shù)獲取姿態(tài)信息,以坐標(biāo)轉(zhuǎn)換理論計算導(dǎo)航投影點,采用CAN總線輸出姿態(tài)和導(dǎo)航投影點定位信息。文獻(xiàn)[4]利用超寬帶和慣性測量單元組合定位的算法,通過EKF數(shù)據(jù)融合實現(xiàn)室內(nèi)精準(zhǔn)定位。文獻(xiàn)[5]使用Wi-Fi輔助的GNSS定位算法以及Wi-Fi與蜂窩網(wǎng)融合的定位算法,根據(jù)接收到的衛(wèi)星、無線接入點和蜂窩基站個數(shù)的不同,將定位場景分成不同的區(qū)域,包括室外、室內(nèi)外交界區(qū)和室內(nèi)區(qū)域。在室外區(qū)域中,采用GNSS三邊定位法進行定位。文獻(xiàn)[6]通過將北斗導(dǎo)航檢測終端安裝在架空輸電線路實現(xiàn)定位檢測。
針對家庭寵物丟失問題,本文提出一種基于STM32的寵物實時定位器,該設(shè)備將定位、物聯(lián)網(wǎng)通信技術(shù)融為一體,配合微信小程序??梢宰寣櫸镏魅说谝粫r間了解寵物的實時位置,有效降低寵物丟失的概率。
系統(tǒng)由主控模塊、電源模塊、LED燈、定位通信模塊、阿里云物聯(lián)網(wǎng)平臺、微信小程序等構(gòu)成。主控模塊選用STM32F103C8T6芯片,負(fù)責(zé)地理數(shù)據(jù)的解析與整個系統(tǒng)的控制,電源模塊為鋰電池給系統(tǒng)提供5V的工作電壓,LED通過不同燈色的變換顯示當(dāng)前系統(tǒng)工作狀態(tài),定位通信模塊選用BC20模塊(內(nèi)置GNSS,支持北斗和GPS雙模定位與NB-IOT(Narrow Band Internet of Things),其GNSS部分負(fù)責(zé)獲取地理位置信息,NB-IOT部分則負(fù)責(zé)整個系統(tǒng)的物聯(lián)網(wǎng)通信。阿里云物聯(lián)網(wǎng)服務(wù)器作為數(shù)據(jù)中轉(zhuǎn)的平臺負(fù)責(zé)數(shù)據(jù)的保存與轉(zhuǎn)發(fā),微信小程序則實現(xiàn)地理位置信息的顯示與用戶導(dǎo)航規(guī)劃。系統(tǒng)整體結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)整體結(jié)構(gòu)圖
STM32C8T6是一款32位基于ARM核心的帶64K字節(jié)閃存的微控制器,需要電壓2.0V~3.6V,工作溫度為-40℃~85℃。STM32處理器具有睡眠模式、停機模式、待機模式三種。低功耗模式單片機在低功耗狀態(tài)下喚醒時間可以達(dá)到微秒級。本設(shè)計中采用AT指令對BC20模塊進行控制定位時,主要用到主控制芯片中的USART串口通信,該主控制芯片USART串口多達(dá)3個,完全滿足本設(shè)計的需求。
BC20支持GNSS,內(nèi)置定位體積小,而且支持GPS和北斗雙模定位,通過測量出已知位置的衛(wèi)星到用戶接收機之間的距離,綜合多顆衛(wèi)星的數(shù)據(jù)就可以知道接收機的具體位置[7]。由于BC20已內(nèi)置此功能,只需通過指令配置即可使用此功能。模塊部分AT指令對應(yīng)功能見表1。
表1 BC20模塊部分AT指令對應(yīng)功能
BC20模塊與STM32通過串口進行通信,由于二者接口協(xié)議相同,所以將STM32的PA10引腳與BC20的RXD(receive data)相連,PA9與TXD(transmit data)相連,并由STM32對其供電(圖2)。
圖2 BC20與STM32連接圖
軟件設(shè)計工具我們選用MDK5,采用C語言進行編程。通過STM32將BC20模塊獲取的原始地理位置信息解析,再將解析后的數(shù)據(jù)通過BC20的NB-IOT功能發(fā)送至阿里云物聯(lián)網(wǎng)平臺,程序執(zhí)行流程圖如圖3所示。
圖3 程序流程圖
在阿里云物聯(lián)網(wǎng)平臺創(chuàng)建好相應(yīng)的產(chǎn)品后,會獲得ProductKey、DeviceName、DeviceSecret這三個阿里云自動生成的設(shè)備證書,這是BC20設(shè)備登錄到物聯(lián)網(wǎng)云平臺的唯一密鑰,同時也是微信小程序連接該平臺的唯一密鑰。在正式接入阿里云之前,需要利用USB轉(zhuǎn)TTL串口對BC20模塊進行調(diào)試,查詢其IP以及主網(wǎng)、MQTT(Message Queuing Telemetry Transport)連接是否正常。
當(dāng)設(shè)備正常開機時,設(shè)備唯一的LED燈會常亮,再利用串口助手發(fā)送AT指令進行相應(yīng)測試。“AT+QMTOPEN=0,'139.196.135.135',1883”,這個是登陸阿里云的地址,MQTT的端口號為1883。當(dāng)返回“+QMTOPEN:0,0”,則表示連接成功。
在阿里云物聯(lián)網(wǎng)平臺創(chuàng)建的物模型中除了生成ProductKey、DeviceName、DeviceSecret這三個設(shè)備證書,還有一系列物模型通信Topic等。實現(xiàn)數(shù)據(jù)的正常上傳需要用到阿里云生成的物模型通信表里的屬性上報中的發(fā)布與屬性設(shè)置中的訂閱兩個主題。
由于發(fā)布的數(shù)據(jù)是A-LINK的格式。必須用A-LINK的協(xié)議來規(guī)范所上傳的數(shù)據(jù)。當(dāng)阿里云成功訂閱到BC20發(fā)布的數(shù)據(jù),其物聯(lián)網(wǎng)平臺就會成功顯示相應(yīng)屬性數(shù)據(jù)。
終端設(shè)備使用微信小程序來實現(xiàn)地理位置數(shù)據(jù)的讀??;在微信小程序進行網(wǎng)絡(luò)通信,只能和指定的域名進行通信。使用微信小程序官方API(通過云函數(shù)免服務(wù)器發(fā)起云調(diào)用)構(gòu)建普通HTTPS請求wx.request(發(fā)起HTTPS網(wǎng)絡(luò)請求)[8]進行通信,配置request合法域名為https://iot.cn-shanghai.aliyuncs.com,使用wx.request請求時需要加入阿里云服務(wù)器的公共請求參數(shù)連接至云端API[9],封裝小程序request;利用封裝好的SDK發(fā)送專用API(調(diào)用設(shè)備服務(wù)以及查詢設(shè)備屬性快照)所需的專用請求參數(shù),獲取設(shè)備的屬性值。
獲取設(shè)備上傳的地理位置信息后,調(diào)用wx.openLocation(微信內(nèi)置地圖)后使用wx.getLocation(獲取當(dāng)前的地理位置、速度)[10]創(chuàng)建map.js SDK進行經(jīng)緯度識別標(biāo)注。
通過封裝好HTTPS請求wx.request以及所需參數(shù)請求的微信小程序SDK向云平臺發(fā)送公共參數(shù)請求連接,之后發(fā)送專用參數(shù)獲取設(shè)備位置信息,將數(shù)據(jù)發(fā)送至map.js后調(diào)用wx.openLocation顯示設(shè)備位置信息;調(diào)用wx.getLocation獲取用戶所在經(jīng)緯度信息,將所得數(shù)據(jù)傳遞,使用wx.openLocation查看用戶當(dāng)前位置,通過地圖位置對比可知用戶以及目標(biāo)設(shè)備的相對位置信息。小程序的設(shè)計流程圖如圖4所示。
圖4 小程序設(shè)計流程圖
圖6 微信小程序界面
首先,在阿里云物聯(lián)網(wǎng)平臺建立好相應(yīng)的產(chǎn)品后,根據(jù)生成的信息,利用USB轉(zhuǎn)TTL串口進行上電測試并發(fā)起平臺登錄連接,當(dāng)連接成功后燒錄代碼至STM32單片機,由于用杜邦線連接STM32與BC20模塊會由接觸不良現(xiàn)象,所以將二者對應(yīng)的引腳焊接在一塊。BC20模塊在室內(nèi)無法進行定位,在室外測試時,打開阿里云物聯(lián)網(wǎng)平臺查看模塊所上傳的數(shù)據(jù),實測數(shù)據(jù)能正常接受,延時在500ms左右。在實際位置與阿里云物聯(lián)網(wǎng)平臺所接受的經(jīng)緯度位置信息進行比較,實際偏差在5m左右。
圖5 阿里云平臺獲取的數(shù)據(jù)
在微信小程序端,小程序能與物聯(lián)網(wǎng)平臺正常連接,并接受其經(jīng)緯度信息??梢杂梦⑿艃?nèi)置地圖將經(jīng)緯度地理位置信息可視化顯示在地圖上。經(jīng)過測試,在寵物定位器長時間移動的情況下,小程序上的地理坐標(biāo)也隨之移動,延時在2s左右。
綜上所述,隨著家庭養(yǎng)寵數(shù)量越來越多,寵物丟失被盜現(xiàn)象也越來越嚴(yán)重。由此可見,一款寵物定位器的出現(xiàn)就能有效減少寵物丟失被盜的可能。本文提出的設(shè)計在經(jīng)過實驗測試,地理位置數(shù)據(jù)能正常上傳至阿里云物聯(lián)網(wǎng)平臺,同時微信小程序能從阿里云正常獲取,并實時顯示寵物的位置,時延和精度都在主流范圍之內(nèi)。在較低的成本下,能有效防止家庭寵物丟失。