一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】六、同步網(wǎng)絡(luò)時(shí)間

開發(fā)板試用精選 ? 來源:開發(fā)板試用 ? 作者:電子發(fā)燒友論壇 ? 2022-11-02 15:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文來源電子發(fā)燒友社區(qū),作者:李元江, 帖子地址:https://bbs.elecfans.com/jishu_2025289_1_1.html

今天的帖子我寫的是關(guān)于網(wǎng)絡(luò)時(shí)間同步,主要功能為按下按鍵,進(jìn)入網(wǎng)絡(luò)NTP時(shí)間獲取功能,最后完成網(wǎng)絡(luò)時(shí)間的同步。

一、NTP時(shí)間獲取

首先說說怎么獲取網(wǎng)絡(luò)時(shí)鐘。現(xiàn)在很多NTP時(shí)間服務(wù)器,從服務(wù)器中就能獲取網(wǎng)絡(luò)時(shí)間。我所使用的時(shí)間服務(wù)器為time.windows.com,IP地址為52.231.114.183,端口號(hào)為123,采用UDP協(xié)議。需要先采用UDP方式,連接到該服務(wù)器。之后再發(fā)送48個(gè)字節(jié)的十六進(jìn)制數(shù)(不用回車加換行):0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d6 6d d9 00 00 00 00 00然后就可以看到時(shí)間服務(wù)器返回來的數(shù)據(jù),下圖是我使用調(diào)試組手獲得的數(shù)據(jù),正常情況下一共會(huì)收到48個(gè)字節(jié)數(shù)據(jù),第41-44字節(jié)的數(shù)據(jù)是我們所需要的時(shí)間數(shù)據(jù)。如下獲得的NTP數(shù)據(jù)為0xE398556A。

  • 注意:該NTP數(shù)據(jù)是從1900年開始算的,而時(shí)間戳是從1970年開始算的
215103y02ouoeqajofgbah.jpg
二、軟件設(shè)計(jì)
首先需要移植許思維老師例程的部分代碼。其中包括:net_common.h、net_demo.h、net_params.h、wifi_connecter.c、wifi_connecter.h。
其中net_params.h需要注意
PARAM_HOTSPOT_SSID改為你的路由器或者wifi熱點(diǎn)名字,PARAM_HOTSPOT_PSK更改為路由器獲取熱點(diǎn)密碼。
  1. #ifndef PARAM_HOTSPOT_SSID
  2. #define PARAM_HOTSPOT_SSID "YYYYY" // your AP SSID
  3. #endif
  4. ?
  5. #ifndef PARAM_HOTSPOT_PSK
  6. #define PARAM_HOTSPOT_PSK"123456"http:// your AP PSK
  7. #endif
復(fù)制代碼
1. getNTP.c

