日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【实验室乱记】从 0 开始的 STM32L0 的 Gps WiFi 蓝牙模块物联网开发

發布時間:2024/8/1 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【实验室乱记】从 0 开始的 STM32L0 的 Gps WiFi 蓝牙模块物联网开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

記錄

  • 應用外設
    • Gps 模塊
    • WiFi 模塊
    • 藍牙模塊
    • 低功耗

在無比漫長寒假中接取的 STM32L0 任務使我對 STM32 開發流程有了大致認識。
(重點吐槽下億百特家的模塊手冊中居然一點例程代碼都不給!)

應用外設

Gps 模塊、WiFi 模塊、藍牙模塊都是通過串口與 MCU 相連接,對于串口收發數據與分析思路顯得尤為重要。
(苦惱了 3 天的 Gps 數據分析被實驗室老大一語道破,兩小時就完成了 QAQ)

Gps 模塊

GPS 模塊是集成了 RF 射頻芯片、基帶芯片和核心 CPU,并加上相關外圍電路而組成的一個集成電路。

目前GPS模塊的GPS芯片大部分采用全球市占率第一的SiRFIII系列為主。由于GPS模塊采用的芯片組不一樣,性能和價格也有區別,采用SIRF三代芯片組的GPS模塊性能最優,價格也要比采用MTK或者MSTAR等GPS芯片組的貴很多。現階段也持續在芯片升級,比方sirf4,然后又是sirf5,總體靈敏度提高了不少,縮短了定位時間,同時也幫助了客戶快速的進入了定位應用狀態。

學長幫我購買的是 E108-GN01-TB
拿到模塊的第一時間肯定是確定模塊是否正常工作(怪硬件!怪元器件!)

首先拿 naviTrack 上位機連接 Gps 模塊的外置串口,收到的數據如圖所示。在 Gps NMEA 數據介紹 這篇博客中可以得知相關數據的含義。

找到自己“心儀”的數據后,接下來就是接受她并展示出來辣。
開始我苦于沒有思緒,跟著 某火 某點 的思路,一次接收上百上千條字符串逐條按數據頭用strstr()與查找逗號解析,后在測試接收 Gps 數據并通過串口打印時發現芯片在工作一段時間后會跑飛(至今未破案,但我認為是在 Gps 串口接收 Usb 串口轉發時不同步與中斷過程中處理數據時間過久導致的),后在老大指點下想出新的解析思路。

狀態圖

校驗 $ 狀態開始,若接收到 $ 代表接下來的數據是一幀完整數據,進入校驗數據頭狀態
若接收到的數據頭 為 目標數據頭,那么就進入接收狀態,反之退回到校驗 $ 狀態
若在接收狀態得到了 $ 則說明這一數據幀已結束,則回到校驗數據頭狀態,繼續校驗數據頭。
而數據處理的過程應該接收完完整一幀數據后,也就是接收狀態轉移到校驗數據頭狀態之中。
(在此先上流程圖與狀態轉移圖,相關代碼考完試補全)
單幀解析思路按逗號開始與結束
例如:我的需求是得到經緯度與日期時間,所以我選擇了 GPRMC這幀數據

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
<1> UTC時間,hhmmss(時分秒)格式
<2> 定位狀態,A=有效定位,V=無效定位
<3> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸)
<4> 緯度半球N(北半球)或S(南半球)
<5> 經度dddmm.mmmm(度分)格式(前面的0也將被傳輸)
<6> 經度半球E(東經)或W(西經)
<7> 地面速率(000.0~999.9節,前面的0也將被傳輸)
<8> 地面航向(000.0~359.9度,以真北為參考基準,前面的0也將被傳輸)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也將被傳輸)
<11> 磁偏角方向,E(東)或W(西)
<12> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=數據無效)

在去掉 $GPRMC 后遍歷 Gps 數據數組提取出逗號之間的數據依次放入結構,即可得到自己想要的信息。

  • UTC時間需要通過小時位 +8 得到北京時間
  • 經緯度數據需要轉換成dd.mmmmmm才可正常使用(親測不轉換相差幾公里)
  • WiFi 模塊

    WiFi 模塊部分選擇的是比較常見的ESP8266系列
    這部分原理也是比較簡單的,拿到模塊的第一時間先外接串口,拿電腦端的串口軟件測試模塊功能(我使用的是億百特自己編寫的上位機,只是把相關指令都集成在按鈕中了,XCOM+AT 指令集也可達到同樣效果)。模塊調通后,對于模塊使用者來說只需要初始化好對應引腳與串口,并正確發送指令。
    TCP連接大致流程為

  • AT+RST //上電重啟模塊,確保處于初始狀態
  • AT+CWMODE=1 //進入station模式
  • AT+CWJAP_DEF=“Account”,“Password” //輸入賬號密碼
  • AT+CIPSTART=“TCP”,“IP 地址”,端口號 //建立連接
  • AT+CIPMODE=1 //進入透傳模式
  • AT+CIPSEND //透傳開始
  • AT+CIPMODE=0 //退出透傳模式
    這里推薦一個 在線 TCP/IP 調試工具 ,提供IP與端口方便大家調試。
  • 藍牙模塊

    藍牙模塊選擇的是 E104-BT40。
    藍牙在這三個通信模塊中比較好配置,上電自動進入 SPP 模式,拿藍牙調試軟件可直接連接通信。
    發送數據只需要通過串口 Transmit 即可。
    而接收數據則又是一個痛點,在這里藍牙模塊用來接收 WiFi 的賬號密碼,我為其設置了 3 個標志。

    藍牙狀態轉移相對于Gps接收就簡單了很多(畢竟是自己設計狀態),而狀態之間利用不常用的ASCII碼字符,例如 0x7B-“{” 0x7C-"|" 0x7D-"}"來作為狀態轉移的標志。
    默認處于等待狀態,接收到 7B 進入賬號狀態,收到的字符都存于賬號數組中。
    在賬號狀態中,接收到 7C 進入密碼狀態,接收到的字符都存于密碼數組。
    在密碼狀態時,接收 7D ,表明一次接收過程完畢,發送 WiFi 連接指令,然后回到等待狀態。
    不要在中斷中連接 WiFi 不要在中斷中連接 WiFi!在中斷函數中貌似不允許 delay 過久。不知原因,有沒有大佬在評論解釋下)

    低功耗

    關于低功耗的資料還是比較少的,參考了某火代碼進入低功耗的方式。

    總結

    以上是生活随笔為你收集整理的【实验室乱记】从 0 开始的 STM32L0 的 Gps WiFi 蓝牙模块物联网开发的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。