實現(xiàn)效果視頻 (點擊可以觀看)
結合OneNET Studio云平臺STM32物聯(lián)網(wǎng)開發(fā)(1)- MQTT協(xié)議設備接入數(shù)據(jù)上報測試(https://blog.csdn.net/weixin_44862509/article/details/127015383) 這篇文章如圖1,圖1的1位置是在MQTTX上模擬和OneNET Studio云平臺連接以及在相應的通道上上發(fā)數(shù)據(jù)以及接收數(shù)據(jù),
圖1
圖1的2位置是OneNET Studio 平臺上顯示的數(shù)據(jù),說明我已經(jīng)可以和云端進行互動數(shù)據(jù)了。
但是如何用手上的Air724UG(4G模組)如圖2,替代MQTTX軟件實現(xiàn)與OneNET云進行通訊實現(xiàn)替代MQTTX用硬件將數(shù)據(jù)發(fā)送到云端顯示呢,以及如何用STM32單片機結合4G模組實現(xiàn)將數(shù)據(jù)自動上發(fā)呢?
圖2
第一步 獲取4G模組AT聯(lián)網(wǎng)設置信息:如果需要設置4G模組,其實主要的工作和在MQTTX設置是一樣的,就是將于云服務器鏈接的賬號密碼以及產(chǎn)品和設備的信息以及通道信息通過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工具設置聯(lián)網(wǎng)信息:首先通過USB轉串口模塊與4G模組鏈接,并給4G模組通電實現(xiàn)4G模組可以接收電腦端串口調試助手下發(fā)的AT指令(可以根據(jù)大家在網(wǎng)上自行買的Air724UG 4G模組的方式配置鏈接,對于實現(xiàn)這一步的前提條件是你手上的4G模組是可以通過AT指令在電腦端的串口調試助手下發(fā)命令并且是有回復的,比如發(fā)送AT,回復OK)如圖4,
圖4
將相關信息輸入到DTU小工具,如圖4的位置1是打開串口,位置2是選擇MQTT協(xié)議(上一篇文章我用的是MQTTX模擬該協(xié)議),位置3為設置的基本登入信息,位置4為小工具實際下發(fā)的AT指令。
圖5
以及圖5的位置1為回復topic,位置2位上報topic和位置3為對應的AT指令。
第三步 實現(xiàn)4G模組聯(lián)網(wǎng):如圖6點擊圖6位置1通過AT指令重啟4G模組,可以看到4G模組對應的指令燈從關閉到開啟說明重啟成功,位置2為4G模組與服務器鏈接成功的狀態(tài)回復:“+STATUS: 1,MQTT CONNECTED”,這里很關鍵,只有回復了這個狀態(tài)才說明與服務鏈接成功,同時看到4G模組的LINK的指示燈是常亮。
圖6
如圖6的3位置為設備狀態(tài)為“在線”,其實到了這一步,大家有沒有覺得與我們在第一篇文章介紹的MQTTX鏈接服務器一樣的感覺,如果感覺一樣,那就說明你真正開始領悟了。
第四步 通過4G模組發(fā)送數(shù)據(jù)到服務器:按指定的數(shù)據(jù)格式通過串口方式發(fā)送出去,如圖7的位置1位串口發(fā)送的內容就是對應屬性JSON格式要發(fā)送的數(shù)據(jù)(這里測試發(fā)送的時候我把時間戳修改了當前的時間),圖7的位置2為服務器收到數(shù)據(jù)后回復接收成功的狀態(tài)信息,圖7的3位置看到OneNET Studio平臺顯示了我們發(fā)送上去的數(shù)據(jù)。
圖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為數(shù)據(jù)在OneNET Studio云平臺展示界面,而且OneNET Studio平臺的數(shù)據(jù)接口是對外開發(fā)的,如果大家需要直接設計前端頁面可以直接獲取相關的接口數(shù)據(jù),通過以上8部分硬件模塊在杜邦線的連接下實現(xiàn)了功能如下。
圖9
圖10
這里我們暫且把這個作品稱為系統(tǒng),名稱為基于OneNET Studio云實現(xiàn)STM32農(nóng)業(yè)環(huán)境監(jiān)測Air724UG Cat1 4G傳輸系統(tǒng)。
1、STM32單片機每隔10秒通過DHT11溫濕度傳感器和GL5537光敏電阻傳感器采集農(nóng)業(yè)環(huán)境數(shù)據(jù)并在LCD12864液晶屏實時顯示;
2、每隔10S通過Air724UG Cat1 4G模塊將采集的溫度,濕度,光照值數(shù)據(jù)及當前時間戳上報到OneNET Studio云平臺進行展示,同時LED閃爍一次;
3、OneNET Studio云平臺將收集到數(shù)據(jù)以曲線及表格的方式展示并記錄數(shù)據(jù),同時向單片機下發(fā)數(shù)據(jù)接收狀態(tài),同時LED閃爍2次;
第六步 硬件電路接線說明:如圖11為硬件電路圖接口接線說明圖,按圖11的控制接口將溫濕度傳感器,光敏電阻傳感器,4G模塊發(fā)送數(shù)據(jù)給單片機,液晶屏,LED接收單片機的控制數(shù)據(jù),這里說一點是電源部分,因為4G模塊需要12V供電,所以采用12V轉5V的模塊進行連接同時將5V和3.3V擴展出來方便給其他模塊供電。
圖11
模塊原理我想大家應該都很熟悉了,因為都是比較常用的模塊,大家獲取到我提供的源代碼后直接對著代碼和函數(shù)看程序就可以知道模塊怎么使用了。而且相信大家手上都直接或間接的單片機開發(fā)板對于本系統(tǒng)所用到的都是比較常見的模塊所以大家這部分可以直接補習,如果任然有疑問的可以和我交流。
第七步 關鍵程序段分析:如圖12為程序主函數(shù)的內容,可以看到程序非常簡單,圖12的1和2的位置通過調用函數(shù)的方式通過相應的變量獲取到時間戳,溫度,濕度,光照值。
圖12
同時圖12的3和4的位置調用函數(shù)將獲取數(shù)據(jù)的變量傳遞給LCD12864顯示函數(shù)進行數(shù)據(jù)顯示,再通過調用4G模塊數(shù)據(jù)發(fā)送函數(shù)將變量的值通過4G模塊發(fā)送出去。時間戳如果生成,這里需要包含一個系統(tǒng)自帶的頭文件:#include "time.h",并通過mktime(&Time)函數(shù),將獲取的當前時間(格式: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;
大家可以通過這個函數(shù)轉換出來的時間戳值,放到在線工具進行反推驗證,比如我得到的一個時間戳的值是1663962320000 單位是毫秒,如圖13的1位置可以看到轉換出來的北京時間是符合要求的(要注意,這個隨數(shù)據(jù)一起發(fā)送的時間不能超過你生成密碼用的時間)。
圖13
還有就是如何把OneNET Studio平臺需要的數(shù)據(jù)格式組合起來,比如我這個系統(tǒng)目前發(fā)送的是溫度,濕度,光照三個值,數(shù)據(jù)格式如下:
{"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語言里發(fā)送是發(fā)送不過去的,需要用到一個字符串組合函數(shù)如圖14,為了方便大家看到調用的全部參數(shù)為把程序分行了,但是在實際編譯的時候要排成一行,要不然編譯不通過。
圖14
當然了也可以通過Keil環(huán)境下Jansson庫生成相應的JSON格式的數(shù)據(jù),但是這樣做的話對單片機的存儲空間有一定要求,所以如果傳輸數(shù)據(jù)量大需要用JSON函數(shù)轉換,如果傳輸數(shù)據(jù)不多的話可以直接用我介紹的方法。
第八步 回顧總結:其實最關鍵的還是要保證4G模塊能和OneNET Studio建立連接,真正需要單片機控制的非常少,關鍵還是第一篇文章,以及這邊文章的前幾部的循序漸進的聯(lián)網(wǎng)測試,還有就是為了保證數(shù)據(jù)能正常上報,一定要驗證下單片機串口發(fā)送出來的數(shù)據(jù)格式是否正確。
希望我的文章能幫到大家,文章里涉及到的軟件工具,電路圖資料,程序源代碼等大家可以 搜索 WX公眾號 “和我學單片機”回復“OneNET01”回復帶密碼的百度網(wǎng)盤下載鏈接,大家可以自行下載。如果資料不夠或學習中遇到問題可以在公眾號留言。
更新: 2022年9月24日 楊榮國 個人WX : tong1366
-
物聯(lián)網(wǎng)
+關注
關注
2899文章
43793瀏覽量
369140 -
STM32
+關注
關注
2263文章
10847瀏覽量
353775 -
MQTT
+關注
關注
5文章
640瀏覽量
22358
發(fā)布評論請先 登錄
相關推薦
評論