• 【MicroPython ESP32】machine.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    在这里插入图片描述

    中断函数示例

    当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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    代码重构的几个步骤
    3D制图教程
    反射的作用、应用场景
    springBoot源码汇总
    go语言结构体使用小结
    20分钟---Vue2->Vue3
    redis的性能管理和雪崩
    java计算机毕业设计高校多媒体设备报修管理系统源码+mysql数据库+系统+lw文档+部署
    数据库系统概论(超详解!!!) 第三节 关系数据库标准语言SQL(Ⅳ)
    Godot 单元测试
  • 原文地址:https://blog.csdn.net/weixin_42880082/article/details/126651084