【雕爷学编程】MicroPython手册之 RP2(Pico)引脚和 GPIO

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
RP2(Pico)是树莓派基金会推出的一款微控制器开发板,基于自研的 RP2040 芯片,售价仅为 4 美元。它可以用 C/C++ 或 Python 语言编程,适合用于物联网、机器人、音乐等各种应用场景。技术参数:RP2(Pico)的技术参数如下:

1、搭载双核 ARM Cortex M0+ 处理器,运行频率 133 MHz
2、内置 264 KB 的片上 RAM,板载 2 MB 闪存
3、可通过专用 QSPI 总线支持最高 16 MB 的片外闪存
4、DMA 控制器
5、30 个 GPIO 引脚,其中 4 个可用作模拟输入
6、2 个 UART、2 个 SPI 控制器和 2 个 I2C 控制器
7、16 个 PWM 通道
8、USB 1.1 主机和设备支持
9、8 个树莓派可编程 I/O(PIO)状态机,用于自定义外围设备支持
10、支持 UF2 的 USB 大容量存储启动模式,用于拖放式编程

在这里插入图片描述
MicroPython的RP2(Pico)引脚和GPIO是用于与外部设备进行交互的重要组件。

主要特点:

引脚多功能性:RP2(Pico)引脚具有多功能性,既可以作为输入(接收来自外部设备的信号),也可以作为输出(向外部设备发送信号)。这种多功能性使得RP2(Pico)在与各种外部设备进行交互时非常灵活。

GPIO控制:RP2(Pico)引脚通过GPIO(通用输入输出)控制,可以灵活地设置引脚的输入和输出状态。通过设置引脚的输入状态,可以读取外部设备的信号;通过设置引脚的输出状态,可以向外部设备发送控制信号。

中断支持:RP2(Pico)的GPIO支持中断功能,可以在引脚状态发生变化时触发中断,并执行相应的中断处理程序。这种特性对于实时性要求较高的应用非常有用,例如传感器数据的实时采集和响应。

应用场景:

传感器接口:RP2(Pico)的引脚和GPIO功能非常适合用于与各种传感器进行接口连接。可以通过设置引脚的输入模式读取传感器的数据,或者通过设置引脚的输出模式向传感器发送控制信号。

执行器控制:RP2(Pico)的引脚和GPIO可以用于控制各种执行器,如LED、电机、继电器等。可以通过设置引脚的输出模式,向执行器发送控制信号,实现对执行器的开关、调节和驱动。

外部接口扩展:RP2(Pico)引脚和GPIO的多功能性使得它们非常适合用于扩展外部接口。可以通过引脚和GPIO与其他外部模块进行通信,如LCD显示屏、无线通信模块、扩展板等。

需要注意的事项:

引脚电压和电流:在使用RP2(Pico)的引脚和GPIO时,需要注意外部设备的电压和电流要求。确保将引脚连接到合适的电压和电流范围内,避免电气损坏或设备故障。

引脚状态设置:在设置引脚的输入和输出状态时,需要确保正确配置引脚的工作模式和电平状态。错误的设置可能导致不正确的信号读取或输出,影响系统的功能和稳定性。

中断处理:如果使用中断功能,需要仔细设计和实现中断处理程序,确保中断处理程序的执行时间尽可能短,并且不会影响系统的响应性能。

总之,MicroPython的RP2(Pico)引脚和GPIO是与外部设备进行交互的重要组件,具有多功能性、灵活的GPIO控制和中断支持等特点。它们在传感器接口、执行器控制和外部接口扩展等应用场景中发挥重要作用。在使用RP2(Pico)引脚和GPIO时,需要注意外部设备的电压和电流要求,正确配置引脚的工作模式和状态,并合理设计和实现中断处理程序,以确保系统的功能、稳定性和可靠性。

当涉及到与RP2(Pico)引脚和GPIO进行交互的实际应用程序时,以下是几个参考代码案例:

案例1:控制LED灯的闪烁:

import machine
import utime

led = machine.Pin(25, machine.Pin.OUT)  # 将引脚25设置为输出模式

while True:
    led.toggle()  # 切换LED的状态(开/关)
    utime.sleep(1)  # 等待1秒

