【雕爷学编程】MicroPython手册之 esp8266 esp32 特定端口库 esp.deepsleep()

在这里插入图片描述

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进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述

MicroPython的esp是指针对ESP8266和ESP32芯片的MicroPython固件和相关软件库。ESP8266和ESP32是一类广泛应用于物联网和嵌入式系统的低成本、低功耗的Wi-Fi和蓝牙模块。MicroPython的esp为这两种芯片提供了高级的脚本编程环境,使开发者能够使用Python语言进行快速原型设计和开发。

ESP8266:是一款低成本、低功耗的Wi-Fi模块/芯片,由Espressif Systems开发。它内置了TCP/IP协议栈,可以用于连接互联网,并具备较强的处理能力。MicroPython的esp提供了针对ESP8266的固件和相关软件库,使开发者可以使用MicroPython语言进行ESP8266应用的开发。

ESP32:是Espressif Systems推出的一款高度集成的Wi-Fi和蓝牙模块/芯片,与ESP8266相比,它具备更强大的处理能力、更多的外设接口和更多的内存。MicroPython的esp也提供了针对ESP32的固件和相关软件库,使开发者可以使用MicroPython语言进行ESP32应用的开发。

MicroPython的esp固件:是专门针对ESP8266和ESP32芯片的MicroPython固件版本。这些固件经过了针对性的优化,使得它们可以在ESP8266和ESP32上运行,并提供了与硬件交互、网络通信和外设控制等功能的API。

软件库:MicroPython的esp还提供了一系列与ESP8266和ESP32硬件相关的软件库,用于简化和加速开发过程。这些软件库提供了丰富的功能接口,涵盖了Wi-Fi、蓝牙、GPIO(通用输入输出)、I2C、SPI、PWM等常用的硬件和通信协议,使开发者可以方便地访问和控制硬件资源。
在这里插入图片描述

MicroPython 的 esp.deepsleep() 是一个用于使 ESP8266 芯片进入深度睡眠模式的函数。深度睡眠模式是一种最低功耗状态,可以使芯片的电流消耗降低到微安级别。

esp.deepsleep() 的主要特点是:

它是一种简单而方便的深度睡眠模式对象操作方式,可以用 esp.deepsleep() 的形式来使芯片进入深度睡眠模式,不需要指定任何参数。
它是一种灵活而强大的深度睡眠模式对象控制方式,可以通过传入一个时间参数来设置芯片在深度睡眠模式下的唤醒时间,单位为微秒。如果不传入时间参数,则芯片将一直处于深度睡眠模式,直到外部中断或复位信号唤醒。
它是一种兼容而可扩展的深度睡眠模式对象接口方式,可以用其他模块或函数来访问或修改深度睡眠模式对象的属性和方法,可以用 machine.deepsleep() 方法来在 ESP32 上使用深度睡眠模式。

esp.deepsleep() 的应用场景有:

用于实现芯片的低功耗运行,如在不需要频繁通信或处理数据的情况下,选择合适的唤醒时间,以减少芯片的功耗和延长电池寿命。
用于实现芯片的定时任务,如在需要定期采集或发送数据的情况下,设置合适的唤醒时间,以保证芯片的功能和效率。
用于实现芯片的灵活切换,如在不同的应用场景下,根据需要动态地调整唤醒时间,以适应不同的需求和条件。

esp.deepsleep() 的需注意事项有:

在使用 esp.deepsleep() 之前,需要确保 ESP8266 开发板已经正确地连接到电源和电脑,并且已经安装了 MicroPython 的固件。
在使用 esp.deepsleep() 时,需要注意芯片的电压范围和电流限制,避免造成硬件损坏或故障。
在使用 esp.deepsleep() 时,需要注意与其他模块或函数的协调和兼容问题,避免造成功能冲突或干扰。例如,如果使用 esp.deepsleep() 方法,则不能同时使用 REPL 功能;如果使用 machine.deepsleep() 方法,则不能同时使用 esp 模块。

以下是几个使用 esp.deepsleep() 的实际运用程序案例:

案例一:使用 esp.deepsleep() 来使芯片进入深度睡眠模式,并在 10 秒后自动唤醒。代码如下:

import esp # 导入 esp 模块
import machine # 导入 machine 模块
import time # 导入 time 模块
led = machine.Pin(2, machine.Pin.OUT) # 创建一个输出引脚对象
led.value(1) # 点亮 LED
time.sleep(1) # 等待 1 秒
led.value(0) # 熄灭 LED
time.sleep(1) # 等待 1 秒
print('Going to sleep for 10 seconds') # 打印提示信息
esp.deepsleep(10000000) # 进入深度睡眠模式,并在 10 秒后唤醒

这个程序可以使芯片进入深度睡眠模式,并在 10 秒后自动唤醒。你可以用其他方法来检查或验证这个过程。

案例二:使用 esp.deepsleep() 来使芯片进入深度睡眠模式,并在外部中断信号唤醒。代码如下:

