GPIO口操作是微处理器上最常用的功能,这里就对相关使用做个说明。
MicroPython for ESP32 GPIO主要说明如下:
0-19, 21-23, 25-27, 32-39
;1
和 3
分别为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)
Pin.IN
、 Pin.OUT
、 Pin.OPEN_DRAIN
; None
、 Pin.PULL_UP
、 Pin.PULL_DOWN
,部分IO口可以设置为 PULL_HOLD
模式,可以在深度睡眠时保持其状态; Pin.init(mode=-1, pull=-1, *, value, drive, alt)
Pin.value([x])
Pin.on()
Pin.off()
Pin.irq(handler=None, trigger=(Pin.IRQ_FALLING | Pin.IRQ_RISING), *,wake=None)
WAKE_LOW
、WAKE_LOW
、 WAKE_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
手机扫一扫
移动阅读更方便
你可能感兴趣的文章