【雕爷学编程】MicroPython手册之 ESP32-S3 延时和时间

在这里插入图片描述
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、适当使用抽象来封装底层硬件操作。

在这里插入图片描述

总体来说,ESP32-S3在功耗、硬件资源和功能支持方面进行了优化,非常适合作为低功耗物联网设备的处理平台。相比ESP32,ESP32-S3在无线、安全性和稳定性等方面有所提升。

1、搭载 Xtensa® 32 位 LX7 双核处理器,主频 240 MHz,内置 512 KB SRAM (TCM),具有 45 个可编程 GPIO 管脚和丰富的通信接口。
2、支持更大容量的高速 Octal SPI flash 和片外 RAM,支持用户配置数据缓存与指令缓存。
3、加入了用于加速神经网络计算和信号处理等工作的向量指令 (vector instructions),性能对比 ESP32 有可观的提升。
4、集成 2.4 GHz Wi-Fi (802.11 b/g/n),支持 40 MHz 带宽;其低功耗蓝牙子系统支持 Bluetooth 5 (LE) 和 Bluetooth Mesh,可通过 Coded PHY 与广播扩展实现远距离通信。它还支持 2 Mbps PHY,用于提高传输速度和数据吞吐量。
5、外设新增 LCD 接口、USB、SD/MMC 主机控制器和 TWAI TM 控制器等常用外设接口。
6、拥有完善的安全机制和保护措施,支持基于 AES-XTS 算法的 flash 加密、基于 RSA 算法的安全启动、数字签名和 HMAC。还新增了一个“世界控制器 (World Controller)”模块,提供了两个互不干扰的执行环境,实现可信执行环境或权限分离机制。

在这里插入图片描述
MicroPython的ESP32-S3延时和时间功能是在ESP32-S3芯片上基于MicroPython语言的一组功能模块,用于实现延时和时间相关的操作。下面将详细解释其主要特点、应用场景以及需要注意的事项。

主要特点:

精确的延时控制:ESP32-S3延时功能模块提供了精确的延时控制能力。开发人员可以使用该功能模块实现以微秒或毫秒为单位的准确延时,用于需要精确时间控制的应用场景,如定时任务、时间敏感的数据采集等。

RTC(实时时钟)功能:ESP32-S3芯片上集成了RTC(Real-Time Clock)模块,可用于获取和设置实时时间。延时和时间功能模块提供了与RTC模块的集成接口,使开发人员能够方便地进行时间相关的操作,如获取当前时间、设置闹钟、定时任务等。

灵活的时间单位支持:ESP32-S3延时和时间功能模块支持多种时间单位,包括微秒、毫秒和秒。开发人员可以根据不同的应用需求选择合适的时间单位,以满足精确的时间控制和操作要求。

应用场景:
ESP32-S3延时和时间功能模块在多个应用场景中有广泛的应用,包括但不限于以下领域:

定时任务和调度:ESP32-S3的延时功能模块可用于实现定时任务和调度功能。开发人员可以使用延时函数来控制任务的执行时间间隔,实现定期执行的任务,如数据采集、传输、设备状态监测等。

实时数据处理:ESP32-S3的时间功能模块可用于实时数据处理应用。开发人员可以利用RTC模块获取当前时间戳,并结合延时功能模块进行数据的时间戳标记、数据同步等操作,用于实时数据处理和分析。

时钟和闹钟应用:ESP32-S3的时间功能模块可用于构建时钟和闹钟应用。开发人员可以利用RTC模块设置和获取当前时间,并结合延时功能模块实现时钟显示、闹铃响铃等功能,适用于智能家居、电子钟等场景。

需要注意的事项:
在使用ESP32-S3延时和时间功能模块时,需要注意以下事项:

精度和误差:ESP32-S3的延时和时间功能模块具有一定的精度和误差。开发人员应了解和考虑其精度范围,并根据应用需求进行适当的校准和误差处理,以确保时间的准确性。

电源管理:ESP32-S3的RTC模块通常需要外部电源供电以保持时间的持久性。开发人员应合理管理电源供应,以避免时间数据的丢失或不准确。

时间同步:如果应用中需要多个ESP32-S3设备之间的时间同步,开发人员可以使用网络时间协议(NTP)等方式进行时间同步,以确保各个设备的时间一致性。

异常处理:在使用延时和时间功能模块时,可能会遇到硬件异常或错误。开发人员应考虑异常处理机制,以确保系统的可靠性和稳定性。

综上所述,MicroPython的ESP32-S3延时和时间功能模块具有精确的延时控制、RTC功能集成以及灵活的时间单位支持。它在定时任务和调度、实时数据处理以及时钟和闹钟应用等场景中得到广泛应用。在使用时需要注意精度和误差、电源管理、时间同步以及异常处理等事项。

案例一:使用ESP32-S3的延时函数

import time

# 延时1秒
time.sleep(1)
print("延时1秒后执行")

# 延时500毫秒
time.sleep_ms(500)
print("延时500毫秒后执行")

要点解读:在这个程序中,我们使用了MicroPython的time模块中的sleep函数来实现延时。sleep函数接受一个参数,表示延时的秒数。在这个例子中,我们分别延时了1秒和500毫秒。

案例二:获取当前时间

import time

