前言
提示:ESP32模块RTC的精度存在一定的缺陷,每过7:45h便会有秒级别的误差溢出,所以esp上,官方建议每隔7小时进行一次时间的校准。
一、WIFI联网
ESP32支持WIFI网络
二、通过网络同步时间
1.创建代码
代码如下(示例):
import ntptime
import network,time
from machine import RTC,Pin
rtc = RTC()
print("同步前本地时间:%s" %str(time.localtime()))
led=Pin(2,Pin.OUT)
# 联WIFI
def WIFI_Connect():
wlan = network.WLAN(network.STA_IF) #STA模式
wlan.active(True) #激活接口
start_time=time.time() #记录时间做超时判断
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('WIFI_NAME', 'WIFI_password') #输入WIFI账号密码
while not wlan.isconnected():
if time.time()-start_time > 15 :
print('WIFI Connected Timeout!')
break
if wlan.isconnected():
print('connected!')
print('network information:', wlan.ifconfig())
# 同步时间
def sync_ntp():
ntptime.NTP_DELTA = 3155644800 # 可选 UTC+8偏移时间(秒),不设置就是UTC0
ntptime.host = 'ntp1.aliyun.com' # 可选,ntp服务器,默认是"pool.ntp.org"
try:
ntptime.settime() # 修改设备时间,到这就已经设置好了
except:
for i in range(6):
led.value(1) #turn off 0是亮
time.sleep(0.1)
led.value(0)
time.sleep(0.1)
print('同步失败')
if __name__ == '__main__':
WIFI_Connect()
sync_ntp()
print(rtc.datetime())
print("同步后本地时间:%s" %str(time.localtime()))
2.保存运行
代码运行如下(示例):
>>> %Run -c $EDITOR_CONTENT
同步前本地时间:(2022, 1, 2, 0, 54, 7, 6, 2)
connected!
network information: ('192.168.123.18', '255.255.255.0', '192.168.123.1', '192.168.123.1')
(2022, 1, 2, 6, 0, 54, 10, 303)
同步后本地时间:(2022, 1, 2, 0, 54, 10, 6, 2)
总结
提示:由于是通过网络同步时间,为防止网络不稳定,需要加入容错处理。