> 文章列表 > MicroPython ESP8266 GPIO引脚使用详解

MicroPython ESP8266 GPIO引脚使用详解

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引脚使用详解

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

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

MicroPython ESP8266 GPIO引脚使用详解

  • 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 Pinp0 = 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/highp2 = Pin(2, Pin.IN)     # create input pin on GPIO2
print(p2.value())       # get value, 0 or 1p4 = 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:# 点亮 LEDled.value(1)# 等待500msutime.sleep_ms(500)# 关闭 LEDled.value(0)# 等待500msutime.sleep_ms(500)
  • 🌿状态翻转
import machine
import utime# 初始化 GPIO2 为输出引脚
led = machine.Pin(2, machine.Pin.OUT)# 循环闪烁 LED
while True:# led状态翻转led.value(not led.value())# 等待500msutime.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引脚使用详解

📝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引脚使用详解