STM32與機智云連接實現(xiàn)(第二篇)—NTP實時時間獲取與設(shè)備配對
在上一篇文章中,我們介紹了如何將STM32與機智云進行連接,并成功實現(xiàn)了基礎(chǔ)的通信功能。在本篇文章中,我們將繼續(xù)深入,重點講解如何利用NTP(網(wǎng)絡(luò)時間協(xié)議)獲取精確的實時時間,并將其集成到我們的STM32應(yīng)用中。
本文將涵蓋以下幾個方面:
1.代碼編寫準備:我們將分析所需的開發(fā)環(huán)境配置、庫文件和工具鏈,確保您的開發(fā)環(huán)境為后續(xù)編程做好充分準備。
2.設(shè)備配對與連接:詳細講解如何通過機智云平臺完成設(shè)備的注冊、配對以及與STM32的無線連接配置。
3.NTP時間同步:介紹如何在STM32上通過NTP協(xié)議實現(xiàn)實時時間同步,確保您的設(shè)備能夠獲取到準確的時間信息。
4.網(wǎng)盤資料與下載:為了讓您能夠快速上手,本文還會提供相關(guān)的代碼示例和工程文件下載鏈接。
請繼續(xù)關(guān)注本系列文章,接下來我們將逐步展開,帶您實現(xiàn)STM32與機智云的全面互聯(lián)互通。
一、接下來是配置主函數(shù)main.c這個文件
(1)首先將機智云,添加的串口,定時器頭文件說明一下
(2)在main.c中添加Gizwits_Init函數(shù),對機智云需用到功能進行初始化。()
(3)在mai函數(shù)中對用到的函數(shù)進行初始化,串口1是用來打印機智云信息的,可以用串口1查看是否與機智云連接成功。
(4)在main.c文件末尾需要添加定時器3的中斷函數(shù),并將機智云的1ms計時函數(shù)加進去,但是需要先將機智云1ms函數(shù)定義,才能用得到,在gizwits_product.h文件中進行定義,如圖。
然后在main.c文件中添加定時器3的中斷函數(shù)
//定時器 3 中斷服務(wù)程序 1ms中斷void TIM3_IRQHandler(void) //TIM3 中斷{ if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //檢查 TIM3 更新中斷發(fā)生與否 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除 TIMx 更新中斷標志 gizTimerMs();//系統(tǒng)毫秒定時 }}復(fù)制代碼
(5)將這兩個函數(shù)放到主循環(huán)中,機智云才能一直獲取數(shù)據(jù)
userHandle();//用戶采集 gizwitsHandle((dataPoint_t *)¤tDataPoint);//協(xié)議處理復(fù)制代碼
(6)配對時需要做個按鍵,按鍵按下的時候發(fā)送配對指令,讓wifi模塊進入AirLink連接模式。將下面這兩句話加入按鍵判斷中就行了。
gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入 復(fù)制代碼
(7)最后有的小伙伴會用到[color=rgb(78, 161, 219) !important]printf函數(shù),使用這個函數(shù)在設(shè)置里需要勾選圖中選項哦,不然沒辦法使用。
二、現(xiàn)在通過第五點配置好了,現(xiàn)在開始正式寫代碼,嘿嘿~~
1.寫了那么多簡單介紹下使用到的機智云函數(shù)
userHandle函數(shù),是用戶在機智云官網(wǎng)定義的一些只讀的數(shù)據(jù)點,將里面的注釋解開,將自己想要上傳的值幅值進去就行了,例如下圖,紅框中的是你在機智云官網(wǎng)中創(chuàng)建項目時自己定義的變量,需要自己記住,不要在這懵逼了,等號右邊是自己軟件軟件獲取的值。
userInit函數(shù)是對機智云APP中的值做個初始化,這函數(shù)不操作也可以。
gizwitsEventProcess函數(shù)是你有添加布爾值的就在這找,里面有些user handle的就是用戶編寫代碼的地方。用if else對布爾值0,1,兩個狀態(tài)的判斷,自己根據(jù)需求寫就行了。
三、配對連接
打開機智云APP,按圖片順序來
到這一步先不要點完成上述操作,先按一下設(shè)計的進入配對模式的按鍵,可以通過串口一看到進入成功的話會發(fā)一條進入ARLINK配對信息。在點完成上述操作,然后就是等待配對成功,配對完成后回調(diào)到主界面,顯示自己的設(shè)備。設(shè)備變灰色就是斷開連接。
四、NTP(網(wǎng)絡(luò)獲取實時時間)的實現(xiàn)
順帶講下用機智云獲取NTP實時時間的操作吧
(1)首先定義一個全局變量并引用OLED的頭文件
u8 wifi_sta;復(fù)制代碼
(2)在userHandle函數(shù)中加入這段代碼若是網(wǎng)絡(luò)連接成功就多次請求NTP網(wǎng)絡(luò)時間,記得網(wǎng)絡(luò)時間獲取不要那么快哦,
static u16 t=0; if(wifi_sta) { t++; if(t==500) { t=0; gizwitsGetNTP();//請求 NTP 網(wǎng)絡(luò)時間 } }else { if(t!=0) t=0; }復(fù)制代碼
(3)在gizwits_product.c文件中找到gizwitsEventProcess函數(shù),在switch里找到圖中紅框標注的位置將下面代碼幅值進去,最終效果如紅框標注.CASE語句中WIFI_NTP所打印的內(nèi)容就是網(wǎng)絡(luò)時間,將他們復(fù)制到自己的OLED顯示語句中就行了,注意哦,只有成功配對后才會顯示是時間。
case WIFI_CON_M2M: wifi_sta = 1; //wifi已連接 break; case WIFI_DISCON_M2M: wifi_sta = 0; //wifi已斷開 break; case WIFI_RSSI: GIZWITS_LOG("RSSI %d\n", wifiData->rssi); break; case TRANSPARENT_DATA: GIZWITS_LOG("TRANSPARENT_DATA \n"); //user handle , Fetch data from [data] , size is [len] break; case WIFI_NTP: GIZWITS_LOG("WIFI_NTP : [%d-%d-%d %02d:%02d:%02d][%d] \n",ptime->year, ptime->month,ptime->day,ptime->hour,ptime->minute,ptime->second,ptime->ntp); OLED_ShowNum(4,1,ptime->year,4); OLED_ShowChar(4,5,'-'); OLED_ShowNum(4,6,ptime->month,1); OLED_ShowChar(4,7,'-'); OLED_ShowNum(4,8,ptime->day,1); OLED_ShowChar(4,9,' '); OLED_ShowNum(4,10,ptime->hour,2); OLED_ShowChar(4,12,'.'); OLED_ShowNum(4,13,ptime->minute,2); break;復(fù)制代碼
-
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355722 -
代碼
+關(guān)注
關(guān)注
30文章
4779瀏覽量
68521 -
NTP
+關(guān)注
關(guān)注
1文章
169瀏覽量
13890 -
機智云
+關(guān)注
關(guān)注
2文章
587瀏覽量
26392
發(fā)布評論請先 登錄
相關(guān)推薦
評論