# 获取当前时间戳(单位:秒)
timestamp = time.time()
print("当前时间戳:", timestamp)

# 将时间戳转换为可读的时间格式
local_time = time.localtime(timestamp)
print("本地时间:", local_time)

要点解读:在这个程序中,我们使用了MicroPython的time模块中的time函数来获取当前时间戳(单位:秒),然后使用localtime函数将时间戳转换为可读的时间格式。

案例三:计算两个时间点之间的时间差

import time

# 获取当前时间戳(单位:秒)
start_time = time.time()

# 执行一些操作
for i in range(1000000):
    pass

# 获取结束时间戳(单位:秒)
end_time = time.time()

# 计算时间差(单位:秒)
time_difference = end_time - start_time
print("时间差(秒):", time_difference)

要点解读:在这个程序中,我们首先获取了当前时间戳作为开始时间,然后执行了一些操作,接着再次获取当前时间戳作为结束时间。最后,我们计算了两个时间点之间的时间差(单位:秒)。

案例四:延时程序
在这个程序中,我们将使用MicroPython的ESP32-S3的延时功能。延时功能可以让我们在程序执行过程中暂停一段时间,以便让硬件有时间处理其他任务或等待外部输入。我们可以使用time.sleep()函数来设置延时时间,该函数需要传递一个浮点数作为参数,表示需要延时的时间(单位为秒)。

import time  
  
print('开始延时')  
time.sleep(5) # 延时5秒  
print('结束延时')

在这个程序中,我们使用了time.sleep()函数来设置一个5秒的延时。在延时期间,程序会暂停执行,以便其他任务或外部输入有时间处理。需要注意的是,在使用time.sleep()函数时,需要传递一个浮点数作为参数,表示需要延时的时间(单位为秒)。

案例五:获取当前时间程序
在这个程序中,我们将使用MicroPython的ESP32-S3的日期和时间功能。我们可以使用datetime模块来获取当前的日期和时间。具体来说,我们可以使用datetime.datetime.now()函数来获取当前的日期和时间。

import datetime  
  
current_time = datetime.datetime.now()  
print('当前时间:', current_time)

在这个程序中,我们使用了datetime模块来获取当前的日期和时间。具体来说,我们使用datetime.datetime.now()函数来获取当前的日期和时间,并将其存储在current_time变量中。最后,我们将当前时间打印到串口上。需要注意的是,在使用datetime模块时,需要先导入该模块。

案例六:设置系统时间程序
在这个程序中,我们将使用MicroPython的ESP32-S3的日期和时间功能来设置系统的日期和时间。我们可以使用machine.set_time()函数来设置系统的时间。该函数需要传递一个datetime.datetime对象作为参数,表示需要设置的日期和时间。需要注意的是,在设置系统时间之前,需要先获取当前时间并存储在变量中,以便在设置时使用。

import datetime  
import machine  
  
current_time = datetime.datetime.now() # 获取当前时间  
new_time = current_time.replace(year=2023, month=3, day=17, hour=10, minute=30, second=0) # 设置新的日期和时间  
machine.set_time(new_time) # 设置系统时间

在上面的程序中,我们首先导入了datetime模块和machine模块。然后,我们使用datetime.datetime.now()函数获取当前的日期和时间,并将其存储在current_time变量中。接着,我们使用current_time.replace()函数将当前时间替换为新的日期和时间,并将其存储在new_time变量中。最后,我们使用machine.set_time()函数将新的日期和时间设置为系统的日期和时间。需要注意的是,在使用machine.set_time()函数时,需要传递一个datetime.datetime对象作为参数,表示需要设置的日期和时间。此外,设置系统时间可能会影响其他任务的执行和硬件的工作状态,因此在使用该功能时需要谨慎操作。

案例七:延时操作:

import time

def delay_seconds(seconds):
    time.sleep(seconds)

要点解读:
该代码片段演示了如何使用MicroPython在ESP32-S3上进行延时操作。
使用time.sleep()函数可以让程序暂停执行指定的秒数。
delay_seconds()函数用于延时指定的秒数,以实现暂停程序执行的效果。

案例八:获取当前时间戳:

import utime

def get_timestamp():
    timestamp = utime.time()
    return timestamp

要点解读:
该代码片段演示了如何使用MicroPython在ESP32-S3上获取当前时间戳。
使用utime.time()函数可以获取当前的时间戳,表示自某个固定参考时间(通常是设备启动时)以来的秒数。
返回的时间戳是一个整数值。

案例九:格式化时间:

import utime

def format_time(timestamp):
    formatted_time = utime.localtime(timestamp)
    return formatted_time

要点解读:
该代码片段演示了如何使用MicroPython在ESP32-S3上格式化时间。
使用utime.localtime()函数可以将时间戳转换为本地时间的元组形式。
返回的元组包含年、月、日、时、分、秒等时间信息。

请注意,以上案例只是为了拓展思路,可能存在错误或不适用的情况。不同的硬件平台、使用场景和MicroPython版本可能会导致不同的使用方法。在实际编程中,您需要根据您的硬件配置和具体需求进行调整,并进行多次实际测试。需要正确连接硬件并了解所使用的传感器和设备的规范和特性非常重要。对于涉及到硬件操作的代码,请确保在使用之前充分了解和确认所使用的引脚和电平等参数的正确性和安全性。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值