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

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

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

使用SNTP協(xié)議獲取ESP8266網(wǎng)絡(luò)時(shí)間

CHANBAEK ? 來(lái)源:嵌入式攻城獅 ? 作者:安迪西 ? 2023-04-18 15:07 ? 次閱讀

1. NTP和SNTP協(xié)議

NTP是網(wǎng)絡(luò)時(shí)間協(xié)議(Network Time Protocol),用來(lái)同步網(wǎng)絡(luò)設(shè)備(如PC、手機(jī))的時(shí)間的協(xié)議

SNTP由 NTP改編而來(lái)(簡(jiǎn)單網(wǎng)絡(luò)時(shí)間協(xié)議,Simple NTP)大大簡(jiǎn)化了 NTP協(xié)議,同時(shí)也能保證時(shí)間達(dá)到一定的精確度。在實(shí)際應(yīng)用中,SNTP協(xié)議主要被用來(lái)同步因特網(wǎng)上計(jì)算機(jī)的時(shí)間

SNTP協(xié)議采用客戶端/服務(wù)器的工作方式,可以采用單播(點(diǎn)對(duì)點(diǎn))或者廣播(一點(diǎn)對(duì)多點(diǎn))模式操作。SNTP服務(wù)器通過(guò)接收 GPS信號(hào)或自帶的原子鐘作為系統(tǒng)的時(shí)間基準(zhǔn)。單播模式下,SNTP客戶端能夠通過(guò)定期訪問(wèn) SNTP服務(wù)器獲得準(zhǔn)確的時(shí)間信息,用于調(diào)整客戶端自身所在系統(tǒng)的時(shí)間,達(dá)到同步時(shí)間的目的。廣播模式下,SNTP服務(wù)器周期性地發(fā)送消息給指定的 IP廣播地址或者 IP多播地址。SNTP客戶端通過(guò)監(jiān)聽(tīng)這些地址來(lái)獲得時(shí)間信息

一些常見(jiàn)的 NTP服務(wù)器

  • 最常見(jiàn)的NTP服務(wù)器:www.pool.ntp.org/zone/cn
  • 其國(guó)內(nèi)地址為:cn.pool.ntp.org
  • Windows系統(tǒng)上自帶的兩個(gè):time.windows.com 和 time.nist.gov
  • Mac OS上自帶的兩個(gè):time.apple.com 和 time.asia.apple.com

圖片

2. SNTP接口說(shuō)明

設(shè)置SNTP服務(wù)器:通過(guò)IP地址設(shè)置SNTP服務(wù)器,最多支持設(shè)置3個(gè)

void sntp_setserver(unsigned char idx, ip_addr_t *addr)
//idx 服務(wù)器編號(hào),最多?持3個(gè)(0~2);0為主服務(wù)器,1和2為備用
//addr 服務(wù)器IP地址;需自行確保傳入的是合法SNTP服務(wù)器地址

設(shè)置SNTP服務(wù)器:通過(guò)域名設(shè)置SNTP服務(wù)器,最多支持設(shè)置3個(gè)

void sntp_setservername(unsigned char idx, char *server)
//idx 服務(wù)器編號(hào),最多?持3個(gè)(0~2);0號(hào)為主服務(wù)器,1和2號(hào)為備用
//server 服務(wù)器域名;需自行確保傳入的是合法SNTP服務(wù)器域名

初始化和關(guān)閉SNTP

void sntp_init(void)
void sntp_stop(void)

查詢當(dāng)前距離基準(zhǔn)時(shí)間(1970.01.01 00:00:00 GMT+8)的時(shí)間戳,單位為秒

uint32 sntp_get_current_timestamp()
//返回值:距離基準(zhǔn)時(shí)間的時(shí)間戳

查詢實(shí)際時(shí)間(GMT+8)

char* sntp_get_real_time(long t)
//t 與基準(zhǔn)時(shí)間相距的時(shí)間戳
//返回值:實(shí)際時(shí)間

3. SNTP功能實(shí)現(xiàn)

SNTP功能開(kāi)發(fā):在 freeRTOS下新建 SNTP任務(wù),實(shí)現(xiàn)定時(shí)5秒串口打印一次網(wǎng)絡(luò)時(shí)間

任務(wù)流程如下示:

圖片

實(shí)現(xiàn)步驟如下:

ESP8266_RTOS_SDK目錄下新建sntp文件夾,把ESP8266開(kāi)發(fā)環(huán)境搭建中的 app目錄下所有文件拷貝到該文件夾中

在user目錄下新建 user_sntp.c文件,并添加如下代碼