上述代码案例中,通过将引脚25设置为输出模式,使用toggle()方法来切换LED灯的状态,从而实现LED灯的闪烁效果。

案例2:读取按钮状态并控制执行器:

import machine

button = machine.Pin(14, machine.Pin.IN)  # 将引脚14设置为输入模式
led = machine.Pin(25, machine.Pin.OUT)  # 将引脚25设置为输出模式

while True:
    if button.value() == 1:  # 读取按钮的状态
        led.on()  # 打开LED灯
    else:
        led.off()  # 关闭LED灯

上述代码案例中,将引脚14设置为输入模式用于读取按钮的状态,将引脚25设置为输出模式用于控制LED灯的状态。根据按钮的状态,通过on()和off()方法控制LED灯的开关。

案例3:使用中断处理实现按键响应:

import machine

button = machine.Pin(14, machine.Pin.IN)  # 将引脚14设置为输入模式
led = machine.Pin(25, machine.Pin.OUT)  # 将引脚25设置为输出模式

def button_interrupt_handler(pin):
    if pin.value() == 1:  # 读取按钮的状态
        led.on()  # 打开LED灯
    else:
        led.off()  # 关闭LED灯

button.irq(trigger=machine.Pin.IRQ_FALLING | machine.Pin.IRQ_RISING, handler=button_interrupt_handler)

上述代码案例中,通过设置引脚14为输入模式用于读取按钮的状态,将引脚25设置为输出模式用于控制LED灯的状态。通过irq()方法设置中断触发条件为下降沿和上升沿,并指定中断处理程序button_interrupt_handler。当按钮状态发生变化时,中断处理程序会被触发,根据按钮状态控制LED灯的开关。

案例4:使用RP2(Pico)引脚控制LED灯

from machine import Pin, Timer
import time

# 初始化引脚和计时器
led = Pin(13, Pin.OUT)  # 将13号引脚设置为输出模式
timer = Timer(-1)  # 创建一个定时器,每隔1秒触发一次回调函数

# 设置定时器回调函数
def callback(timer):
    led.value(0)  # 将LED灯设置为关闭状态
    time.sleep_ms(1000)  # 延时1秒
    led.value(1)  # 将LED灯设置为打开状态
    time.sleep_ms(1000)  # 延时1秒

# 启动定时器,每隔1秒触发一次回调函数
timer.init(period=1000, mode=Timer.PERIODIC, callback=callback)

# 主循环
while True:
    pass

案例5:使用RP2(Pico)GPIO读取按键状态

from machine import Pin, Timer
import time

# 初始化引脚和计时器
button = Pin(12, Pin.IN, Pin.PULL_UP)  # 将12号引脚设置为输入模式,并启用内部上拉电阻
timer = Timer(-1)  # 创建一个定时器,每隔1秒触发一次回调函数

# 设置定时器回调函数
def callback(timer):
    if button.value() == 0:  # 如果按键被按下
        print('Button pressed!')
    else:
        print('Button not pressed!')
    time.sleep_ms(1000)  # 延时1秒

# 启动定时器,每隔1秒触发一次回调函数
timer.init(period=1000, mode=Timer.PERIODIC, callback=callback)

# 主循环
while True:
    pass

案例6:使用RP2(Pico)GPIO控制蜂鸣器发声

from machine import Pin, Timer
import time

# 初始化引脚和计时器
buzzer = Pin(14, Pin.OUT)  # 将14号引脚设置为输出模式
timer = Timer(-1)  # 创建一个定时器,每隔1秒触发一次回调函数

# 设置定时器回调函数
def callback(timer):
    buzzer.value(1)  # 将蜂鸣器设置为发声状态
    time.sleep_ms(500)  # 延时500毫秒
    buzzer.value(0)  # 将蜂鸣器设置为停止状态
    time.sleep_ms(500)  # 延时500毫秒

# 启动定时器,每隔1秒触发一次回调函数
timer.init(period=1000, mode=Timer.PERIODIC, callback=callback)

# 主循环
while True:
    pass

案例7:控制 LED 灯的开关:

import machine
import utime

# 初始化 LED 引脚
led_pin = machine.Pin(25, machine.Pin.OUT)

# 打开 LED 灯
led_pin.value(1)
utime.sleep(1)