該函數(shù)主要完成網(wǎng)絡(luò)連接,連接時(shí)間服務(wù)器及時(shí)間獲取,并根據(jù)獲取到的NTP時(shí)間計(jì)算出對(duì)應(yīng)的時(shí)間戳。獲取到的NTP時(shí)間數(shù)值是從1900年開始計(jì)算,時(shí)間戳數(shù)值從1970年開始計(jì)算。因此需要減去1970-1900年間的數(shù)值,才能得到我們所需的時(shí)間戳。

  1. #include
  2. #include
  3. #include
  4. #include
  5. ?
  6. #include "net_demo.h"
  7. #include "net_common.h"
  8. #include "net_params.h"
  9. #include "wifi_connecter.h"
  10. #include "ohos_init.h"
  11. #include "cmsis_os2.h"
  12. ?
  13. #define NTPIPADDR "52.231.114.183"
  14. #define NTPPORT 123
  15. ?
  16. #define NTP_TIMESTAMP_DELTA 2208988800ull
  17. ?
  18. externuint32_t timedata;
  19. extern bool GetNTPFlag;
  20. ?
  21. void getNtpTime(void)
  22. {
  23. ?
  24. uint32_t NTP_Time;
  25. unsigned char buf[48];//存儲(chǔ)NTP服務(wù)器返回的數(shù)據(jù)
  26. unsigned char NTP_Data[]=
  27. { 0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  28. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  29. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  30. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  31. 0x0d6,0x06d,0x0d9,0x00,0x00,0x00,0x00,0x00};
  32. ; //48字節(jié)的報(bào)文
  33. ?
  34. ?
  35. WifiDeviceConfig config = {0};
  36. ?
  37. // 準(zhǔn)備AP的配置參數(shù)
  38. strcpy(config.ssid, PARAM_HOTSPOT_SSID);
  39. strcpy(config.preSharedKey, PARAM_HOTSPOT_PSK);
  40. config.securityType = PARAM_HOTSPOT_TYPE;
  41. osDelay(10);
  42. int netId = ConnectToHotspot(&config);
  43. ?
  44. ssize_t retval = 0;
  45. int sockfd = socket(AF_INET, SOCK_DGRAM, 0); // UDP socket
  46. ?
  47. struct sockaddr_in toAddr = {0};
  48. toAddr.sin_family = AF_INET;
  49. toAddr.sin_port = htons(NTPPORT); // 端口號(hào),從主機(jī)字節(jié)序轉(zhuǎn)為網(wǎng)絡(luò)字節(jié)序
  50. if (inet_pton(AF_INET, NTPIPADDR, &toAddr.sin_addr) <= 0) { // 將主機(jī)IP地址從“點(diǎn)分十進(jìn)制”字符串 轉(zhuǎn)化為 標(biāo)準(zhǔn)格式(32位整數(shù))
  51. printf("inet_pton failed!rn");
  52. goto do_cleanup;
  53. }
  54. ?
  55. // UDP socket 是 “無連接的” ,因此每次發(fā)送都必須先指定目標(biāo)主機(jī)和端口,主機(jī)可以是多播地址
  56. retval = sendto(sockfd, NTP_Data, 48, 0, (struct sockaddr *)&toAddr, sizeof(toAddr));
  57. if (retval < 0) {
  58. printf("sendto failed!rn");
  59. goto do_cleanup;
  60. }
  61. ?
  62. printf("send NTP message %ld done!rn",retval);
  63. for(uint8_t i = 0;i<48;i++)
  64. {
  65. printf("%02xt",(unsigned char)NTP_Data[i]);
  66. if( (i+1) % 8 == 0 )
  67. printf("rn");
  68. }
  69. struct sockaddr_in fromAddr = {0};
  70. socklen_t fromLen = sizeof(fromAddr);
  71. ?
  72. // UDP socket 是 “無連接的” ,因此每次接收時(shí)前并不知道消息來自何處,通過 fromAddr 參數(shù)可以得到發(fā)送方的信息(主機(jī)、端口號(hào))
  73. retval = recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr *)&fromAddr, &fromLen);
  74. if (retval <= 0) {
  75. printf("recvfrom failed or abort, %ld, %d!rn", retval, errno);
  76. goto do_cleanup;
  77. }
  78. ?
  79. NTP_Time = buf[40]<<24 | buf[40+1]<<16|buf[40+2]<<8 |buf[40+3];
  80. timedata = NTP_Time - NTP_TIMESTAMP_DELTA;
  81. ?
  82. printf("timedata is %ldn",timedata);
  83. //response[retval] = '';
  84. printf("recv UDP message {%s} %ld done!rn", buf, retval);
  85. printf("peer info: ipaddr = %s, port = %drn", inet_ntoa(fromAddr.sin_addr), ntohs(fromAddr.sin_port));
  86. GetNTPFlag = false;
  87. ?
  88. for(uint8_t i = 0;i<48;i++)
  89. {
  90. printf("%02xt",(unsigned char)buf[i]);
  91. if( (i+1) % 8 == 0 )
  92. printf("rn");
  93. }
  94. do_cleanup:
  95. ?
  96. GetNTPFlag = false;
  97. printf("do_cleanup...rn");
  98. close(sockfd);
  99. ?
  100. printf("disconnect to AP ...rn");
  101. DisconnectWithHotspot(netId);
  102. printf("disconnect to AP done!rn");
  103. }
復(fù)制代碼
2. oled_demo.c

在oled_demo.c文件中增加獲取時(shí)間功能代碼。按下按鍵進(jìn)入時(shí)間同步功能。

  1. AdcRead(ANALOG_KEY_CHAN_NAME, &data, WIFI_IOT_ADC_EQU_MODEL_4, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0);
  2. float voltage = ConvertToVoltage(data);
  3. ?
  4. if(voltage>0.45 && voltage<0.65)
  5. {
  6. OledShowString(16,7,"Sync time...",1);
  7. getNtpTime();
  8. OledFillScreen(0);
  9. }
復(fù)制代碼
3. BUILD.gn
修改BUILD.gn,增加wifi_connecter.c和getNTP.c
  1. sources = [
  2. "oled_demo.c",
  3. "oled_ssd1306.c",
  4. "timeconv.c",
  5. "envrionment_demo.c",
  6. "aht20.c",
  7. "wifi_connecter.c",
  8. "getNTP.c"
  9. ]
