2018年2月2日 星期五

DIY - ESP8266:ESP-12F SNTP 簡單網路時間協定函數庫(六十二)

DIY - ESP8266:ESP-12F SNTP 簡單網路時間協定函數庫(六十二):

在 ESP8266 可使用 SNTP (簡單網路時間協定)接口 ,SNTP 接口函數位于 /ESP8266_NONOS_SDK/include/sntp.h。

ESP8266 SNTP接口函數
在 ESP8266 中使用 SNTP 介面獲取時間,主要有以下函數:

功能 - sntp_setserver
原型:void sntp_setserver(unsigned char idx, ip_addr_t *addr)
參數:unsigned char idx :SNTP 伺服器口編號,最多支持3個 SNTP 伺服器口(0~2);0 號為主要伺服器,1號和 2號為備用伺服器。 ip_addr_t *addr :IP 地址;用戶需自行確保,傳入的是合法 SNTP 伺服器。
說明:通過 IP 位址設置 SNTP 伺服器,一共最多支持設置 3 個 SNTP 伺服器。
返回:無

功能 - sntp_getserver
原型:ip_addr_t sntp_getserver(unsigned char idx)
參數:unsigned char idx:SNTP 伺服器口編號,最多可支援 3 個 SNTP 伺服器口(0 ~ 2)
說明:查詢 SNTP 伺服器的 IP 位址,對應的設置接口為:sntp_setserver
返回:IP 地址

功能 - sntp_setservername
原型:void sntp_setservername(unsigned char idx, char *server)
參數:unsigned char idx :SNTP 伺服器編號,最多支持3個SNTP伺服器口(0 ~ 2);0號為主要伺服器,1號和 2號為備用伺服器。 char *server :功能變數名稱;用戶需自行確保,傳入的是合法 SNTP 伺服器。
說明:通過功能變數名稱設置 SNTP 伺服器,一共最多支持設置 3 個 SNTP 伺服器。
返回:無

功能 - sntp_getservername
原型:char * sntp_getservername(unsigned char idx)
參數:unsigned char idx:SNTP 伺服器口編號,最多可支援 3 個 SNTP 伺服器口(0 ~ 2)
說明:查詢 SNTP 伺服器口的功能變數名稱,僅支持查詢通過 sntp_setservername 設置的 SNTP 伺服器口
返回:伺服器口功能變數名稱

功能 - sntp_init;
原型:void sntp_init(void)
參數:無
說明:SNTP 初始化
返回:無

功能 - sntp_stop
原型:void sntp_stop(void)
參數:無
說明:SNTP 關閉
返回:無

功能 - sntp_get_current_timestamp
原型:uint32 sntp_get_current_timestamp()
參數:無
說明:查詢當前距離基準時間( 1970.01.01 00: 00: 00 GMT + 8)的時間戳記,單位:秒 返回:距離基準時間的時間戳記

功能 - sntp_get_real_time
原型:char* sntp_get_real_time(long t)
參數:long t - 與基準時間相距的時間戳記
說明:查詢實際時間( GMT + 8)
返回:實際時間

功能 - sntp_set_timezone
原型:bool sntp_set_timezone (sint8 timezone)
參數:sint8 timezone:時區值,參數範圍:-11 ~ 13
說明:設置時區資訊,注意調用本接口前,請先調用 sntp_stop
返回:true:成功,false:失敗
範例:sntp_stop(); if( true == sntp_set_timezone(-5) ) { sntp_init();}

功能 - sntp_get_timezone
原型:sint8 sntp_get_timezone (void)
參數:無
說明:查詢時區資訊
返回:返回時區值,參數範圍:-11 ~ 13 SNTP

範例 – Enable SNTP:
ip_addr_t *addr = (ip_addr_t *)os_zalloc(sizeof(ip_addr_t));
sntp_setservername(0, ”us.pool.ntp.org”); // set server 0 by domain name
sntp_setservername(1, ”ntp.sjtu.edu.cn”); // set server 1 by domain name
ipaddr_aton(“210.72.145.44”, addr);
sntp_setserver(2, addr); // set server 2 by IP address
sntp_init();
os_free(addr);

SNTP 範例 – Set a timer to check sntp timestamp:
LOCAL os_timer_t sntp_timer;
os_timer_disarm(&sntp_timer);
os_timer_setfn(&sntp_timer, (os_timer_func_t *)user_check_sntp_stamp, NULL);
os_timer_arm(&sntp_timer, 100, 0);

SNTP 範例 – timer callback:
void ICACHE_FLASH_ATTR user_check_sntp_stamp(void *arg){
uint32 current_stamp;
current_stamp = sntp_get_current_timestamp();
if(current_stamp == 0){
os_timer_arm(&sntp_timer, 100, 0);
} else{
os_timer_disarm(&sntp_timer);
os_printf(“sntp: %d, %s \n”,current_stamp,
sntp_get_real_time(current_stamp));
}
}

2018年 2月 2日 天氣報告
氣溫:9.8@ 19:50
相對濕度:百分之 65%
天氣:多雲

沒有留言:

張貼留言