当前位置: 首页 > article >正文

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

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


  • 📌相关篇《【MicroPython esp8266】固件烧写教程》
  • ✨本案例基于Thonny平台开发。✨

📋实时时钟 (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))

在这里插入图片描述


http://www.kler.cn/a/14413.html

相关文章:

  • Android之 Bitmap使用
  • 022:Mapbox GL 加载geojson数据,形成热力图,自定义样式
  • Go语言面试题--进阶语法(32)
  • MySQL的binlog原理和它的几种使用方法
  • Echarts渲染行政区划,实现聚焦高亮交互
  • 写在AWE 2023前夕:华为全屋智能将重构家居智能化体验
  • 4.数据结构(0x3f:从周赛中学算法 2022下)
  • 太太太太太卷了,累了
  • SpringBoot常用注解说明
  • JavaSE 09 File 类 IO 流 - Part 03
  • 保姆级教程|昨晚撸了一个ChatGPT群聊机器人
  • C++智能指针unique_ptr
  • tp6 php 用chatgpt写的防爬技术
  • 高效办公——Excel表格-03篇(Excel常用快捷键 以及 Excel快捷键结合公式的各种常见的办公例子)
  • webwork详细攻略,在vue中使用和加载静态文件
  • 加强人工智能共性技术研发与产业化协同发展
  • Java项目上线之云服务器环境篇(三)——MySQL的安装与配置
  • 软件测试概念篇(下)|开发模型与测试模型
  • 偏好强化学习概述
  • ajax写法和json的知识点