復(fù)制代碼
三、結(jié)果演示
按下OLED顯示板左邊按鍵,進(jìn)入時(shí)間同步功能。會(huì)顯示“Sync time...”提示。
214839pxg5b11jxb1gdqbe.jpg
時(shí)間同步完成后,可以看到OLED顯示為最新同步的時(shí)間。
214855vqzeqqhzdkvl55eq.jpg

四、總結(jié)
NTP時(shí)間獲取很簡單,只需要設(shè)備連接到網(wǎng)絡(luò),并且連接到時(shí)間服務(wù)器,再發(fā)送48個(gè)字節(jié)的固定數(shù)據(jù)到服務(wù)器,服務(wù)器會(huì)自動(dòng)返回帶有NTP時(shí)間數(shù)值的報(bào)文。下一篇我打算寫一篇關(guān)于獲取天氣預(yù)報(bào)的貼子,涉及到如何從網(wǎng)絡(luò)獲取天氣預(yù)報(bào)數(shù)據(jù),如何使用CJson解析Json格式的天氣預(yù)報(bào)內(nèi)容。
還有2個(gè)多小時(shí)就2021年了,祝各位工程師2021越來越好。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • wi-fi
    +關(guān)注

    關(guān)注

    14

    文章

    2256

    瀏覽量

    126866
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2118

    瀏覽量

    32825
  • HiSpark
    +關(guān)注

    關(guān)注

    1

    文章

    156

    瀏覽量

    7403
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Wi-Fi 8要來了!未來Wi-Fi技術(shù)演進(jìn)方向揭秘

    產(chǎn)品銷售中,雖然Wi-Fi 7產(chǎn)品的銷量份額快速從年初的個(gè)位數(shù)百分比增長至14%,但Wi-Fi 6產(chǎn)品的銷量份額依然穩(wěn)定在60%左右。如果從存量設(shè)備來看,那么Wi-Fi 7路由器的占比將遠(yuǎn)遠(yuǎn)小于這個(gè)數(shù)。 ? 智能手機(jī)等終端設(shè)備已
    的頭像 發(fā)表于 11-24 03:14 ?3785次閱讀
    <b class='flag-5'>Wi-Fi</b> 8要來了!未來<b class='flag-5'>Wi-Fi</b>技術(shù)演進(jìn)方向揭秘

    科普|公司的Wi-Fi,為什么這么慢?

    大家在公司上班,經(jīng)常會(huì)使用到Wi-Fi。最近這幾年,隨著時(shí)代的發(fā)展,高清視頻會(huì)議等大帶寬網(wǎng)絡(luò)應(yīng)用越來越普遍。而公司的網(wǎng)絡(luò),卻非常不給力,頻繁卡頓,嚴(yán)重影響使用體驗(yàn)。哪怕IT的同事已經(jīng)把網(wǎng)絡(luò)
    的頭像 發(fā)表于 06-20 06:06 ?409次閱讀
    科普|公司的<b class='flag-5'>Wi-Fi</b>,為什么這么慢?

    Wi-Fi 8:開啟極高可靠性 (UHR) 連接的新紀(jì)元——2

    ) Hi-Priority EDCA (HIP EDCA) 在Wi-Fi 網(wǎng)絡(luò)架構(gòu)中,每個(gè)終端設(shè)備的每一個(gè)將被傳輸或接收的數(shù)據(jù)都會(huì)在特定時(shí)間點(diǎn)進(jìn)行調(diào)度。通過優(yōu)先級(jí)排序和相應(yīng)算法,大多數(shù)數(shù)據(jù)傳輸能夠在規(guī)定
    發(fā)表于 06-13 11:15

    Wi-Fi 8:開啟極高可靠性 (UHR) 連接的新紀(jì)元——1

    的802.11bn (Wi-Fi 8) 標(biāo)準(zhǔn)化工作的時(shí)間表。圖中提及的“UHR”是指UHR Study Group (簡稱UHR SG) ,該小組成立于2022 年7 月,旨在討論關(guān)于UHR項(xiàng)目授權(quán)請(qǐng)求 (UHR
    發(fā)表于 06-13 11:09

    華為加速Wi-Fi 7技術(shù)在行業(yè)場(chǎng)景的應(yīng)用

    華為數(shù)據(jù)通信創(chuàng)新峰會(huì)2025期間,華為面向中東中亞地區(qū)舉辦第三季“Imagine Wi-Fi 7 to Reality”創(chuàng)新應(yīng)用大賽頒獎(jiǎng)典禮,9位參賽者憑借Wi-Fi 7的應(yīng)用創(chuàng)新成果脫穎而出并獲獎(jiǎng)。會(huì)上,華為同步發(fā)布第四季賽事
    的頭像 發(fā)表于 05-21 16:09 ?377次閱讀

    基于 Wi-Fi 的定位服務(wù)

    以下捕獲使用 location_wifi_get 函數(shù)請(qǐng)求 Wi-Fi 定位服務(wù)。該事件的總功耗為 125.85mC,日志顯示精確度為 30.0m。 Got location: method
    發(fā)表于 04-17 15:16

    nRF Cloud Wi-Fi 定位服務(wù)

    中實(shí)現(xiàn)高性能和超低功耗。對(duì)于 Wi-Fi 定位請(qǐng)求,nRF Cloud 可借助 Wi-Fi 數(shù)據(jù)庫計(jì)算設(shè)備位置,該數(shù)據(jù)庫包含不同 Wi-Fi 網(wǎng)絡(luò)的坐標(biāo)。然后,設(shè)備位置將從 nRF C
    發(fā)表于 04-17 15:07

    Wi-Fi 定位服務(wù)

    Wi-Fi 是一種著名的無線網(wǎng)絡(luò)技術(shù),用于設(shè)備的局域網(wǎng)和互聯(lián)網(wǎng)接入。Wi-Fi 通過 Wi-Fi 網(wǎng)絡(luò)為家庭、辦公室和學(xué)校等環(huán)境提供便捷的
    發(fā)表于 04-17 15:01

    推出了期待已久的 nRF7002 低功耗Wi-Fi 6

    支持長壽命的電池供電Wi-Fi操作。 借助 Wi-Fi 6,我們將支持用于 Matter 的所有無線協(xié)議、用于調(diào)試的藍(lán)牙 LE、用于低功耗mesh網(wǎng)絡(luò)的 Thread 以及用于高吞吐量的Wi-
    發(fā)表于 03-26 11:00

    2.4GHz+5GHz雙頻低功耗 Wi-Fi 6協(xié)同IC -nRF7002

    /VR設(shè)備的應(yīng)用:VR頭戴顯示器:確保高清畫面流暢傳輸和低延遲響應(yīng)。AR智能眼鏡:提供穩(wěn)定的無線連接,延長續(xù)航時(shí)間。無線體感手套和控制器:高效同步交互,增強(qiáng)用戶體驗(yàn)。云VR/AR設(shè)備:通過Wi-Fi
    發(fā)表于 02-26 14:54

    華為海思正式進(jìn)入Wi-Fi FEM賽道?

    大家都知道了,2018年11 月離開銳迪科(RDA),前往福建晉江創(chuàng)立三伍微,專注于Wi-Fi射頻前端芯片,從路由器Wi-Fi FEM,到手機(jī)Wi-Fi FEM,再到IoT FEM全覆
    發(fā)表于 12-11 17:42

    Wi-Fi 4到Wi-Fi 7:網(wǎng)速飆升40倍的無線革命

    1 Wi-Fi技術(shù)的快速發(fā)展 每一代新的Wi-Fi協(xié)議發(fā)布,都會(huì)帶來更高的無線速率。 ? 從Wi-Fi 4到Wi-Fi 7:無線網(wǎng)絡(luò)技術(shù)顯著
    的頭像 發(fā)表于 12-09 10:10 ?1029次閱讀
    從<b class='flag-5'>Wi-Fi</b> 4到<b class='flag-5'>Wi-Fi</b> 7:網(wǎng)速飆升40倍的無線革命

    Wi-Fi 7與Wi-Fi 6E有什么區(qū)別

    也許很多人還在考慮是否要將使用的Wi-Fi設(shè)備升級(jí)到Wi-Fi 6或Wi-Fi 6E,而這些標(biāo)準(zhǔn)的繼任者卻已經(jīng)開始“登堂入室”了。Wi-Fi 7是新一代
    的頭像 發(fā)表于 11-07 11:38 ?3405次閱讀

    IR900 Wi-Fi聯(lián)網(wǎng)的配置過程

    例如上圖,IR900 通過Wi-Fi接口連接公司辦公無線網(wǎng)絡(luò) inhand-office (SSID為無線網(wǎng)絡(luò)的名稱) 首先將Wi-Fi接口與WLAN接口解綁 登陸IR900后,進(jìn)
    發(fā)表于 07-25 06:09

    AT 0.60.0.0看不到我的Wi-Fi網(wǎng)絡(luò),為什么?

    我對(duì) AT 0.60.0.0 有一點(diǎn)問題。當(dāng)我通過 AT CWLAP 顯示所有網(wǎng)絡(luò)時(shí),我看不到我的路由器 AP 網(wǎng)絡(luò),但我可以連接到它。當(dāng)我在智能手機(jī)中打開 Wi-Fi 熱點(diǎn)時(shí),我可以看到我的熱點(diǎn)
    發(fā)表于 07-18 08:31