【雕爷学编程】MicroPython手册之 ESP8266 实时时钟 (RTC)

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述

ESP8266是一种低成本的Wi-Fi芯片,它可以用于开发物联网、智能家居、网络控制等应用。不同的ESP8266芯片或模块可能有不同的参数,因此在使用或购买时,需要注意选择合适的型号和版本。以下是一些常见的ESP8266参数:

1、尺寸:ESP8266芯片的尺寸为5x5 mm,ESP8266模块的尺寸根据外围电路和天线的不同而有所差异,一般在10x15 mm到25x50 mm之间。
2、工作温度:ESP8266芯片的工作温度范围为-40125℃,ESP8266模块的工作温度范围一般为-4085℃。
3、处理器:ESP8266芯片内置了一个32位的Tensilica L106 RISC处理器,最高时钟频率为160 MHz,支持实时操作系统和Wi-Fi协议栈。
4、内存:ESP8266芯片内置了64 KB的指令RAM和96 KB的数据RAM,以及64 KB的boot ROM。ESP8266模块还需要外接一个Flash存储器,一般为512 KB到16 MB之间。
5、电源:ESP8266芯片的供电电压为3.0~3.6 V,最大功耗为170 mA,最小功耗为20 uA。ESP8266模块的供电电压一般为3.3 V或5 V,最大功耗一般为200~300 mA,最小功耗一般为10~20 uA。
6、通信协议:ESP8266芯片支持IEEE 802.11 b/g/n标准的Wi-Fi协议,支持Station、SoftAP和Station+SoftAP三种模式。ESP8266芯片还支持多种数字外设接口,如GPIO、PWM、ADC、UART、I2C、SPI等。ESP8266芯片还可以使用socket模块或其他协议库来实现TCP/IP、UDP、HTTP、MQTT等协议。
在这里插入图片描述
MicroPython的ESP8266实时时钟 (RTC)是一种用于跟踪日期和时间的内置硬件模块。

RTC的主要特点有:

RTC可以在ESP8266断电或睡眠时继续运行,只需要一个外部电池或电容器作为备用电源。
RTC可以通过软件初始化和设置,也可以通过网络时间协议 (NTP) 同步互联网上的标准时间。
RTC可以设置闹钟功能,用于定时唤醒ESP8266或执行其他任务。
RTC可以通过中断请求 (IRQ) 机制实现对时间变化的监测和响应。

RTC的应用场景有:

RTC可以用于实现各种基于时间的应用,如日历、闹钟、定时器、倒计时等。
RTC可以用于记录和显示数据采集或传输的时间戳,方便数据分析和管理。
RTC可以用于优化ESP8266的功耗,通过设置闹钟和睡眠模式实现低频率的数据更新或控制。

RTC的注意事项有:

RTC的精度受到硬件和软件的影响,可能存在一定的误差,需要定期校准或同步。
RTC的日期和时间格式取决于具体的软件实现,需要注意不同模块或库之间的兼容性问题。
RTC的闹钟功能需要注意避免与其他中断源或睡眠模式产生冲突。

MicroPython的ESP8266实时时钟 (RTC)的几个实际运用程序参考代码案例如下:

案例1:使用RTC显示当前日期和时间:

# 导入相关模块
import machine
import time

# 创建RTC对象
rtc = machine.RTC()

# 初始化RTC为2023年4月6日11:54:03
rtc.datetime((2023, 4, 6, 4, 11, 54, 3, 0))

# 循环打印当前日期和时间
while True:
    print(rtc.datetime())
    time.sleep(1)

案例2:使用NTP同步RTC的日期和时间:

# 导入相关模块
import machine
import network
import ntptime

# 连接Wi-Fi网络
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('your_ssid', 'your_password')
while not wlan.isconnected():
    pass

# 创建RTC对象
rtc = machine.RTC()

# 同步NTP服务器上的日期和时间
ntptime.settime()

# 打印同步后的日期和时间
print(rtc.datetime())

案例3:使用RTC设置闹钟唤醒ESP8266:

# 导入相关模块
import machine

# 创建RTC对象
rtc = machine.RTC()

# 配置RTC.ALARM0用于定时唤醒设备
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)

# 检测设备是否通过深度睡眠GPIO16引脚唤醒
if machine.reset_cause() == machine.DEEPSLEEP_RESET:
    print('woke from a deep sleep')

# 设置RTC.ALARM0定时器时间为10秒(唤醒设备)
rtc.alarm(rtc.ALARM0, 10000)

# 让设备进入睡眠状态
machine.deepsleep()

案例4:读取当前时间:

import machine

rtc = machine.RTC()

rtc.datetime()  # 获取当前时间

year, month, day, weekday, hour, minute, second, _ = rtc.datetime()
print("Current time: {}-{}-{} {}:{}:{}".format(year, month, day, hour, minute, second))

这个示例使用ESP8266的实时时钟(RTC)模块读取当前的日期和时间。通过创建RTC对象并调用datetime()方法,可以获取当前的年、月、日、星期、时、分、秒等信息,并将其打印出来。

案例5:设置RTC时间:

import machine

rtc = machine.RTC()

# 设置新的日期和时间
new_datetime = (2023, 9, 25, 3, 15, 0, 0, 0)  # (年, 月, 日, 星期, 时, 分, 秒, 毫秒)
rtc.datetime(new_datetime)

print("RTC time set to: {}-{}-{} {}:{}:{}".format(*new_datetime[:6]))

