【Micropython】ESP8266通过NTP同步本地RTC时间

【Micropython】ESP8266通过NTP同步本地RTC时间


📋实时时钟 (RTC)

  • 🔖RTC属于machine模块中的子类。
  • datetime([value]): 获取或设置当前时间。如果没有指定参数,则返回当前时间。如果指定了参数,格式为一个时间元组 (year, month, day, weekday, hours, minutes, seconds, subseconds),则将这个时间设置到 RTC 上。

  • memory([index[, value]]): 获取或设置内置 RTC 芯片的备份 RAM 中的字节数据。备份 RAM 的大小取决于具体的 ESP8266 硬件型号,通常为 256 字节或 512 字节。备份 RAM 可以用于保存一些不易丢失的数据,例如设备 ID、配置信息、用户数据等。如果没有指定参数,则返回备份 RAM 的全部数据。如果指定了 index 参数,则返回备份 RAM 中从 index 开始的所有数据。如果同时指定了 index 和 value 参数,则将 value 写入备份 RAM 中从 index 开始的所有位置。

  • battery_voltage(): 获取内置 RTC 芯片的电池电压值。由于 ESP8266 内置 RTC 没有连接外部电源,因此需要使用备用电池来维持 RTC 的运行,一般使用 CR2032、CR1225 或类似型号的电池。这个函数将返回当前备用电池的电压值,单位为 V。

  • alarm(id, time=None, mode=RTC.ALARM_SINGLE, callback=None, wakeup=RTC.ALARM_NOWAKEUP): 设置 RTC 的闹钟。这个函数可以设置 2 个不同的闹钟,分别用 id=0 和 id=1 表示。如果不是用 id 参数指定的某个闹钟,则将默认使用 id=0 的闹钟。time 参数表示闹钟触发时间,格式和取值范围与 datetime() 函数的参数相同。mode 参数表示闹钟的模式,取值为 RTC.ALARM_SINGLE 或 RTC.ALARM_REPEAT。如果设置为 RTC.ALARM_SINGLE,则这个闹钟只会在指定的时间点触发一次;如果设置为 RTC.ALARM_REPEAT,则这个闹钟会在每天的指定时间点触发。callback 参数指定闹钟触发时的回调函数,函数原型为:callback(id),其中 id 是当前触发的闹钟 ID。如果未指定回调函数,则默认会将系统唤醒。wakeup 参数表示是否允许闹钟触发时唤醒系统。如果将 wakeup 设置为 RTC.ALARM_WAKEUP,则允许闹钟触发时唤醒系统;如果将其设置为 RTC.ALARM_NOWAKEUP,则不允许唤醒系统,默认值为 RTC.ALARM_NOWAKEUP。

  • cancel(id=0): 取消 RTC 中的指定闹钟。如果没有指定 id 参数,则默认取消 id=0 的闹钟。

📓获取本地RTC时间程序代码

from machine import RTC
from machine import I2C, Pin
import time  # 用于调用延时sleep函数
led = Pin(2,Pin.OUT)	#板载led

# 获取本地RTC
rtc = RTC()

while True:
    
    tm = rtc.datetime()  # 从RTC获取本地时间    
    print("Local time: ", tm)  # 打印本地时间
    led.value(not led.value())        # 反转LED状态
    time.sleep(1)                     # 休眠1

在这里插入图片描述

📗设置本地RTC时间代码

from machine import RTC, Pin
import time  # 用于调用延时sleep函数
led = Pin(2,Pin.OUT)	#板载led

rtc = RTC()
rtc.datetime((2023, 4, 19, 2, 7, 48, 0, 0)) # set a specific date and time

while True:
    
    tm = rtc.datetime()  # 从RTC获取本地时间    
    print("Local time: ", tm)  # 打印本地时间
    led.value(not led.value())        # 反转LED状态
    time.sleep(1)                     # 休眠1

在这里插入图片描述

📖通过引入ntptime模块从NTP获取时间设置RTC

  • 🔖由于时区的差异,在获取的UTC0时间基础上加8个小时。
import machine
import network
import ntptime
#import utime

# Set up the RTC
rtc = machine.RTC()

# 配置wifi
ssid = "######"
password = "********"
wifi = network.WLAN(network.STA_IF)
if not wifi.isconnected():
    wifi.active(True)
    wifi.connect(ssid, password)
    while not wifi.isconnected():
        pass
print("Connected to Wi-Fi")

# 从NTP服务器同时时间到RTC本地
ntptime.settime()
print("Time set successfully")

# Get the current date and time from RTC
(year, month, day, weekday, hours, minutes, seconds, subseconds) = rtc.datetime()
print("Current date/time: %s/%s/%s %s:%s:%s" % (day, month, year, hours+8, minutes, seconds))

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值