/*******************user_sntp.c********************************/
char* SntpServerNames[3] ={
"ntp1.aliyun.com",
"ntp2.aliyun.com",
"ntp3.aliyun.com"
};
//ATaskSntp任務(wù)
void ATaskSntp( void *pvParameters ){
  STATION_STATUS Status;
  uint32 time;
  do{
    Status = wifi_station_get_connect_status();
    vTaskDelay(100);   
  }while(Status != STATION_GOT_IP);
  printf("task is SNTP
");
  printf("STATION_GOT_IP!
");
  sntp_setservername(0,SntpServerNames[0]);
  sntp_setservername(1,SntpServerNames[1]);
  sntp_setservername(2,SntpServerNames[2]);
  sntp_init();
  for(;;){
    time = sntp_get_current_timestamp();
    if(time){
      printf("current date:%s
",sntp_get_real_time(time));
    }
    vTaskDelay(500);
  }
  vTaskDelete(NULL);
}
//Sntp_init 初始化
void Sntp_init(void){
  xTaskCreate(ATaskSntp, "Sntp", 512, NULL, 4, NULL);
}

在include目錄下新建 user_sntp.h文件,并添加聲明

void ATaskSntp(void *pvParameters);
void Sntp_init(void);

在user_main.c文件中的 user_init()函數(shù)下添加如下代碼

#define SSID "Hotspot"    //ESP8266要加入的無(wú)線網(wǎng)
#define PASSWORD "88888888"
void ICACHE_FLASH_ATTR
user_init(void){
  printf("SDK version:%s
", system_get_sdk_version());
  Led_init();
  wifi_set_opmode(STATION_MODE);
  struct station_config *config = (struct station_config *)        zalloc(sizeof(struct station_config));
  sprintf(config->ssid,SSID);
  sprintf(config->password,PASSWORD);
  wifi_station_set_config(config);
  free(config);
  wifi_station_set_auto_connect(TRUE);    
  Sntp_init();
  xTaskCreate(ATaskLed, "LED", 256, NULL, 2, NULL);
}

在ESP8266編譯器中編譯完成,燒寫(xiě) bin文件到 ESP8266,打開(kāi)串口助手,每5秒輸出一次實(shí)時(shí)時(shí)間

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7174

    瀏覽量

    87158
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8701

    瀏覽量

    84550
  • NTP
    NTP
    +關(guān)注

    關(guān)注

    1

    文章

    141

    瀏覽量

    13847
  • ESP8266
    +關(guān)注

    關(guān)注

    50

    文章

    959

    瀏覽量

    44545
  • sntp
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    3685
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ESP8266簡(jiǎn)易WIFI天氣時(shí)鐘

    本篇介紹了http獲取網(wǎng)絡(luò)天氣的基本原理,并通過(guò)實(shí)踐,使用ESP8266網(wǎng)獲取網(wǎng)絡(luò)天氣和
    的頭像 發(fā)表于 06-06 09:31 ?7171次閱讀
    <b class='flag-5'>ESP8266</b>簡(jiǎn)易WIFI天氣時(shí)鐘

    請(qǐng)問(wèn)如何在ESP8266上使用sntp協(xié)議連接到ssl中的服務(wù)器?

    我正在使用帶有 C 語(yǔ)言的 esp-open-sdk 的ESP8266。 我嘗試使用此代碼來(lái)獲取時(shí)間戳,但每次都失敗 - 我只得到 0 : snt
    發(fā)表于 07-19 07:30

    請(qǐng)問(wèn)STM32+ESP8266如何獲取網(wǎng)絡(luò)時(shí)間

    請(qǐng)問(wèn)STM32+ESP8266如何獲取網(wǎng)絡(luò)時(shí)間?
    發(fā)表于 01-19 06:15

    ESP8266獲取網(wǎng)絡(luò)時(shí)間的方法

    ESP8266獲取網(wǎng)絡(luò)時(shí)間1、注意事項(xiàng):本文用到了我自己的阿里云服務(wù)器,請(qǐng)各位使用的時(shí)候頻率稍微低一點(diǎn),不然壓力很大哈。2、登錄可以用esp8266
    發(fā)表于 01-25 07:17

    ESP8266使用AT指令獲取網(wǎng)絡(luò)時(shí)間的步驟

    再優(yōu)化一下,恰巧有一個(gè)正在吃灰的裝了AT固件庫(kù)的esp8266,可以讓stm32去獲取網(wǎng)絡(luò)時(shí)鐘從而校正本地時(shí)間。網(wǎng)絡(luò)時(shí)鐘用淘寶的API,它返
    發(fā)表于 08-26 15:27

    ESP8266的基礎(chǔ)知識(shí),怎么獲取網(wǎng)絡(luò)同步時(shí)間(北京時(shí)間

    要想獲取網(wǎng)絡(luò)時(shí)間首先要有提供網(wǎng)絡(luò)時(shí)間的網(wǎng)站,免費(fèi)提供網(wǎng)絡(luò)時(shí)間
    的頭像 發(fā)表于 05-09 14:33 ?6.3w次閱讀
    <b class='flag-5'>ESP8266</b>的基礎(chǔ)知識(shí),怎么<b class='flag-5'>獲取</b><b class='flag-5'>網(wǎng)絡(luò)</b>同步<b class='flag-5'>時(shí)間</b>(北京<b class='flag-5'>時(shí)間</b>)

    基于ESP8266網(wǎng)絡(luò)授時(shí)的時(shí)鐘源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是基于ESP8266網(wǎng)絡(luò)授時(shí)的時(shí)鐘源代碼免費(fèi)下載。
    發(fā)表于 09-21 08:00 ?26次下載
    基于<b class='flag-5'>ESP8266</b><b class='flag-5'>網(wǎng)絡(luò)</b>授時(shí)的時(shí)鐘源代碼免費(fèi)下載

    使用STM32和ESP8266獲取網(wǎng)絡(luò)天氣的源代碼程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用STM32和ESP8266獲取網(wǎng)絡(luò)天氣的源代碼程序免費(fèi)下載。
    發(fā)表于 01-18 08:00 ?12次下載
    使用STM32和<b class='flag-5'>ESP8266</b><b class='flag-5'>獲取</b><b class='flag-5'>網(wǎng)絡(luò)</b>天氣的源代碼程序免費(fèi)下載

    正點(diǎn)原子ESP8266獲取網(wǎng)絡(luò)天氣適配戰(zhàn)艦V3

    正點(diǎn)原子ESP8266獲取網(wǎng)絡(luò)天氣適配戰(zhàn)艦V3
    發(fā)表于 04-06 14:36 ?25次下載
    正點(diǎn)原子<b class='flag-5'>ESP8266</b><b class='flag-5'>獲取</b><b class='flag-5'>網(wǎng)絡(luò)</b>天氣適配戰(zhàn)艦V3

    基于STM32的ESP8266天氣時(shí)鐘(2)--------MCU獲取天氣數(shù)據(jù)

    stm32通過(guò)ESP8266模塊獲取天氣,時(shí)間
    發(fā)表于 11-18 18:36 ?38次下載
    基于STM32的<b class='flag-5'>ESP8266</b>天氣時(shí)鐘(2)--------MCU<b class='flag-5'>獲取</b>天氣數(shù)據(jù)

    ESP8266獲取網(wǎng)絡(luò)時(shí)間、獲取天氣

    ESP8266獲取網(wǎng)絡(luò)時(shí)間1、注意事項(xiàng):本文用到了我自己的阿里云服務(wù)器,請(qǐng)各位使用的時(shí)候頻率稍微低一點(diǎn),不然壓力很大哈。2、登錄可以用esp8266
    發(fā)表于 11-30 16:21 ?12次下載
    <b class='flag-5'>ESP8266</b><b class='flag-5'>獲取</b><b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>時(shí)間</b>、<b class='flag-5'>獲取</b>天氣

    ESP8266通過(guò)MQTT協(xié)議連接ONENET

    將介紹通過(guò)MQTT協(xié)議連接ONENET,實(shí)現(xiàn)ESP8266與ONENET平臺(tái)數(shù)據(jù)交互一、設(shè)計(jì)目標(biāo)實(shí)現(xiàn)ESP8266通過(guò)MQTT協(xié)議連接ONENET實(shí)現(xiàn)DHT11溫濕度數(shù)據(jù)的
    發(fā)表于 01-12 19:58 ?53次下載
    <b class='flag-5'>ESP8266</b>通過(guò)MQTT<b class='flag-5'>協(xié)議</b>連接ONENET

    使用Arduino IDE創(chuàng)建ESP8266網(wǎng)絡(luò)服務(wù)器

    電子發(fā)燒友網(wǎng)站提供《使用Arduino IDE創(chuàng)建ESP8266網(wǎng)絡(luò)服務(wù)器.zip》資料免費(fèi)下載
    發(fā)表于 02-02 16:58 ?1次下載
    使用Arduino IDE創(chuàng)建<b class='flag-5'>ESP8266</b><b class='flag-5'>網(wǎng)絡(luò)</b>服務(wù)器

    使用ESP8266 OLED和Visuino從NIST TIME服務(wù)器獲取日期和時(shí)間

    電子發(fā)燒友網(wǎng)站提供《使用ESP8266 OLED和Visuino從NIST TIME服務(wù)器獲取日期和時(shí)間.zip》資料免費(fèi)下載
    發(fā)表于 06-28 09:55 ?0次下載
    使用<b class='flag-5'>ESP8266</b> OLED和Visuino從NIST TIME服務(wù)器<b class='flag-5'>獲取</b>日期和<b class='flag-5'>時(shí)間</b>

    ESP8266網(wǎng)絡(luò)天氣時(shí)鐘OLED顯示

    基于ESP8266實(shí)現(xiàn)網(wǎng)絡(luò)獲取天氣和時(shí)鐘并OLED顯示
    的頭像 發(fā)表于 06-28 04:46 ?606次閱讀
    <b class='flag-5'>ESP8266</b><b class='flag-5'>網(wǎng)絡(luò)</b>天氣時(shí)鐘OLED顯示