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é)議采用客戶(hù)端/服務(wù)器的工作方式,可以采用單播(點(diǎn)對(duì)點(diǎn))或者廣播(一點(diǎn)對(duì)多點(diǎn))模式操作。SNTP服務(wù)器通過(guò)接收 GPS信號(hào)或自帶的原子鐘作為系統(tǒng)的時(shí)間基準(zhǔn)。單播模式下,SNTP客戶(hù)端能夠通過(guò)定期訪問(wèn) SNTP服務(wù)器獲得準(zhǔn)確的時(shí)間信息,用于調(diào)整客戶(hù)端自身所在系統(tǒng)的時(shí)間,達(dá)到同步時(shí)間的目的。廣播模式下,SNTP服務(wù)器周期性地發(fā)送消息給指定的 IP廣播地址或者 IP多播地址。SNTP客戶(hù)端通過(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)
查詢(xún)當(dāng)前距離基準(zhǔn)時(shí)間(1970.01.01 00:00:00 GMT+8)的時(shí)間戳,單位為秒
uint32 sntp_get_current_timestamp()
//返回值:距離基準(zhǔn)時(shí)間的時(shí)間戳
查詢(xún)實(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í)間
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7540瀏覽量
88649 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9308瀏覽量
86072 -
NTP
+關(guān)注
關(guān)注
1文章
181瀏覽量
13962 -
ESP8266
+關(guān)注
關(guān)注
50文章
962瀏覽量
45338 -
sntp
+關(guān)注
關(guān)注
0文章
5瀏覽量
3722
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
ESP8266簡(jiǎn)易WIFI天氣時(shí)鐘
![<b class='flag-5'>ESP8266</b>簡(jiǎn)易WIFI天氣時(shí)鐘](https://file.elecfans.com//web2/M00/47/83/poYBAGKczeKAO2MGAAB9lr7AgGY096.png)
請(qǐng)問(wèn)如何在ESP8266上使用sntp協(xié)議連接到ssl中的服務(wù)器?
請(qǐng)問(wèn)STM32+ESP8266如何獲取網(wǎng)絡(luò)時(shí)間?
ESP8266獲取網(wǎng)絡(luò)時(shí)間的方法
ESP8266使用AT指令獲取網(wǎng)絡(luò)時(shí)間的步驟
ESP8266的基礎(chǔ)知識(shí),怎么獲取網(wǎng)絡(luò)同步時(shí)間(北京時(shí)間)
![<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>)](https://file1.elecfans.com//web2/M00/A7/46/wKgZomUMQ4KANjZZAAAQaHGCyTg658.png)
基于ESP8266網(wǎng)絡(luò)授時(shí)的時(shí)鐘源代碼免費(fèi)下載
![基于<b class='flag-5'>ESP8266</b><b class='flag-5'>網(wǎng)絡(luò)</b>授時(shí)的時(shí)鐘源代碼免費(fèi)下載](https://file.elecfans.com/web1/M00/C7/09/o4YBAF9oVSmAP5KKAAKOaBnavLI933.png)
使用STM32和ESP8266獲取網(wǎng)絡(luò)天氣的源代碼程序免費(fèi)下載
![使用STM32和<b class='flag-5'>ESP8266</b><b class='flag-5'>獲取</b><b class='flag-5'>網(wǎng)絡(luò)</b>天氣的源代碼程序免費(fèi)下載](https://file.elecfans.com/web1/M00/DB/61/pIYBAGAFOiOAIMuSAATUSzVzu4A319.png)
正點(diǎn)原子ESP8266獲取網(wǎng)絡(luò)天氣適配戰(zhàn)艦V3
![正點(diǎn)原子<b class='flag-5'>ESP8266</b><b class='flag-5'>獲取</b><b class='flag-5'>網(wǎng)絡(luò)</b>天氣適配戰(zhàn)艦V3](https://file.elecfans.com/web1/M00/E9/88/pIYBAGBsAa2AZTOEAAFXajDLAyU093.png)
基于STM32的ESP8266天氣時(shí)鐘(2)--------MCU獲取天氣數(shù)據(jù)
![基于STM32的<b class='flag-5'>ESP8266</b>天氣時(shí)鐘(2)--------MCU<b class='flag-5'>獲取</b>天氣數(shù)據(jù)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP8266獲取網(wǎng)絡(luò)時(shí)間、獲取天氣
![<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>天氣](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP8266通過(guò)MQTT協(xié)議連接ONENET
![<b class='flag-5'>ESP8266</b>通過(guò)MQTT<b class='flag-5'>協(xié)議</b>連接ONENET](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用Arduino IDE創(chuàng)建ESP8266網(wǎng)絡(luò)服務(wù)器
![使用Arduino IDE創(chuàng)建<b class='flag-5'>ESP8266</b><b class='flag-5'>網(wǎng)絡(luò)</b>服務(wù)器](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用ESP8266 OLED和Visuino從NIST TIME服務(wù)器獲取日期和時(shí)間
![使用<b class='flag-5'>ESP8266</b> OLED和Visuino從NIST TIME服務(wù)器<b class='flag-5'>獲取</b>日期和<b class='flag-5'>時(shí)間</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論