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、…)。
-
⚡注意 :Pin(1) 和 Pin(3) 分别是 REPL UART TX 和 RX。另请注意,Pin(16) 是一个特殊的 pin(用于从深度睡眠模式唤醒),可能无法用于更高级别的类,如 Neopixel.
- 🔖通过Shell调试窗口查询Pin类的的相关帮助信息
from machine import Pin
- 🌿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)
📝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))