# 关闭 LED 灯
led_pin.value(0)

这个程序使用引脚和 GPIO 控制 LED 灯的开关。

使用 machine.Pin() 初始化一个引脚对象 led_pin,参数 25 表示引脚的编号,machine.Pin.OUT 表示引脚的输出模式。

通过调用 led_pin.value() 方法可以控制引脚的电平,参数 1 表示输出高电平,即打开 LED 灯。

使用 utime.sleep() 方法实现延迟等待1秒。

再次调用 led_pin.value() 方法,参数 0 表示输出低电平,即关闭 LED 灯。

案例8:读取按钮状态:

import machine

# 初始化按钮引脚
button_pin = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

# 读取按钮状态
button_state = button_pin.value()

# 打印按钮状态
print("按钮状态:", button_state)

这个程序使用引脚和 GPIO 读取按钮的状态。

使用 machine.Pin() 初始化一个引脚对象 button_pin,参数 14 表示引脚的编号,machine.Pin.IN 表示引脚的输入模式,machine.Pin.PULL_DOWN 表示启用下拉电阻。

通过调用 button_pin.value() 方法可以读取引脚的电平状态,返回值为按钮的状态,0 表示按钮按下,1 表示按钮未按下。

通过打印语句输出按钮的状态。

案例9:使用外部中断触发事件:

import machine

# 定义外部中断回调函数
def interrupt_callback(pin):
    print("中断触发")

# 初始化外部中断引脚
interrupt_pin = machine.Pin(16, machine.Pin.IN)
interrupt_pin.irq(trigger=machine.Pin.IRQ_RISING, handler=interrupt_callback)

这个程序使用引脚和 GPIO 实现外部中断触发事件。定义了外部中断的回调函数 interrupt_callback,在中断触发时执行相应的操作。使用 machine.Pin() 初始化一个引脚对象 interrupt_pin,参数 16 表示引脚的编号,machine.Pin.IN 表示引脚的输入模式。通过调用 interrupt_pin.irq() 方法设置外部中断的触发条件和回调函数,参数 machine.Pin.IRQ_RISING 表示上升沿触发中断,handler 参数设置中断触发时调用的回调函数。当外部中断引脚的电平发生上升沿时,将触发中断并执行回调函数。在回调函数中可以编写相应的中断处理代码,这里只是简单地打印一条消息。

请注意,以上案例只是为了拓展思路,可能存在错误或不适用的情况。不同的硬件平台、使用场景和MicroPython版本可能会导致不同的使用方法。在实际编程中,您需要根据您的硬件配置和具体需求进行调整,并进行多次实际测试。

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
树莓派 pico 是一款小型的单板电脑,它搭载了一颗高性能的 ARM Cortex-M0+ 处理器,可以运行多种操作系统,如 MicroPython、Rust 等。pico 的 GPIO 是它最重要的特性之一,可以通过 GPIO 实现多种硬件扩展,包括串口通信。 在 pico 上使用 GPIO 进行串口通信相对简单。首先,我们需要确定哪些 GPIO 引脚支持串口通信。pico 一般有两个 UART 接口,分别是 0 和 1。每个 UART 都需要两个 GPIO 引脚,一个用于接收数据 (RX),一个用于发送数据 (TX)。我们可以通过查看 pico 的数据手册或者使用命令行工具查看 GPIO 引脚标号和功能,确定哪些引脚可以用于串口通信。 下一步,我们需要配置 UART 的一些参数,例如波特率、数据位、停止位等。这可以通过编写一些简单的代码来实现。我们可以使用 MicroPython 或者 C 语言来编写相应的程序,实现 UART 的初始化和数据收发操作。在代码中,我们需要使用相应的 GPIO 引脚作为 RX 和 TX 引脚,在需要发送数据时,将数据写入到 UART 的发送缓冲区,UART 会自动将数据发送出去;当需要读取数据时,我们可以通过查询 UART 的接收缓冲区获取数据。 在实际的项目中,使用 pico 的 GPIO 来进行串口通信非常方便,特别是对于需要进行数据收发的场景。无论是与其他设备进行通信,还是进行数据采集和控制,都可以使用 pico 的 GPIO 来轻松实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值