使用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

发布了67 篇原创文章 · 获赞 176 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/Naisu_kun/article/details/104040197