MicroPython ESP8266 GPIO引脚使用详解

MicroPython ESP8266 GPIO引脚使用


  • 相关篇《【MicroPython esp8266】固件烧写教程》

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

  • 固件版本信息:MicroPython v1.19.1 on 2022-06-18; ESP module with ESP8266

  • ESP8266可用管脚有:0、1、2、3、4、5、12、13、14、15、16,对应ESP8266芯片实际的GPIO管脚编号。请注意,许多开发板板使用的引脚编号(标记为例如 D0、D1、…)。
    MicroPython ESP8266 GPIO引脚使用详解_第1张图片

  • ⚡注意 :Pin(1) 和 Pin(3) 分别是 REPL UART TX 和 RX。另请注意,Pin(16) 是一个特殊的 pin(用于从深度睡眠模式唤醒),可能无法用于更高级别的类,如 Neopixel.

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

MicroPython ESP8266 GPIO引脚使用详解_第2张图片

  • init - 初始化引脚状态
  • machine.Pin.init() 方法的参数列表:
  • mode:引脚的模式,默认为 None。可以是 machine.Pin.IN、machine.Pin.OUT 或 machine.Pin.OPEN_DRAIN。
  • pull:引脚的内部上拉machine.Pin.PULL_UP,默认为 None。
    value:引脚的初始状态,默认为 None。当 mode 为 machine.Pin.OUT 时有效,可以是 0 或 1。
import machine

# 初始化 GPIO0,设置为输入模式,启用上拉电阻
button = machine.Pin(0, machine.Pin.IN)
button.init(mode=machine.Pin.IN, pull=machine.Pin.PULL_UP)

# 初始化 GPIO2,设置为输出模式,初始化状态为低电平
led = machine.Pin(2, machine.Pin.OUT)
led.init(mode=machine.Pin.OUT, value=0)

  • value – 不带参数为获取状态,带参数为赋值
  • off – 赋值0
  • on – 赋值1
  • irq – 中断函数
  • IN – 输入模式
  • OUT – 输出模式
  • OPEN_DRAIN – 开漏输出
  • PULL_UP – 上拉
  • IRQ_RISING – 中断触发条件,上升沿触发
  • IRQ_FALLING --中断触发条件,下降沿触发

GPIO输入输出配置

from machine import Pin

p0 = Pin(0, Pin.OUT)    # create output pin on GPIO0
p0.on()                 # set pin to "on" (high) level
p0.off()                # set pin to "off" (low) level
p0.value(1)             # set pin to on/high

p2 = Pin(2, Pin.IN)     # create input pin on GPIO2
print(p2.value())       # get value, 0 or 1

p4 = Pin(4, Pin.IN, Pin.PULL_UP) # enable internal pull-up resistor
p5 = Pin(5, Pin.OUT, value=1) # set pin high on creation

GPIO2板子LED闪烁程序

import machine
import utime

# 初始化 GPIO2 为输出引脚
led = machine.Pin(2, machine.Pin.OUT)

# 循环闪烁 LED
while True:
    # 点亮 LED
    led.value(1)
    # 等待500ms
    utime.sleep_ms(500)
    # 关闭 LED
    led.value(0)
    # 等待500ms
    utime.sleep_ms(500)
  • 状态翻转
import machine
import utime

# 初始化 GPIO2 为输出引脚
led = machine.Pin(2, machine.Pin.OUT)

# 循环闪烁 LED
while True:
    # led状态翻转
    led.value(not led.value())
    # 等待500ms
    utime.sleep_ms(500)

GPIO 中断以及输入输出示例

from machine import Pin

# 初始化 GPIO2 为输出引脚
led = Pin(2, Pin.OUT,value=0)# 初始化时候设置引脚的值为 1(高电平)

# 中断回调函数
def callback(p):
    print("Button pressed")
    led.value(not led.value())

# 初始化一个引脚对象
button = Pin(0, Pin.IN,Pin.PULL_UP)# 打开内部上拉电阻

# 注册中断回调函数
button.irq(trigger=Pin.IRQ_FALLING, handler=callback)


MicroPython ESP8266 GPIO引脚使用详解_第3张图片

GPIO中断 + lambda单行任务匿名表达式示例

import machine

# 初始化 GPIO0,设置为输入模式,启用上拉电阻
button = machine.Pin(0, machine.Pin.IN)
button.init(mode=machine.Pin.IN, pull=machine.Pin.PULL_UP)

# 初始化 GPIO2,设置为输出模式,初始化状态为低电平
led = machine.Pin(2, machine.Pin.OUT)
led.init(mode=machine.Pin.OUT, value=0)

# 注册中断回调函数
button.irq( lambda pin:print("IRQ with flag:", pin.value()),trigger=machine.Pin.IRQ_FALLING)

GPIO中断 + lambda多行任务匿名表达式示例

import machine

# 初始化 GPIO0,设置为输入模式,启用上拉电阻
button = machine.Pin(0, machine.Pin.IN)
button.init(mode=machine.Pin.IN, pull=machine.Pin.PULL_UP)

# 初始化 GPIO2,设置为输出模式,初始化状态为低电平
led = machine.Pin(2, machine.Pin.OUT)
led.init(mode=machine.Pin.OUT, value=0)

def handle_button_press(pin):
    print("Button pressed")
    led.value(not led.value())
      
# 注册中断回调函数
button.irq(trigger=machine.Pin.IRQ_FALLING, handler=lambda pin: handle_button_press(pin))

MicroPython ESP8266 GPIO引脚使用详解_第4张图片

你可能感兴趣的:(#,MicroPython,for,ESP8266,Micropython,ESP8266,GPIO)