import esp # 导入 esp 模块
import machine # 导入 machine 模块
import time # 导入 time 模块
led = machine.Pin(2, machine.Pin.OUT) # 创建一个输出引脚对象
button = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP) # 创建一个输入引脚对象
led.value(1) # 点亮 LED
time.sleep(1) # 等待 1 秒
led.value(0) # 熄灭 LED
time.sleep(1) # 等待 1 秒
print('Going to sleep until button is pressed') # 打印提示信息
esp.deepsleep() # 进入深度睡眠模式,并在外部中断信号唤醒

这个程序可以使芯片进入深度睡眠模式,并在外部中断信号唤醒。你可以用其他方法来检查或验证这个过程。

案例三:使用 esp.deepsleep() 来使芯片进入深度睡眠模式,并在复位按钮按下时唤醒。代码如下:

import esp # 导入 esp 模块
import machine # 导入 machine 模块
import time # 导入 time 模块
led = machine.Pin(2, machine.Pin.OUT) # 创建一个输出引脚对象
led.value(1) # 点亮 LED
time.sleep(1) # 等待 1 秒
led.value(0) # 熄灭 LED
time.sleep(1) # 等待 1 秒
print('Going to sleep until reset button is pressed') # 打印提示信息
esp.deepsleep() # 进入深度睡眠模式,并在复位按钮按下时唤醒

这个程序可以使芯片进入深度睡眠模式,并在复位按钮按下时唤醒。你可以用其他方法来检查或验证这个过程。

案例四:周期性唤醒:

import esp

# 设置唤醒时间为10秒
wakeup_time = 10000

# 进入深度睡眠并设置唤醒时间
esp.deepsleep(wakeup_time)

在这个例子中,我们使用esp.deepsleep()函数将MicroPython设备设置为深度睡眠模式。我们将唤醒时间设置为10秒(10000毫秒),然后设备将进入休眠状态,并在指定的时间后自动唤醒。

案例五:外部触发唤醒:

import esp
from machine import Pin

# 设置唤醒引脚
wake_pin = Pin(2, Pin.IN)

# 进入深度睡眠并设置唤醒引脚
esp.deepsleep(0, wake=Pin.WAKE_LOW, enable_pull=True)

# 在这里添加您需要执行的代码,当设备被唤醒时将执行该代码

在这个例子中,我们使用esp.deepsleep()函数将MicroPython设备设置为深度睡眠模式。我们将唤醒引脚设置为引脚2,并将其传递给esp.deepsleep()函数。设备将进入深度睡眠状态,并在唤醒引脚触发时自动唤醒。您可以在注释部分的代码块中添加您希望在设备唤醒时执行的代码。

案例六:低功耗应用:

import esp

# 进入深度睡眠并关闭所有外设
esp.deepsleep(0, True)

在这个例子中,我们使用esp.deepsleep()函数将MicroPython设备设置为深度睡眠模式。我们传递参数0,表示不设置唤醒时间。通过将第二个参数设置为True,我们可以关闭所有外设,以降低功耗。设备将进入深度睡眠状态,并在外部条件或手动唤醒时恢复。

案例七:周期性休眠唤醒:

import esp

# 设置休眠时间为10秒
sleep_time = 10000

# 执行一些任务...

# 进入深度睡眠模式,并设置唤醒时间
esp.deepsleep(sleep_time)

在这个示例中,我们设置了休眠时间为10秒(单位为毫秒)。在执行一些任务后,通过调用esp.deepsleep()函数进入深度睡眠模式,并设置唤醒时间为10秒。在休眠期间,芯片将进入低功耗状态,直到唤醒时间到达。

案例八:外部引脚唤醒:

import esp
from machine import Pin

# 设置唤醒引脚
wake_pin = Pin(4, Pin.IN)

# 进入深度睡眠模式,并配置外部引脚唤醒
esp.deepsleep(0, wake=Pin.IRQ_RISING, wake_pin=wake_pin)

在这个示例中,我们设置了一个外部引脚(Pin 4)作为唤醒引脚。通过将引脚设置为输入模式(默认为高阻抗输入),我们可以使用esp.deepsleep()函数进入深度睡眠模式,并配置外部引脚的唤醒方式为上升沿触发(Pin.IRQ_RISING)。这样,当引脚上的电平从低电平变为高电平时,芯片将被唤醒。

案例九:使用RTC唤醒:

import esp
import machine

# 获取RTC对象
rtc = machine.RTC()

# 设置唤醒时间为10秒
wake_time = 10

# 配置RTC唤醒
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)

# 设置RTC闹钟触发时间
rtc.alarm(rtc.ALARM0, wake_time * 1000)

# 进入深度睡眠模式
esp.deepsleep()

在这个示例中,我们使用RTC(实时时钟)来实现唤醒功能。首先,我们获取RTC对象,并设置唤醒时间为10秒。然后,通过调用rtc.irq()函数,配置RTC的中断触发方式为ALARM0,并设置唤醒方式为深度睡眠(machine.DEEPSLEEP)。接下来,我们使用rtc.alarm()函数设置RTC闹钟的触发时间为10秒。最后,通过调用esp.deepsleep()函数进入深度睡眠模式,在唤醒时间到达时,芯片将被RTC中断唤醒。

这些示例展示了如何使用MicroPython的esp.deepsleep()函数实现不同的休眠唤醒功能。具体的应用取决于您的需求和芯片的支持。请根据具体情况进行适当的设置和参数调整。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/132900340