在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用SNTP協議獲取ESP8266網絡時間

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

1. NTP和SNTP協議

NTP是網絡時間協議(Network Time Protocol),用來同步網絡設備(如PC、手機)的時間的協議

SNTP由 NTP改編而來(簡單網絡時間協議,Simple NTP)大大簡化了 NTP協議,同時也能保證時間達到一定的精確度。在實際應用中,SNTP協議主要被用來同步因特網上計算機的時間

SNTP協議采用客戶端/服務器的工作方式,可以采用單播(點對點)或者廣播(一點對多點)模式操作。SNTP服務器通過接收 GPS信號或自帶的原子鐘作為系統的時間基準。單播模式下,SNTP客戶端能夠通過定期訪問 SNTP服務器獲得準確的時間信息,用于調整客戶端自身所在系統的時間,達到同步時間的目的。廣播模式下,SNTP服務器周期性地發送消息給指定的 IP廣播地址或者 IP多播地址。SNTP客戶端通過監聽這些地址來獲得時間信息

一些常見的 NTP服務器

  • 最常見的NTP服務器:www.pool.ntp.org/zone/cn
  • 其國內地址為:cn.pool.ntp.org
  • Windows系統上自帶的兩個:time.windows.com 和 time.nist.gov
  • Mac OS上自帶的兩個:time.apple.com 和 time.asia.apple.com

圖片

2. SNTP接口說明

設置SNTP服務器:通過IP地址設置SNTP服務器,最多支持設置3個

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

設置SNTP服務器:通過域名設置SNTP服務器,最多支持設置3個

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

初始化和關閉SNTP

void sntp_init(void)
void sntp_stop(void)

查詢當前距離基準時間(1970.01.01 00:00:00 GMT+8)的時間戳,單位為秒

uint32 sntp_get_current_timestamp()
//返回值:距離基準時間的時間戳

查詢實際時間(GMT+8)

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

3. SNTP功能實現

SNTP功能開發:在 freeRTOS下新建 SNTP任務,實現定時5秒串口打印一次網絡時間

任務流程如下示:

圖片

實現步驟如下:

ESP8266_RTOS_SDK目錄下新建sntp文件夾,把ESP8266開發環境搭建中的 app目錄下所有文件拷貝到該文件夾中

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

/*******************user_sntp.c********************************/
char* SntpServerNames[3] ={
"ntp1.aliyun.com",
"ntp2.aliyun.com",
"ntp3.aliyun.com"
};
//ATaskSntp任務
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()函數下添加如下代碼

