MicroPython ESP32machine.Pin类函数以及参数详解

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MicroPython ESP32machine.Pin类函数以及参数详解相关的知识,希望对你有一定的参考价值。

【MicroPython ESP32】machine.Pin类函数以及参数详解


  • ✨本案例基于Thonny平台开发。✨

🔖通过Shell调试窗口查询Pin类的的相关帮助信息from machine import Pin

  • 📍 value – 不带参数为获取状态,带参数为赋值
  • 📍 off – 赋值0
  • 📍 on – 赋值1
  • 📍 irq – 中断函数
  • 📍 IN – 输入模式
  • 📍 OUT – 输出模式
  • 📍 OPEN_DRAIN – 开漏输出
  • 📍 PULL_UP – 上拉状态
  • 📍 PULL_DOWN – 下拉状态
  • 📍 PULL_HOLD – 浮空?
  • 📍 IRQ_RISING – 中断触发条件,上升沿触发
  • 📍 IRQ_FALLING --中断触发条件,下降沿触发
  • 📍 WAKE_LOW – 中断触发条件,低电平触发
  • 📍 WAKE_HIGH – 中断触发条件,高电平触发

📝引脚输入输出状态

🧧 esp32引脚说明

  • 📌GPIO0 和 GPIO2 为strapping引脚,这类引脚可影响启动
  • 📌引脚1和3分别是串口交互(REPL)的TX和RX。
  • 📌0-19, 21-23, 25-27, 32-39.分别对应ESP32芯片的实际引脚
  • 📌引脚6, 7, 8, 11, 16, 和 17 are 连接到模块的Flash,不建议做其它用途。
  • 📌引脚 34-39 只允许输入, 没有内部上拉电阻。

⛳示例代码


引脚13分别是串口交互(REPL)的TX和RX。
0-19, 21-23, 25-27, 32-39.分别对应ESP32芯片的实际引脚
引脚6, 7, 8, 11, 16,17 连接到模块的Flash,不建议做其它用途。
引脚 34-39 只允许输入, 没有内部上拉电阻。
部分引脚的pull值可以设置为 Pin.PULL_HOLD 以降低深度睡眠时候的功耗
'''
from machine import Pin
from utime import sleep #延时

p0 = Pin(32, Pin.OUT)    # 创建对象p0,对应GPIO0口输出
p0.on()                 # 设置引脚为 "on" (1)高电平
p0.off()                # 设置引脚为 "off" (0)低电平
p0.value(1)             # 设置引脚为 "on" (1)高电平

p2 = Pin(22, Pin.IN)     # 创建对象p2,对应GPIO2口输入
print(p2.value())       # 获取引脚输入值, 0(低电平) 或者 1(高电平)

p4 = Pin(4, Pin.IN, Pin.PULL_UP) # 打开内部上拉电阻
#p5 = Pin(5, Pin.IN, value=1) # 初始化时候设置引脚的值为 1(高电平)
p12 = Pin(12, Pin.IN,Pin.PULL_UP)

p23 = Pin(23, Pin.IN,Pin.PULL_UP)

def blink(pin):
    print('Tri',pin)
    for i in range(2):        
        p0.value(not p0.value())
        sleep(0.5)
    
p23.irq(lambda pin:print("IRQ with flag:", pin.value()),trigger=Pin.IRQ_FALLING)   # 下降沿中断
p12.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING,handler=blink) # 上升沿或下降沿中断
while True:
    pass

中断函数示例

当GPIO23引脚拉低时,触发中断,板载led灯亮3秒熄灭。

from machine import Pin
from time import sleep

State = False
# 回调函数
def handle_interrupt(pin):
  global State
  State = True
  global interrupt_pin
  interrupt_pin = pin 

led = Pin(2, Pin.OUT)
pir = Pin(23, Pin.IN,Pin.PULL_UP)
# 上升沿中断
pir.irq(trigger=Pin.IRQ_RISING, handler=handle_interrupt)

while True:
  if State:
    print('Interrupt caused by:', interrupt_pin)
    led.value(1)
    sleep(3)
    led.value(0)
    print('Tri!')
    State = False

以上是关于MicroPython ESP32machine.Pin类函数以及参数详解的主要内容,如果未能解决你的问题,请参考以下文章

ESP32 MicroPython开发之旅 设备篇② ——machine Signal,点亮一个LED灯

MicroPython ESP32外部中断使用示例

ESP32玩转MicroPython(三) 延时、计时 和GPIO操作

ESP32基于MicroPython框架下之点灯程序

ESP32 Micropython 定时器中断的使用示例

MicroPython ESP32 触摸传感器使用示例