使用MicroPython开发ESP32(03):GPIO口使用说明

目的

GPIO口操作是微处理器上最常用的功能,这里就对相关使用做个说明。

GPIO口基础说明

MicroPython for ESP32 GPIO主要说明如下:

  • 可以用的IO为 0-19, 21-23, 25-27, 32-39
  • 13 分别为UART0的TX和RX,即烧写和默认调试用的端口;
  • 6~11 不推荐使用,因为这几个口接了烧录程序用的flash;
  • 34~39 只能设置为输入模式,并且没有内部上拉电阻;

这个地方说明其实和官方文档有点出入,原因是使用的ESP32芯片具体型号差生的差异。这里列出的信息适用于型号为 ESP32-D0WD 的芯片。更详细的信息可以参考乐鑫官方《ESP32 技术规格书》。

题外话:请注意ESP32的IO12,这个IO口上上电时的电平会决定外部flash(存放程序的那颗)的工作电压,上电时该脚为高则认为flash工作于1.8V,为低则认为flash工作于3.3V。常用的像是Wroom-32系列模块该脚内部已下拉,即flash是工作于3.3V的,若外部电路接强上拉则可能导致模块工作异常。

函数说明

MicroPython中使用GPIO口主要是用到了 machine 模块中的 Pin 类,具体函数说明如下:

  • class machine.Pin(id, mode=-1, pull=-1, *, value)
    构造函数,用于声明与初始化GPIO口对象:
    id:GPIO编号,如使用GPIO13则此处填写13;
    mode:模式,可选 Pin.INPin.OUTPin.OPEN_DRAIN
    pull:使用内部上下拉电阻,可选 NonePin.PULL_UPPin.PULL_DOWN ,部分IO口可以设置为 PULL_HOLD 模式,可以在深度睡眠时保持其状态;
    value:输出或开漏模式下端口值,0为低(off)、1为高(on);
  • Pin.init(mode=-1, pull=-1, *, value, drive, alt)
    重新初始化GPIO口;
  • Pin.value([x])
    不填写参数使用时返回端口的值,参数填写0(False)、1(True)改变端口值;
  • Pin.on()
    输出或开漏模式下将端口设置为高;
  • Pin.off()
    输出或开漏模式下将端口设置为低;
  • Pin.irq(handler=None, trigger=(Pin.IRQ_FALLING | Pin.IRQ_RISING), *,wake=None)
    用于设置外部中断:
    handler:中断触发回调函数;
    trigger:中高端触发源可选下降沿上升沿或是一起使用;
    wake:使能外部中断唤醒睡眠,可设置为 WAKE_LOWWAKE_LOWWAKE_HIGH

在这里插入图片描述

使用演示

使用下面代码进行测试:

# 将GPIO22和GPIO23用导线相连
from machine import Pin # 导入Pin模块
import time # 导入Time模块

p22 = Pin(22, Pin.OUT, value=0) # 初始化GPIO22
print('p22 value:%d'%p22.value()) # 打印GPIO22端口值

p23 = Pin(23, Pin.IN, Pin.PULL_DOWN) # 初始化GPIO23
print('p23 value:%d'%p23.value()) # 打印GPIO23端口值

def p23icb(self): # 中断回调函数
    print('irq - p23 value:%d'%p23.value()) # 打印GPIO23端口值
    
p23.irq(p23icb, Pin.IRQ_RISING) # GPIO23设置上升沿触发中断

while True:
    time.sleep(1)
    print('p22 turn off')
    p22.off()
    time.sleep(1)
    print('p22 turn on')
    p22.on() # 该动作会在GPIO23上产生上升沿,触发中断

在这里插入图片描述

总结

GPIO口的使用主要就这些,更多内容可以参考下面链接:
http://docs.micropython.org/en/latest/esp32/quickref.html#pins-and-gpio
http://docs.micropython.org/en/latest/library/machine.Pin.html

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MicroPython-ESP32 是一个专门为 ESP32 设计的 MicroPython 库,它提供了许多 ESP32 的驱动程序和功能模块,可以方便地在 ESP32 上开发 MicroPython 项目。 MicroPython-ESP32 库包含了以下功能模块: - machine:提供了访问 GPIO、ADC、PWM、I2C、SPI、UART 等硬件资源的方法。 - network:提供了访问 WiFi、Ethernet 等网络资源的方法。 - time:提供了时间相关的方法,如获取当前时间、延时等。 - uos:提供了文件系统相关的方法,如创建文件、删除文件等。 - ujson:提供了 JSON 编码和解码的方法。 - urequests:提供了访问 HTTP 网络资源的方法。 - usocket:提供了访问 Socket 网络资源的方法。 - ustruct:提供了字节序列和 C 结构体之间转换的方法。 - utime:提供了时间相关的方法,如获取当前时间、延时等。 使用 MicroPython-ESP32 库很简单,只需要将库文件拷贝到 ESP32 上,并在 MicroPython 代码中引入需要的模块即可。例如,以下代码演示了如何使用 MicroPython-ESP32 库中的 machine 模块控制 ESP32 的 GPIO: ```python import machine # 配置GPIO 2为输出模式 p2 = machine.Pin(2, machine.Pin.OUT) # 将GPIO 2输出高电平 p2.value(1) # 将GPIO 2输出低电平 p2.value(0) ``` 需要注意的是,MicroPython-ESP32 库的使用需要先安装 MicroPython 固件。可以从 MicroPython 官方网站下载 ESP32 的 MicroPython 固件,并使用 esptool.py 工具将固件烧录到 ESP32 上。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Naisu Xu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值