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