實現效果視頻 (點擊可以觀看)
結合OneNET Studio云平臺STM32物聯網開發(1)- MQTT協議設備接入數據上報測試(https://blog.csdn.net/weixin_44862509/article/details/127015383) 這篇文章如圖1,圖1的1位置是在MQTTX上模擬和OneNET Studio云平臺連接以及在相應的通道上上發數據以及接收數據,
圖1
圖1的2位置是OneNET Studio 平臺上顯示的數據,說明我已經可以和云端進行互動數據了。
但是如何用手上的Air724UG(4G模組)如圖2,替代MQTTX軟件實現與OneNET云進行通訊實現替代MQTTX用硬件將數據發送到云端顯示呢,以及如何用STM32單片機結合4G模組實現將數據自動上發呢?
圖2
第一步 獲取4G模組AT聯網設置信息:如果需要設置4G模組,其實主要的工作和在MQTTX設置是一樣的,就是將于云服務器鏈接的賬號密碼以及產品和設備的信息以及通道信息通過AT指令寫入到4G模組硬件,所以如圖3結合上一篇文章找到以下信息:Client ID,Host,Port,Username,Password,以及屬性上報topic和屬性上報回復topic。找到信息如下:
圖3
Client ID:P0001
Host:studio-mqtt.heclouds.com
Port:1883
Username:i7ybqx3ZNk
Password:version=2018-10-31&res=products%2Fi7ybqx3ZNk%2Fdevices%2FP0001&et=--------gn=e5xZrxCdfmKkT1hndeWvmg%3D%3D
上報topic: $sys/i7ybqx3ZNk/P0001/thing/property/post
回復topic: $sys/i7ybqx3ZNk/P0001/thing/property/post/reply
第二步 通過4G模組DTU工具設置聯網信息:首先通過USB轉串口模塊與4G模組鏈接,并給4G模組通電實現4G模組可以接收電腦端串口調試助手下發的AT指令(可以根據大家在網上自行買的Air724UG 4G模組的方式配置鏈接,對于實現這一步的前提條件是你手上的4G模組是可以通過AT指令在電腦端的串口調試助手下發命令并且是有回復的,比如發送AT,回復OK)如圖4,
圖4
將相關信息輸入到DTU小工具,如圖4的位置1是打開串口,位置2是選擇MQTT協議(上一篇文章我用的是MQTTX模擬該協議),位置3為設置的基本登入信息,位置4為小工具實際下發的AT指令。
圖5
以及圖5的位置1為回復topic,位置2位上報topic和位置3為對應的AT指令。
第三步 實現4G模組聯網:如圖6點擊圖6位置1通過AT指令重啟4G模組,可以看到4G模組對應的指令燈從關閉到開啟說明重啟成功,位置2為4G模組與服務器鏈接成功的狀態回復:“+STATUS: 1,MQTT CONNECTED”,這里很關鍵,只有回復了這個狀態才說明與服務鏈接成功,同時看到4G模組的LINK的指示燈是常亮。
圖6
如圖6的3位置為設備狀態為“在線”,其實到了這一步,大家有沒有覺得與我們在第一篇文章介紹的MQTTX鏈接服務器一樣的感覺,如果感覺一樣,那就說明你真正開始領悟了。
第四步 通過4G模組發送數據到服務器:按指定的數據格式通過串口方式發送出去,如圖7的位置1位串口發送的內容就是對應屬性JSON格式要發送的數據(這里測試發送的時候我把時間戳修改了當前的時間),圖7的位置2為服務器收到數據后回復接收成功的狀態信息,圖7的3位置看到OneNET Studio平臺顯示了我們發送上去的數據。
圖7
第五步 STM32終端硬件功能:如圖8,圖8的1位置為12V電源輸入及5V和3.3V電壓降壓及擴展模塊,2位置為STM32F103C8T6單片機核心板,3位置為Air724UG Cat1 4G模塊,4位置為DHT11溫濕度模塊,5位置為光敏電阻光線感應模塊,6位置為LCD12864液晶屏,7位置為杜邦線,8位置為4G模塊天線。
圖8
圖9和圖10為數據在OneNET Studio云平臺展示界面,而且OneNET Studio平臺的數據接口是對外開發的,如果大家需要直接設計前端頁面可以直接獲取相關的接口數據,通過以上8部分硬件模塊在杜邦線的連接下實現了功能如下。
圖9
圖10
這里我們暫且把這個作品稱為系統,名稱為基于OneNET Studio云實現STM32農業環境監測Air724UG Cat1 4G傳輸系統。
1、STM32單片機每隔10秒通過DHT11溫濕度傳感器和GL5537光敏電阻傳感器采集農業環境數據并在LCD12864液晶屏實時顯示;
2、每隔10S通過Air724UG Cat1 4G模塊將采集的溫度,濕度,光照值數據及當前時間戳上報到OneNET Studio云平臺進行展示,同時LED閃爍一次;
3、OneNET Studio云平臺將收集到數據以曲線及表格的方式展示并記錄數據,同時向單片機下發數據接收狀態,同時LED閃爍2次;
第六步 硬件電路接線說明:如圖11為硬件電路圖接口接線說明圖,按圖11的控制接口將溫濕度傳感器,光敏電阻傳感器,4G模塊發送數據給單片機,液晶屏,LED接收單片機的控制數據,這里說一點是電源部分,因為4G模塊需要12V供電,所以采用12V轉5V的模塊進行連接同時將5V和3.3V擴展出來方便給其他模塊供電。
圖11
模塊原理我想大家應該都很熟悉了,因為都是比較常用的模塊,大家獲取到我提供的源代碼后直接對著代碼和函數看程序就可以知道模塊怎么使用了。而且相信大家手上都直接或間接的單片機開發板對于本系統所用到的都是比較常見的模塊所以大家這部分可以直接補習,如果任然有疑問的可以和我交流。
第七步 關鍵程序段分析:如圖12為程序主函數的內容,可以看到程序非常簡單,圖12的1和2的位置通過調用函數的方式通過相應的變量獲取到時間戳,溫度,濕度,光照值。
圖12
同時圖12的3和4的位置調用函數將獲取數據的變量傳遞給LCD12864顯示函數進行數據顯示,再通過調用4G模塊數據發送函數將變量的值通過4G模塊發送出去。時間戳如果生成,這里需要包含一個系統自帶的頭文件:#include "time.h",并通過mktime(&Time)函數,將獲取的當前時間(格式:XX-XX-XX YY:YY:YY 年-月-日 時:分-秒,這個時間可以通過時鐘芯片讀取,我的程序為了演示方便,我是直接用軟件延時的方式直接換算出日期和時間的,最關鍵還是時間戳的轉換)北京時間格式轉換為時間戳格式的算法如下:
Time.tm_year = (2000 + time_data[0])%100 + 100;
Time.tm_mon = time_data[1] - 1;
Time.tm_mday = time_data[2];
Time.tm_hour = time_data[3]- 8;
Time.tm_min = time_data[4];
Time.tm_sec = time_data[5];
time_uinx=mktime(&Time); //讀取時間戳
time_uinx=time_uinx*1000;
大家可以通過這個函數轉換出來的時間戳值,放到在線工具進行反推驗證,比如我得到的一個時間戳的值是1663962320000 單位是毫秒,如圖13的1位置可以看到轉換出來的北京時間是符合要求的(要注意,這個隨數據一起發送的時間不能超過你生成密碼用的時間)。
圖13
還有就是如何把OneNET Studio平臺需要的數據格式組合起來,比如我這個系統目前發送的是溫度,濕度,光照三個值,數據格式如下:
{"id":"0001","params":{"LightLux":{"time":1663962320000,"value":1155.00},"RelativeHumidity":{"time":1663962320000,"value":40.0},"CurrentTemperature":{"time":1663962320000,"value":32.0}},"version":"1.0"},但是如果直接在C語言里發送是發送不過去的,需要用到一個字符串組合函數如圖14,為了方便大家看到調用的全部參數為把程序分行了,但是在實際編譯的時候要排成一行,要不然編譯不通過。
圖14
當然了也可以通過Keil環境下Jansson庫生成相應的JSON格式的數據,但是這樣做的話對單片機的存儲空間有一定要求,所以如果傳輸數據量大需要用JSON函數轉換,如果傳輸數據不多的話可以直接用我介紹的方法。
第八步 回顧總結:其實最關鍵的還是要保證4G模塊能和OneNET Studio建立連接,真正需要單片機控制的非常少,關鍵還是第一篇文章,以及這邊文章的前幾部的循序漸進的聯網測試,還有就是為了保證數據能正常上報,一定要驗證下單片機串口發送出來的數據格式是否正確。
希望我的文章能幫到大家,文章里涉及到的軟件工具,電路圖資料,程序源代碼等大家可以 搜索 WX公眾號 “和我學單片機”回復“OneNET01”回復帶密碼的百度網盤下載鏈接,大家可以自行下載。如果資料不夠或學習中遇到問題可以在公眾號留言。
更新: 2022年9月24日 楊榮國 個人WX : tong1366
-
物聯網
+關注
關注
2910文章
44778瀏覽量
374728 -
STM32
+關注
關注
2270文章
10910瀏覽量
356615 -
MQTT
+關注
關注
5文章
652瀏覽量
22568
發布評論請先 登錄
相關推薦
評論