esp32
— 特定于 ESP32 的功能¶
该 esp32
模块包含专门用于控制 ESP32 模块的函数和类。
职能¶
-
esp32.
wake_on_touch
(wake)¶ 配置触摸是否将设备从睡眠中唤醒。 唤醒应该是一个布尔值。
-
esp32.
wake_on_ext0
(pin, level)¶ 配置 EXT0 如何将设备从睡眠中唤醒。 pin可以是
None
一个有效的 Pin 对象。 级别应该是esp32.WAKEUP_ALL_LOW
或esp32.WAKEUP_ANY_HIGH
。
-
esp32.
wake_on_ext1
(pins, level)¶ 配置 EXT1 如何将设备从睡眠中唤醒。 pin可以是
None
有效 Pin 对象的元组/列表。 级别应该是esp32.WAKEUP_ALL_LOW
或esp32.WAKEUP_ANY_HIGH
。
-
esp32.
raw_temperature
()¶ 读取内部温度传感器的原始值,返回一个整数。
-
esp32.
hall_sensor
()¶ 读取内部霍尔传感器的原始值,返回一个整数。
-
esp32.
idf_heap_info
(capabilities)¶ 返回有关 ESP-IDF 堆内存区域的信息。其中一个包含 MicroPython 堆,其他的由 ESP-IDF 使用,例如用于网络缓冲区和其他数据。此数据有助于了解 ESP-IDF 和网络堆栈的可用内存量。它可能会阐明 ESP-IDF 操作由于分配失败而失败的情况。返回的信息对解决 Python 分配失败没有用,请
micropython.mem_info()
改用。能力参数对应于 ESP-IDF 的
MALLOC_CAP_XXX
值,但两个最有用的参数是预定义的,esp32.HEAP_DATA
用于数据堆区域和esp32.HEAP_EXEC
本地代码发射器使用的可执行区域。返回值是一个 4 元组列表,其中每个 4 元组对应一个堆并包含:总字节数、空闲字节数、最大空闲块和随着时间推移看到的最小空闲区。
启动后示例:
>>> import esp32; esp32.idf_heap_info(esp32.HEAP_DATA) [(240, 0, 0, 0), (7288, 0, 0, 0), (16648, 4, 4, 4), (79912, 35712, 35512, 35108), (15072, 15036, 15036, 15036), (113840, 0, 0, 0)]
闪存分区¶
此类允许访问设备闪存中的分区,并包括启用无线 (OTA) 更新的方法。
-
class
esp32.
Partition
(id)¶ 创建一个表示分区的对象。 id可以是一个字符串,它是要检索的分区的标签,或常量之一:
BOOT
或RUNNING
.
-
classmethod
Partition.
find
(type=TYPE_APP, subtype=255, label=None)¶ 查找由type、subtype和label指定的分区。返回 Partition 对象的(可能为空)列表。注意:
subtype=0xff
匹配任何子类型并label=None
匹配任何标签。
-
Partition.
info
()¶ 返回一个 6 元组。
(type, subtype, addr, size, label, encrypted)
.
-
Partition.
readblocks
(block_num, buf)¶ -
Partition.
readblocks
(block_num, buf, offset)
-
Partition.
writeblocks
(block_num, buf)¶ -
Partition.
writeblocks
(block_num, buf, offset)
-
Partition.
ioctl
(cmd, arg)¶ 这些方法实现了定义的简单和 扩展 块协议
uos.AbstractBlockDev
。
-
Partition.
set_boot
()¶ 将分区设置为引导分区。
-
Partition.
get_next_update
()¶ 获取此分区之后的下一个更新分区,并返回一个新的 Partition 对象。典型用法是
Partition(Partition.RUNNING).get_next_update()
返回下一个要更新的分区,给定当前正在运行的分区。
-
classmethod
Partition.
mark_app_valid_cancel_rollback
()¶ 表示当前启动被视为成功的信号。
mark_app_valid_cancel_rollback
新分区第一次启动时需要调用,以避免下次启动时自动回滚。这使用带有“CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE”的ESP-IDF“应用程序回滚”功能,OSError(-261)
如果在未启用该功能的固件上调用,则会引发。mark_app_valid_cancel_rollback
每次启动都可以调用,并且在启动使用 esptool 加载的 Firmare 时没有必要。
常数¶
-
Partition.
TYPE_APP
¶ -
Partition.
TYPE_DATA
¶ 用于
Partition.find
指定分区类型:APP
用于可引导固件分区(通常标记为factory
,ota_0
,ota_1
),以及DATA
用于其他分区,例如nvs
,otadata
,phy_init
,vfs
。
-
esp32.
HEAP_DATA
¶ -
esp32.
HEAP_EXEC
¶ 用于
idf_heap_info
.
RMT¶
ESP32 专用的 RMT(Remote Control)模块最初设计用于发送和接收红外遥控信号。但是,由于设计灵活且脉冲生成非常准确(低至 12.5ns),它还可以用于传输或接收许多其他类型的数字信号:
import esp32
from machine import Pin
r = esp32.RMT(0, pin=Pin(18), clock_div=8)
r # RMT(channel=0, pin=18, source_freq=80000000, clock_div=8, idle_level=0)
# To apply a carrier frequency to the high output
r = esp32.RMT(0, pin=Pin(18), clock_div=8, tx_carrier=(38000, 50, 1))
# The channel resolution is 100ns (1/(source_freq/clock_div)).
r.write_pulses((1, 20, 2, 40), 0) # Send 0 for 100ns, 1 for 2000ns, 0 for 200ns, 1 for 4000ns
RMT 模块的输入是一个 80MHz 时钟(将来它可能能够配置输入时钟,但现在是固定的)。 对决定 RMT 通道分辨率的时钟输入进行clock_div
分频。中指定的数字 write_pulses
乘以分辨率来定义脉冲。
clock_div
是一个 8 位分频器 (0-255),每个脉冲可以通过将分辨率乘以 15 位 (0-32,768) 数来定义。有八个通道 (0-7),每个通道可以有不同的时钟分频器。
因此,在上面的示例中,80MHz 时钟被 8 分频。因此分辨率为 (1/(80Mhz/8)) 100ns。由于start
级别为 0 并随每个数字切换,因此比特流的0101
持续时间为 [100ns, 2000ns, 100ns, 4000ns]。
更多详情请参阅乐鑫的 ESP-IDF RMT 文档。
警告
当前的 MicroPython RMT 实现缺少一些功能,最明显的是接收脉冲。RMT 应该被认为是一个 测试版功能,界面可能会在未来发生变化。
-
class
esp32.
RMT
(channel, *, pin=None, clock_div=8, idle_level=False, tx_carrier=None)¶ 此类提供对八个 RMT 通道之一的访问。channel是必需的,并标识将配置哪个 RMT 通道 (0-7)。pin也是必需的,用于配置哪个 Pin 绑定到 RMT 通道。clock_div 是一个 8 位时钟分频器,它将源时钟 (80MHz) 分频到 RMT 通道,允许指定分辨率。idle_level指定当没有传输正在进行时输出的电平,可以是转换为布尔值的任何值,
True
代表高电压和False
低电压。要启用传输载波功能,tx_carrier应该是三个正整数的元组:载波频率、占空比 (
0
到100
) 和应用载波的输出电平(根据idle_level的布尔值 )。
-
RMT.
source_freq
()¶ 返回源时钟频率。当前源时钟不可配置,因此这将始终返回 80MHz。
-
RMT.
clock_div
()¶ 返回时钟分频器。请注意,通道分辨率为 。
1 / (source_freq / clock_div)
.
-
RMT.
wait_done
(*, timeout=0)¶ True
如果通道空闲或正在传输以False
开头的脉冲序列,则返回RMT.write_pulses
。如果 给出timeout关键字参数,则阻塞最多毫秒以完成传输。
-
RMT.
loop
(enable_loop)¶ 在通道上配置循环。enable_loop是 bool,设置为在下一次调用时
True
启用循环。如果在当前正在传输循环序列时调用, 则当前循环迭代将完成,然后传输将停止。RMT.write_pulses
False
-
RMT.
write_pulses
(duration, data=True)¶ 开始传输序列。有以下三种方式来指定:
模式 1: duration 是一个持续时间列表或元组。可选数据 参数指定初始输出级别。输出电平将在每个持续时间后切换。
模式 2: duration为正整数,data为输出电平列表或元组。持续时间为每个指定一个固定的持续时间。
模式 3: duration 持续时间和数据是长度相等的列表或元组,指定单独的持续时间和每个的输出级别。
持续时间以通道分辨率的整数单位(如上所述)为单位,介于 1 到 32767 个单位之间。输出电平是任何可以转换为布尔值的值,
True
代表高电压和False
低电压 。如果较早序列的传输正在进行中,则此方法将阻塞,直到传输完成,然后才开始新序列。
如果使用 启用循环
RMT.loop
,则序列将无限重复。在立即开始循环新的脉冲序列之前,对该方法的进一步调用将阻塞,直到当前循环迭代结束。硬件不支持超过 126 个脉冲的循环序列。
超低功耗协处理器¶
-
class
esp32.
ULP
¶ 此类提供对超低功耗协处理器的访问。
-
ULP.
set_wakeup_period
(period_index, period_us)¶ 设置唤醒周期。
-
ULP.
load_binary
(load_addr, program_binary)¶ 在给定的load_addr处将program_binary加载到 ULP 中。
-
ULP.
run
(entry_point)¶ 启动在给定entry_point运行的 ULP 。
非易失性存储¶
此类允许访问由 ESP-IDF 管理的非易失性存储。NVS 被划分为多个命名空间,每个命名空间都包含类型化的键值对。键是字符串,值可以是各种整数类型、字符串和二进制 blob。该驱动程序目前仅支持 32 位有符号整数和 blob。
警告
对 NVS 的更改需要通过调用 commit 方法提交到 flash。未能调用 commit 会导致更改在下次重置时丢失。
-
class
esp32.
NVS
(namespace)¶ 创建一个对象,提供对命名空间的访问(如果不存在,则会自动创建)。
-
NVS.
set_i32
(key, value)¶ 为指定的键设置一个 32 位有符号整数值。记得调用commit!
-
NVS.
get_i32
(key)¶ 返回指定键的有符号整数值。如果键不存在或具有不同的类型,则引发 OSError。
-
NVS.
set_blob
(key, value)¶ 为指定的键设置二进制 blob 值。传入的值必须支持缓冲协议,例如bytes、bytearray、str。(注意 esp-idf 区分 blob 和字符串,即使字符串作为值传入,此方法也始终写入 blob。)记住调用commit!
-
NVS.
get_blob
(key, buffer)¶ 将指定键的 blob 值读入缓冲区,缓冲区必须是字节数组。返回读取的实际长度。如果键不存在、具有不同的类型或缓冲区太小,则引发 OSError。
-
NVS.
erase_key
(key)¶ 擦除键值对。
-
NVS.
commit
()¶ 将set_xxx方法所做的更改提交到闪存。