第1步:所需組件
以下是該項目所需組件的列表,價格絕對最低!如果您發(fā)現(xiàn)某個地方便宜一些,請給我留言!
ESP8266-01?(http://goo.gl/o4fAfJ)
GPS模塊?(http://goo.gl/M8Y6pR)
USB至TTL接口?(http://goo.gl/da82Uc)
步驟2:沒有Internet連接的無線NTP服務(wù)器
沒有Internet連接的無線NTP服務(wù)器
如果需要非互聯(lián)網(wǎng)可靠的時間源,有多種選擇:無線電時間信號,原子鐘,gps等。
時間信號接收器是一種低成本的選擇,但其有效性取決于距離發(fā)射站有多近。另外,根據(jù)國家或地區(qū)的不同,頻率也不盡相同,因此并不是每個站點的通用替代方案。如果需要非常高的精度,則
原子鐘是最佳選擇。不久前,原子鐘很大,不是很輕便,也很耗電。但是,隨著小型化的發(fā)展,現(xiàn)在有可能獲得一個芯片大小的原子鐘,而該原子鐘不需要花費幾毫瓦就能工作。如果成本不是決定因素(價格在千美元左右),則可以選擇!
全球定位系統(tǒng)其他國家/地區(qū)的GPS或等效系統(tǒng)(GLONASS,GALILEO,BEIDOU)是一種中間選擇,它比廣播時間信號帶來更大的靈活性(嗯,有些晴朗的天空是必需的),并且價格比原子鐘便宜得多。
如果需要非常高的耐用性(例如制造一個自制的核反應(yīng)堆),或者如果要連接大量執(zhí)行數(shù)百萬秒鐘請求的設(shè)備,則首選已經(jīng)提出的解決方案。但是,如果出于實驗?zāi)康南胍环N更簡單的方法,并且可以容忍一秒鐘的偏移量,則可以使用anesp8266-01和一個GPS模塊構(gòu)建一個約10美元的支出,也可以使用具有串行NMEA輸出的手持GPS。
第3步:日期和時間協(xié)議:白天,時間和NTP
日期和時間協(xié)議:白天,時間和NTP
自從第一臺實用計算機開始工作以來,使它們保持時間同步的想法就在不斷發(fā)展。為此有很多協(xié)議,其中一些是:白天,時間和NTP。
白天協(xié)議:
此協(xié)議在RFC867中進行了描述。它是最古老的,現(xiàn)在幾乎沒有使用過。某些時間服務(wù)器仍然出于教育目的提供它,并作為仍然使用它的非常老舊的硬件/軟件應(yīng)用程序的替代。該協(xié)議在端口13上工作,并且以明文形式發(fā)送時間/日期信息。對于所使用的格式?jīng)]有特別的建議,唯一的好處是該信息可以被人類讀取。
時間協(xié)議:
此協(xié)議在RFC868中進行了描述,并在端口37上運行。時間/日期信息編碼為從00:00開始經(jīng)過的秒數(shù): 1970年1月1日的00(午夜)以32位數(shù)字表示。
NTP協(xié)議:
NTP被認為可以帶來時間/日期信息,在RFC5905中進行了描述,其精度約為毫秒。基于改進的Marzullo算法來計算信息包的可變延遲。該協(xié)議使用非常廣泛,信息包會通過UDP連接在端口123上傳輸以最大程度地減少處理時間。
步驟4:ESP8266 + GPS
ESP8266 + GPS
該項目是對Ray Burnette的Tardis Time的改進,它的硬件元素基本相同,但是不發(fā)送時間/日期信息使用標(biāo)準協(xié)議,因此必須在每個要同步的不同設(shè)備中開發(fā)一個小型偵聽器應(yīng)用程序。該項目利用了個人計算機中的內(nèi)置defacto時間同步應(yīng)用程序raspberry pi,ESP8266的NTP客戶端庫可以使用該項目。
使用的GPS模塊是EM-506,沒有PPS信號。同樣,具有RS232 NMEA輸出的手持GPS接收器也可以用于相同的目的。 ESP8266使用SDK版本1.5.2進行編程。別忘了編程需要某種USB到TTL 3V接口!該軟件可以描述為3個主要部分:
串行數(shù)據(jù)接收
ESP8266的UART具有最大容量為256個字符和多個源的硬件FIFO。的中斷。程序中使用了字符接收閾值和超時中斷。
字符閾值中斷用于在某些字符到達UART的FIFO時自動觸發(fā)功能。在這種特殊情況下,由于GPS需要NMEA字符串,并且它們的長度約為30-80個字符,因此使用了它們之間的閾值。此函數(shù)從FIFO讀取字符并將其寫入循環(huán)緩沖區(qū)。
當(dāng)僅接收到幾個字符(小于閾值)并且在確定的時間間隔內(nèi)未檢測到更多字符時,將使用超時中斷。在這種特殊情況下,編程的超時時間為10個字節(jié)。
此函數(shù)需要快速執(zhí)行以盡快從中斷中返回,因此此處無需進行任何處理,只需進行讀取和復(fù)制即可。
字符串解析,實際時間/日期和微秒率校正
串行ISR將接收到的字符寫入循環(huán)緩沖區(qū),最大大小應(yīng)為循環(huán)緩沖區(qū)長度的兩倍。要解析的最長NMEA字符串。在這種情況下,以$ GPRMC標(biāo)頭開頭的字符串。此特定字符串包含時間/日期信息。一旦使用SDK system_os_post提供的消息傳遞系統(tǒng)將所有接收到的字符寫入循環(huán)緩沖區(qū),ISR就會調(diào)用處理字符串的函數(shù)。
NMEA字符串的長度是可變的,因此應(yīng)避免使用絕對字符位置來解析值。對于特定類型的字符串,定界符的數(shù)量在這種情況下以逗號“,”為常數(shù),并用于提取時間和日期值。字符串示例如下:
$ GPRMC,201705.000,A,0000.0000,N,00000.0000,W,1.10,265.50,120816 ,,, A * 79
在逗號之間” ,”定界符#1 y#2位于字符串201705.000,表示20小時17分鐘05,000秒。在逗號“,”定界符#9 y#10之間放置字符串120816,表示日期12,月份08(八月)和年份16(2016)。此外,還存儲了系統(tǒng)的微秒級環(huán)形計數(shù)器(不是來自GPS),以進行調(diào)整并提供更準確的時間戳。
傳遞數(shù)據(jù),套接字
創(chuàng)建了三個獨立的套接字來偵聽任何類型的服務(wù):白天,時間或NTP。對于白天,當(dāng)接收到查詢時,將從保存日期和時間信息的全局變量中讀取數(shù)據(jù),并將其轉(zhuǎn)換為人類可讀的文本字符串。對于時間服務(wù)情況,日期和時間信息應(yīng)該以適當(dāng)?shù)姆绞骄幋a,幫助功能SecondsSince1900可以完成任務(wù)。
對于NTP,應(yīng)暫時存儲收到的數(shù)據(jù)包,一些信息需要修改/更新并作為答案發(fā)送回去。由于項目中使用的GPS僅每秒帶來一次時間/日期信息,并且在該間隔的中間可能會發(fā)生NTP查詢,為緩解此問題,請使用system_get_time( ),每次接收到新的GPS幀。接收到NTP查詢后,將再次讀取該計數(shù)器,并使用這兩個值可以估算出上一次GPS更新和NTP查詢接收之間的時間。將此時間添加到全局變量中存儲的時間(每秒更新一次)中,并發(fā)送應(yīng)答NTP數(shù)據(jù)包。
步驟5:測試和結(jié)論
測試和結(jié)論
-使用標(biāo)準應(yīng)用(在這種特定的情況下為Linux應(yīng)用)來測試在ESP8266中編程的時間服務(wù),例如netca, rdate,ntpdate。
-由于其體積小,功耗低和無線連接性,可以將其安裝在天空更清晰的地方:窗戶,屋頂?shù)雀浇?/p>
-使用帶有PPS的GPS,可以實現(xiàn)更高的精度。
-可以通過太陽能供電(夜間使用電池),以獲得完全無線的連續(xù)操作系統(tǒng)。
-根據(jù)GPS的類型,必須使用某些轉(zhuǎn)換的信號電平,例如5V TTL到3V TTL或RS232到3V TTL。
責(zé)任編輯:wv
-
服務(wù)器
+關(guān)注
關(guān)注
13文章
9795瀏覽量
88001 -
NTP
+關(guān)注
關(guān)注
1文章
226瀏覽量
14495 -
ESP8266
+關(guān)注
關(guān)注
51文章
965瀏覽量
47423
發(fā)布評論請先 登錄
用esp8266 at device做一個網(wǎng)頁服務(wù)器 ,運行webnet_test顯示錯誤怎么解決?
NTP服務(wù)器的性能優(yōu)化方法
NTP服務(wù)器故障排除技巧 NTP服務(wù)器與網(wǎng)絡(luò)安全
NTP服務(wù)器配置步驟 NTP服務(wù)器服務(wù)的好處
ESP8266 通過 MQTT 協(xié)議實現(xiàn) LED 的遠程控制

評論