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