Python + ESP32 制作车辆定位系统,终于可以随时随地知道爱车的位置了
?來這里發現更多有趣案例
?HaaS開發框架HaaS積木方案,賦能生態開發者,讓您快速找到自己需要的解決方案,硬件主板與外設,以及各種應用組件。https://haas.iot.aliyun.com/solution/
下圖是本案例除硬件連線外的3步導學,每個步驟中實現的功能請參考圖中的說明。在硬件連線完成之后我們建議您先使用“一分鐘上云體驗”功能預先體驗本案例的實際運行效果。
1、簡介
?? 近年來,全球掀起了一股自動駕駛熱潮,無論是傳統車企,還是科技企業,甚至很多初創公司都競相加入這一行業賽道。進入2021年,自動駕駛熱度不減,且“吸金”不斷,據不完全統計,從今年年初至今,自動駕駛行業投融資事件超過50起,投融資金額近1000億元,已超過2018年,達到歷年最高值。
1.1、背景知識
1.1.1、衛星定位系統
?? 定位系統是以確定空間位置為目標而構成的相互關聯的一個集合體或裝置(部件)。這個系統可以保證在任意時刻,地球上任意一點都可以同時觀測到至少4顆衛星,以保證衛星可以采集到該觀測點的經緯度和高度,以便實現導航、定位、授時等功能。這項技術可以用來引導飛機、船舶、車輛以及個人,安全、準確地沿著選定的路線,準時到達目的地。
??目前主流定位系有除美國的GPS,中國的北斗衛星導航系統、歐盟的伽利略衛星導航系統、俄羅斯全球導航衛星系統等。
GPS
?? GPS是美國第二代衛星導航系統。按目前的方案,GPS的空間部分使用24顆高度約2.02萬千米的衛星組成衛星星座。24顆衛星均為近圓形軌道,運行周期約為11小時58分,分布在6個軌道面上(每軌道面4顆),軌道傾角為55度。衛星的分布使得在全球任何地方、任何時間都可觀測到4顆以上的衛星,并能保持良好定位解算精度的幾何圖形。這就提供了在時間上連續的全球導航能力。
?? 想了解GPS詳細信息請參考文章。
1.1.2、基站定位
?? 除了像GPS這種衛星定位之外,我們身邊的設備如:智能手機、智能手表、穿戴設備等能聯網的設備都可以用來定位,通過連接運營商(電信、聯通、移動)基站來定位的方式稱之為基站定位,或者又稱之為移動位置服務(LBS--Location Based Service)。
1.2、準備
?? 需要準備如下硬件:
-
- ESP32開發板(ESP32樂鑫開發板、NodeMCU-32S或pyWiFi-ESP32)一臺
- GNSS定位模塊-HT2828Z3G5L 一個
- 杜邦線若干
ESP32各開發板和HT2828Z3G5L硬件接線請參考下表。
| 硬件 | HT2828Z3G5L | 樂鑫 ESP32開發板 | 安信可 NODEMCU-32S開發板 | 01Studio pyWiFi-ESP32開發板 |
| 端口標識 | GND | GND | GND | GND |
| VCC | 3V3 | 3V3 | 3V3 | |
| TX | 16 | P16 | 16 | |
| RX | 17 | P17 | 17 | |
| 硬件說明 | 硬件積木說明 | 快速開始 詳細端口定義 | 快速開始 詳細端口定義 | 快速開始 詳細端口定義 |
? ?下圖是以NODEMCU-32S開發板為例的接線圖。
2、物聯網平臺開發
2.1、開通公共實例
?? 對于第一次使用物聯網平臺的讀者,需要開通實例以使用物聯網平臺的功能。這里可以使用免費的公共實例進行開發。
?? 在物聯網平臺中,左上角選擇“華東2-上海”,點擊“公共實例”,即可開通。
?? 開通物聯網平臺功能之后,需要下面的3個步驟完成云端設備的設定:
2.2、創建產品(設備模型)
?? 進入公共實例控制臺,點擊“創建產品”按鈕,即可進入新建產品頁面。
?? 進入新建產品頁面,設定“產品名稱”,這里我們命名為“車輛定位器”,讀者也可以根據自己的喜好來命名。
?? 在“所屬品類”中,選擇“標準品類”。“標準品類”收錄了一些常用的設備模型,其會為我們定義好后續的產品功能(物模型)。我們也可以選擇“自定義品類”,來自己定義物模型。在右側欄中搜索并選擇“定位器”。
?? 產品的節點類型選擇“直連設備”,數據格式選擇“ICA標準數據格式”,檢驗類型和認證方式選擇默認設定即可。開發者可根據自己的需求在“產品描述”頁面添加針對此產品的描述。
?? 對于 ESP32 等搭載 Wi-Fi 的設備而言,聯網方式可以選擇“Wi-Fi”。
?? 選擇之后,點擊“確認”按鈕,即可完成產品創建。返回“產品”頁面之后可以看到產品類表中會出現剛剛創建的“車輛定位器”的產品,如下圖所示。
2.3、定義產品功能(物模型)
?? 點擊上圖中的“查看”按鈕,即可看到產品信息,Topic列表,功能定義,數據解析等跟產品相關功能的設定。點開“功能定義”標簽頁,可以看到設備物模型定義。
?? 因為在創建產品的過程中選擇了標準的產品品類,這里會出現標準品類中自帶的物模型設定,即“地理位置”。點擊“查看”,我們可以看到該屬性的詳情。可以看到,該屬性的數據類型是一個結構體(struct),其成員描述了設備的精度(浮點)、維度(浮點)、海拔(浮點)、坐標系統(枚舉量,1:WGS_84/2:GCJ_02)
?? 定義好物模型后,記得點擊“發布”以使變更生效。
?? 產品及其物模型創建完成后就可以創建這個產品的設備了。
2.4、創建設備及獲取三元組
?? 點擊左側欄中“產品“,回到產品列表。在產品列表頁面中,點擊“管理設備”,就會進到設備管理頁面。
?? 在“設備”頁面點擊“批量添加”按鈕,如下圖所示。填入需要生成的設備數量。例如圖中物聯網平臺會為我們生成3臺設備,以及隨機的deviceName。
?? 批量生成的設備如下:
?? 設備添加完成后,點擊“前往查看”按鈕,就可以看到此設備的詳細信息了。
2.4.1、下面獲取設備三元組
?? 如下圖所示,點擊“查看”按鈕,就可以看到設備的三元組信息,三元組是物聯網設備端和物聯網云端設備相關聯的唯一標識符,在設備端連接云端的時候會使用三元組信息和云端進行鑒權,鑒權通過之后云端會認為設備已激活并上線。
3、設備端開發
3.1、開發環境
?? 在進行下一步之前請確保ESP32開發環境已經搭建完畢。詳情請參考“ESP32快速開始”的說明。
3.2、創建解決方案
?? 如下圖所示,打開HaaS Studio后,新建一個基于 helloworld 的 Python輕應用。 ? ?
? ?
?? 設定好工程名稱及工作區路徑之后,硬件類型選擇ESP32,點擊立即創建,創建一個Python輕應用的解決方案。
?? 下載定位腳本壓縮包后解壓,復制全部文件后,覆蓋剛剛創建的gnss工程目錄下。main.py代碼區如下圖所示:
? ?
Python腳本的詳細說明請參考腳本內嵌的文字版注釋
?? 之后,在代碼中填入對應的信息
?? 在main.py中,填寫可用的Wi-Fi名稱及密碼。
# wifi連接的的ssid和pwd定義 wifiSsid = "請填寫您的路由器名稱" wifiPassword = "請填寫您的路由器密碼"?? 在main.py中,填寫創建的設備三元組信息。關于設備三元組的獲取,請參考上面“獲取設備三元組”中的步驟。
# 三元組信息 productKey = "產品key" deviceName = "設備名稱" deviceSecret = "設備密鑰"4、運行結果
4.1、本地查看
?? 推送此腳本到ESP32之后,串口會輸出獲取到的定位信息,同時按照腳本中的邏輯,當定位信息發生變化時,會將更新的定位信息上報至物聯網平臺。如下面這段串口日志所示。
... ************* python task init******* mount fs >>> execfile("/data/pyamp/main.py") wifi_connected: False wifi_connected: False wifi_connected: False wifi_connected: False wifi_connected: False wifi_connected: False wifi_connected: False wifi_connected: False wifi_connected: False wifi_connected: False wifi_connected: False wifi_connected: False ('192.168.0.105', '255.255.255.0', '192.168.0.1', '192.168.0.1') sleep for 1 s establish tcp connection with server(host='a1zxKgAV78Z.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443]) tcp_connect: can only connect from state CLOSED success to establish tcp, fd=54 物聯網平臺連接成功 sleep for 2s [0.0, 'W'] [0.0, 'N'] 0.0 bytearray(b'$GNGGA,,,,,,0,00,25.5,,,,,,*64\r\n$GNGLL,,,,,,V,M*79\r\n$GNGSA,A,1,,,,,,,,,,,,,25.5,25.5,25.5,1*01\r\n$GNG') [0.0, 'W'] [0.0, 'N'] 0.0 [0.0, 'W'] [0.0, 'N'] 0.0 bytearray(b'SA,A,1,,,,,,,,,,,,,25.5,25.5,25.5,4*04\r\n$GPGSV,1,1,00,0*65\r\n$BDGSV,1,1,00,0*74\r\n$GNRMC,,V,,,,,,,,,,M') [0.0, 'W'] [0.0, 'N'] 0.0 [0.0, 'W'] [0.0, 'N'] 0.0 bytearray(b',V*34\r\n$GNVTG,,,,,,,,,M*2D\r\n$GNZDA,,,,,,*56\r\n$GPTXT,01,01,01,ANTENNA OPEN*25\r\n\r\n$GNRMC,,V,,,,,,,,,,M') [0.0, 'W'] [0.0, 'N'] 0.0 [0.0, 'W'] [0.0, 'N'] 0.0 bytearray(b',V*34\r\n$GNVTG,,,,,,,,,M*2D\r\n$GNZDA,,,,,,*56\r\n$GPTXT,01,01,01,ANTENNA OPEN*25\r\n$GNGGA,,,,,,0,00,25.5,') [0.0, 'W'] [0.0, 'N'] 0.0 [0.0, 'W'] [0.0, 'N'] 0.0 ...?? 出現此段日志時,說明定位信息上報成功,讀者此時可以前往物聯網平臺查看設備的實時定位數據。
4.2、在物聯網平臺上查看設備數據
?? 當設備啟動成功并第一次連接到物聯網平臺之后,物聯網平臺上對應的設備狀態會從”未激活狀態“變為”上線“。點擊“物模型數據”標簽頁,能夠看到設備上報到物聯網平臺的屬性值。
?? 點擊卡片上的“查看數據”,可以看到完整的歷史數據。
?? 此時,如果設備上報新的地理位置信息,則物聯網平臺上能夠實時顯示。至此,定位數據上云完成。
5、物聯網應用開發(定位數據可視化)
?? 在前面的章節中,我們已經成功將地位信息實時上傳到了云端。本節中,我們將介紹如何快速實現將設備的位置實時顯示在地圖中。
?? IoT Studio 提供了應用快速開發的能力,可以很方便地與物聯網平臺進行聯動。本節的開發工作也將圍繞 IoT Studio展開。
5.1、新建“普通項目”
?? 打開IoT Studio官網,在項目管理中新建一個空白項目,如下圖所示,將此項目命名為“車輛實時定位系統”。
5.2、關聯產品
?? 為了使本項目能夠獲取到目標設備的定位信息,我們首先需要將該項目和我們在前一節創建的產品“車輛定位器”綁定。
?? 在項目控制臺,點擊左側的“產品”,點擊“關聯物聯網平臺產品”。此時可以看見我們創建的“車輛定位器”。點擊選中,并勾選“關聯產品同時關聯其下所有設備”,以便該項目可以訪問到所有設備的定位信息。
5.4、創建“Web應用”
?? 在項目控制臺,點擊左側的“主頁”,在新項目的首頁新建一個Web應用,命名為“車輛實時定位監控”。
?? Web應用創建成功后自動跳轉到應用界面設計頁面。點擊左側欄中的“組件”按鈕圖標,就可以看到可用的組件列表。各組件的說明請參考IoT Studio組件說明。
?? 為了能夠將設備顯示在地圖上,我們選用“設備地圖”組件。鼠標懸停在該組件上以查看詳細信息。
?? 將“設備地圖”組件拖拽至畫布,并調整大小。此時,地圖上還未能正確顯示設備。我們需要點擊右側“編輯設備地圖”。
?? 點擊右側“編輯設備地圖”后,我們可以在右側“選擇設備”中,選擇我們剛剛和項目綁定的“車輛定位器”。點擊確定。
?? 此時,地圖上已經出現了定位點,正是我們之前上線的設備。在右側選擇“車輛定位器”,可以看到綁定的所有設備。點擊對應設備可以在地圖上定位到每個設備的具體位置。至此,“設備地圖“配置完成,點擊頁面右上角”√“保存配置。
5.5、發布上線
?? 回到WEB應用頁面,可以看到地圖上的設備定位已經正常顯示,可以進行發布。在發布之前可以點擊上圖的“預覽”查看應用的實際運行效果。實際運行效果如下圖所示:
??這樣我們就完成了一個車輛實時定位系統從設備端定位信息獲取、物聯網云平臺開發及物聯網應用開發全鏈路的開發。
如果想要學習車輛定位系統實驗更詳細的操作步驟,請參考“車輛定位系統詳解”中的說明。
總結
以上是生活随笔為你收集整理的Python + ESP32 制作车辆定位系统,终于可以随时随地知道爱车的位置了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬件设计【1】——光耦的基本原理及TLP
- 下一篇: Java中hash算法细述