#define SSID "Hotspot"    //ESP8266要加入的無線網
#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編譯器中編譯完成,燒寫 bin文件到 ESP8266,打開串口助手,每5秒輸出一次實時時間

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    7614

    瀏覽量

    89899
  • 服務器
    +關注

    關注

    12

    文章

    9609

    瀏覽量

    87035
  • NTP
    NTP
    +關注

    關注

    1

    文章

    209

    瀏覽量

    14285
  • ESP8266
    +關注

    關注

    50

    文章

    963

    瀏覽量

    46603
  • sntp
    +關注

    關注

    0

    文章

    5

    瀏覽量

    3771
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    ESP8266簡易WIFI天氣時鐘

    本篇介紹了http獲取網絡天氣的基本原理,并通過實踐,使用ESP8266獲取網絡天氣和
    的頭像 發表于 06-06 09:31 ?7951次閱讀
    <b class='flag-5'>ESP8266</b>簡易WIFI天氣時鐘

    通過void sntp_set_system_time(sntp_time_t GMT_Time);設置后,通過什么api接口獲取本地的時間

    _time_t GMT_Time);這個函數。按照我的理解,應該是獲取網絡sntp時間后,通過void sntp_set_system_t
    發表于 07-12 07:29

    請問如何在ESP8266上使用sntp協議連接到ssl中的服務器?

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

    請問STM32+ESP8266如何獲取網絡時間

    請問STM32+ESP8266如何獲取網絡時間
    發表于 01-19 06:15

    ESP8266獲取網絡時間的方法

    ESP8266獲取網絡時間1、注意事項:本文用到了我自己的阿里云服務器,請各位使用的時候頻率稍微低一點,不然壓力很大哈。2、登錄可以用esp8266
    發表于 01-25 07:17

    ESP8266使用AT指令獲取網絡時間的步驟

    再優化一下,恰巧有一個正在吃灰的裝了AT固件庫的esp8266,可以讓stm32去獲取網絡時鐘從而校正本地時間網絡時鐘用淘寶的API,它返
    發表于 08-26 15:27

    ESP8266的基礎知識,怎么獲取網絡同步時間(北京時間

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

    基于ESP8266網絡授時的時鐘源代碼免費下載

    本文檔的主要內容詳細介紹的是基于ESP8266網絡授時的時鐘源代碼免費下載。
    發表于 09-21 08:00 ?28次下載
    基于<b class='flag-5'>ESP8266</b><b class='flag-5'>網絡</b>授時的時鐘源代碼免費下載

    使用STM32和ESP8266獲取網絡天氣的源代碼程序免費下載

    本文檔的主要內容詳細介紹的是使用STM32和ESP8266獲取網絡天氣的源代碼程序免費下載。
    發表于 01-18 08:00 ?12次下載
    使用STM32和<b class='flag-5'>ESP8266</b><b class='flag-5'>獲取</b><b class='flag-5'>網絡</b>天氣的源代碼程序免費下載

    正點原子ESP8266獲取網絡天氣適配戰艦V3

    正點原子ESP8266獲取網絡天氣適配戰艦V3
    發表于 04-06 14:36 ?55次下載
    正點原子<b class='flag-5'>ESP8266</b><b class='flag-5'>獲取</b><b class='flag-5'>網絡</b>天氣適配戰艦V3

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

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

    ESP8266獲取網絡時間獲取天氣

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

    ESP8266通過MQTT協議連接ONENET

    將介紹通過MQTT協議連接ONENET,實現ESP8266與ONENET平臺數據交互一、設計目標實現ESP8266通過MQTT協議連接ONENET實現DHT11溫濕度數據的
    發表于 01-12 19:58 ?54次下載
    <b class='flag-5'>ESP8266</b>通過MQTT<b class='flag-5'>協議</b>連接ONENET

    使用Arduino IDE創建ESP8266網絡服務器

    電子發燒友網站提供《使用Arduino IDE創建ESP8266網絡服務器.zip》資料免費下載
    發表于 02-02 16:58 ?1次下載
    使用Arduino IDE創建<b class='flag-5'>ESP8266</b><b class='flag-5'>網絡</b>服務器

    ESP8266網絡天氣時鐘OLED顯示

    基于ESP8266實現網絡獲取天氣和時鐘并OLED顯示
    的頭像 發表于 06-28 04:46 ?1965次閱讀
    <b class='flag-5'>ESP8266</b><b class='flag-5'>網絡</b>天氣時鐘OLED顯示
    主站蜘蛛池模板: 亚洲一区二区免费 | 日本吻胸抓胸激烈视频网站 | 日韩欧美高清一区 | 免费欧洲美女与动zooz | 亚洲国产综合人成综合网站00 | 午夜刺激爽爽视频免费观看 | 黑人性xx | 另类图片综合网 | 四虎国产一区二区三区 | 免费看黄色毛片 | 亚洲精品一卡2卡3卡三卡四卡 | 人人添人人澡人人澡人人人爽 | 天天视频国产精品 | 99热久| 国产毛片农村妇女aa板 | 四虎影视永久在线精品免费播放 | 亚洲1页 | 天天看天天干天天操 | 中文在线天堂网www 中文在线资源链接天堂 | 国产精品青草久久久久福利99 | 亚洲另类电击调教在线观看 | 午夜黄色剧场 | 国产在线精品观看一区 | 特级一级全黄毛片免费 | 国产女同| 色我网站| 日日干天天爽 | 人人草人人爽 | 成年女人色费视频免费 | 色色激情网 | 国产乱码一区二区三区四川人 | www.男人| 欧美性猛交aa一级 | 午夜国产精品免费观看 | 色婷婷久久综合中文久久蜜桃 | www.4虎| 欧美视频三区 | 曰本女人一级毛片看一级毛 | 美国bj69 video18| 免费观看黄色网页 | 一级特黄aaa大片29 |