这个示例使用ESP8266的实时时钟(RTC)模块设置新的日期和时间。通过创建RTC对象并调用datetime()方法,传入一个新的日期和时间元组,即可将RTC的时间设置为指定的值,并将设置后的时间打印出来。

案例6:使用RTC实现定时任务:

import machine
import time

rtc = machine.RTC()

# 设置定时触发时间
alarm_time = (2023, 9, 25, 15, 30, 0, 0, 0)  # (年, 月, 日, 时, 分, 秒, 毫秒)

rtc.alarm(rtc.ALARM0, rtc.MATCH_DATETIME, alarm_time)  # 设置闹钟

while True:
    if rtc.alarm_triggered():
        print("Alarm triggered at: {}-{}-{} {}:{}:{}".format(*alarm_time[:6]))
        # 执行定时任务
        # ...

        rtc.alarm(rtc.ALARM0, rtc.MATCH_DATETIME, alarm_time)  # 重新设置闹钟

    time.sleep(1)

这个示例使用ESP8266的实时时钟(RTC)模块实现定时任务。通过设置一个闹钟时间,然后在循环中不断检查闹钟是否触发。如果闹钟触发,就执行定时任务的代码块,并重新设置闹钟,以实现周期性的定时任务。在示例中,定时任务的执行部分需要根据具体需求进行编写。这些示例展示了如何在MicroPython的ESP8266模块上使用实时时钟(RTC)进行时间的读取、设置和定时任务的实现。请注意,ESP8266的RTC模块使用的是内部的低功耗时钟,因此需要在每次上电后重新设置时间。

案例7:获取当前时间:

import machine
import utime

rtc = machine.RTC()

# 获取当前时间
current_time = rtc.datetime()
year, month, day, hour, minute, second, _, _ = current_time

# 打印当前时间
print("Current time: {:04d}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}".format(year, month, day, hour, minute, second))

在上述示例中,我们使用machine.RTC()创建一个RTC对象。通过调用RTC对象的datetime()方法,可以获取当前的日期和时间。获取到的时间信息是一个元组,包含年、月、日、小时、分钟、秒等信息。然后,我们可以将这些时间信息格式化并打印输出。

案例8:设置RTC时间:

import machine

rtc = machine.RTC()

# 设置RTC时间
rtc.datetime((2023, 9, 25, 12, 30, 0, 0, 0))

在上述示例中,我们使用machine.RTC()创建一个RTC对象。通过调用RTC对象的datetime()方法,并传入一个元组作为参数,可以设置RTC的日期和时间。元组的顺序依次为年、月、日、小时、分钟、秒、周、年的天数。在示例中,我们设置RTC的时间为2023年9月25日12点30分。

案例9:周期性唤醒:

import machine

rtc = machine.RTC()

# 配置RTC为周期性唤醒模式
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)

# 设置唤醒时间间隔(单位为毫秒)
interval = 5000  # 5秒

# 设置RTC的唤醒时间
rtc.alarm(rtc.ALARM0, interval)

# 进入深度睡眠状态
machine.deepsleep()

在上述示例中,我们使用machine.RTC()创建一个RTC对象。通过调用RTC对象的irq()方法,可以配置RTC为周期性唤醒模式,并指定唤醒触发源为rtc.ALARM0。使用machine.DEEPSLEEP参数表示从深度睡眠状态唤醒。通过调用RTC对象的alarm()方法,可以设置RTC的唤醒时间间隔,单位为毫秒。在示例中,我们设置唤醒时间间隔为5秒(5000毫秒)。最后,调用machine.deepsleep()函数使ESP8266进入深度睡眠状态,直到RTC唤醒。这些示例提供了使用MicroPython控制ESP8266实时时钟(RTC)的实际运用程序参考代码案例。请注意,具体的时间设置和唤醒配置应根据实际需求进行调整。

请注意,以上示例仅供参考,具体的使用方法可能因不同的硬件平台和MicroPython版本而有所差异。在实际编程中,你需要根据你所使用的硬件和具体需求进行适当的调整。

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ESP8266是一款集成Wi-Fi功能的微控制器,它也具备RTC(Real-Time Clock,实时时钟)功能。RTC时钟是一种能够保持时间的时钟,即使在掉电或重启后也能保持准确。 在ESP8266上,RTC时钟可以通过外部的晶体振荡器或通过内部定时器(APB_CLK硬件定时器)来实现。使用外部晶体振荡器可以提供更高的时钟精度,而使用内部定时器则更为便捷。 为了使用ESP8266RTC时钟功能,我们需要将其初始化,并设置时间。可以使用库函数来实现这些功能。首先,需要引入相应的库,并初始化RTC时钟模块。然后,可以通过设置年、月、日、时、分、秒等参数来设定时间。 一旦RTC时钟被初始化并设置好时间,它可以用于多种应用场景。例如,可以在控制器中使用RTC时钟来记录事件的时间戳,实现基于时间的功能,比如定时执行任务、定时触发事件等。此外,可以利用RTC时钟实现实时监测和数据记录,如温度、湿度等传感器数据的记录和定时上传。RTC时钟还可以用于时序控制、闹钟、定时器等应用。 需要注意的是,ESP8266RTC时钟功能对时钟漂移相当敏感,尤其是使用内部定时器。如果需要更高的时间精度和准确性,建议使用外部晶体振荡器。 总结来说,ESP8266RTC时钟功能提供了一种便捷的实时时钟解决方案,适用于多种应用场景,包括时间戳记录、定时任务、数据记录等。通过合理使用RTC时钟,可以实现更多复杂的时间相关功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值