【雕爷学编程】MicroPython手册之 RP2(Pico) 使用参考

在这里插入图片描述
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)。

技术参数:RP2(Pico)的技术参数如下:

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

主要特点:RP2(Pico)的主要特点有:

低成本:RP2(Pico)的售价仅为 4 美元,是一款非常经济实惠的微控制器开发板。
高性能:RP2(Pico)拥有双核心处理器和丰富的内存资源,可以运行复杂的算法和程序。
灵活性:RP2(Pico)提供了多种编程语言和工具的支持,用户可以根据自己的喜好和需求选择 C/C++ 或 Python 进行开发。
易用性:RP2(Pico)采用了拖放式编程的方式,用户只需要将编译好的 UF2 文件拖放到 Pico 的 USB 存储卷上,就可以完成程序的烧录和运行。
扩展性:RP2(Pico)拥有多达 30 个 GPIO 引脚,可以连接各种传感器、执行器和其他外设,实现各种功能和效果。

应用场景:RP2(Pico)适合用于物联网、机器人、音乐等各种应用场景。例如:

物联网:利用 Pico 的 GPIO、ADC、PWM、I2C、SPI 和 UART 等接口,可以实现各种物联网应用,如智能家居、智能农业、智能交通等。例如,您可以使用 Pico 连接温湿度传感器、继电器和 Wi-Fi 模块,实现远程监控和控制室内环境的功能2。
机器人:利用 Pico 的 GPIO、PWM 和 I2C 等接口,可以实现各种机器人应用,如小车、四轴飞行器、机械臂等。例如,您可以使用 Pico 连接电机驱动模块、超声波测距模块和 OLED 显示屏,实现避障小车的功能2。
音乐:利用 Pico 的 GPIO、PWM 和 SPI 等接口,可以实现各种音乐应用,如合成器、音乐播放器、音乐可视化等。例如,您可以使用 Pico 连接扬声器、麦克风和 TFT 显示屏,实现录音和播放音频的功能2。

注意事项:RP2(Pico)使用参考需要注意的事项有:

安装固件:要在 Pico 上运行 C/C++ 或 Python 程序,您需要先下载相应的 UF2 文件,并将其拖放到 Pico 的 RPI-RP2 卷上,以更新 Pico 的固件。您可以在 树莓派官网 下载适用于 Pico 的 C/C++ 和 Python UF2 文件。
连接串口:要与 Pico 交互,您需要使用 USB 串口工具,如 PuTTY、minicom 或 screen,连接到 Pico 的 USB 串口,并设置波特率为 115200。您也可以使用集成开发环境(IDE),如 Thonny、Mu 或 VS Code,连接到 Pico 的 USB 串口,并使用其内置的编辑器和终端。
编写代码:要在 Pico 上编写 C/C++ 或 Python 代码,您可以使用 IDE 或文本编辑器创建代码文件,并保存为 .c、.cpp 或 .py 格式。您可以使用 Pico C/C++ SDK 或 Pico Python SDK 提供的库和模块,以访问各种功能和硬件资源。
运行代码:要在 Pico 上运行 C/C++ 或 Python 代码,您需要先将代码文件编译为 UF2 文件,并将其拖放到 Pico 的 RPI-RP2 卷上,以烧录和运行程序。如果您想让 Pico 在上电或复位后自动运行某个代码文件,您可以将该文件命名为 main.py 或 boot.py 并保存到 Pico 的根目录下。

【雕爷学编程】MicroPython手册之 RP2(Pico) 使用参考_第1张图片

MicroPython 是一种完整的 Python 3 编程语言,可以直接运行在嵌入式硬件上,如树莓派 Pico1。您可以通过 USB 串口获得一个交互式的提示符(REPL),并立即执行命令,还有一个内置的文件系统。Pico 的 MicroPython 端口包含了访问低级芯片特定硬件的模块。

MicroPython 的 RP2(Pico)的主要功能模块有:

双核心:RP2040 芯片拥有两个 ARM Cortex-M0+ 处理器核心,可以同时运行不同的任务。
外部闪存:Pico 开发板上有一个 2MB 的 QSPI 闪存芯片,可以存储 MicroPython 的固件和用户的代码文件。
USB:Pico 开发板上有一个 USB Type-C 接口,可以用于给 Pico 供电、传输数据和编程。
GPIO:Pico 开发板上有 26 个可编程的通用输入输出引脚(GPIO),可以用于连接各种传感器、执行器和其他外设。
ADC:Pico 开发板上有 4 个模拟输入引脚,可以用于读取模拟信号,如电压、电流和温度。
PWM:Pico 开发板上有 16 个 PWM(脉冲宽度调制)通道,可以用于控制 LED、电机和音频输出。
I2C:Pico 开发板上有 2 个 I2C(双向串行总线)接口,可以用于与其他 I2C 设备通信,如显示屏、RTC(实时时钟)和 EEPROM(电可擦可编程只读存储器)。
SPI:Pico 开发板上有 2 个 SPI(串行外设接口)接口,可以用于与其他 SPI 设备通信,如 SD 卡、Flash 存储器和 TFT 显示屏。
UART:Pico 开发板上有 2 个 UART(通用异步收发器)接口,可以用于与其他 UART 设备通信,如 GPS 模块、蓝牙模块和 Wi-Fi 模块。

RP2的主要特点有:
双核ARM M0+ architecture,运算能力强,速度快
264KB on-chip RAM,足够大部分MicroPython应用
支持MicroPython语法,易学易用
集成PIO状态机,适合控制硬件和低层访问
USB和其他外设接口,易于扩展

RP2的主要应用场景包括:
智能家居、可穿戴等物联网设备的控制端
机器人和其他对实时性有要求的控制系统
传感器数据采集和处理平台
小型的手持或桌面工具仪表

在使用时,需要注意:

PIO和一般GPIO用法不同,需要学习使用方法
无操作系统,需要自行控制任务调度
存储空间有限,代码需优化,可使用外部存储扩展

下面给出一些代码示例:

案例1:控制LED

from machine import Pin
import time
led = Pin(25, Pin.OUT)
while True:
  led.toggle()
  time.sleep(0.5)

案例2:读取温湿度传感器

import dht
from machine import Pin

d = dht.DHT22(Pin(15))
d.measure()
t, h = d.temperature(), d.humidity()

案例3:通过PIO驱动步进电机

import rp2
from machine import Pin

# PIO程序定义步进电机的步进序列
@rp2.asm_pio()  
def stepper():
  wrap_target()
  out(x,1)
  set(x,0)
  
sm = rp2.StateMachine(0, stepper, freq=2000) 
sm.active(1)

pins = [Pin(i, Pin.OUT) for i in (2,3,4,5)]
sm.put(pins) 

【雕爷学编程】MicroPython手册之 RP2(Pico) 使用参考_第2张图片

案例4:闪烁 LED:这是一个最简单的程序,用于控制 Pico 开发板上的内置 LED(GPIO 25)闪烁。代码如下:

# 导入 time 模块,用于延时
import time
# 导入 machine 模块,用于控制 GPIO
import machine

# 创建一个 Pin 对象,表示 GPIO 25 引脚
led = machine.Pin(25, machine.Pin.OUT)
# 创建一个无限循环
while True:
    # 将 led 引脚的电平设置为高(亮)
    led.value(1)
    # 延时 0.5 秒
    time.sleep(0.5)
    # 将 led 引脚的电平设置为低(灭)
    led.value(0)
    # 延时 0.5 秒
    time.sleep(0.5)

案例5:读取温度:这是一个稍微复杂的程序,用于读取 Pico 芯片上的内置温度传感器,并在 REPL 上显示温度值。代码如下:

# 导入 machine 模块,用于控制 ADC
import machine
# 导入 math 模块,用于计算温度
import math

# 创建一个 ADC 对象,表示 ADC 4 引脚(温度传感器)
temp_sensor = machine.ADC(4)
# 创建一个无限循环
while True:
    # 读取 temp_sensor 引脚的模拟值(0-65535)
    reading = temp_sensor.read_u16()
    # 将模拟值转换为电压值(0-3.3V)
    voltage = reading * 3.3 / (65535)
    # 根据电压值计算温度值(摄氏度)
    temperature = 27 - (voltage - 0.706) / 0.001721
    # 在 REPL 上打印温度值,保留两位小数
    print("Temperature: {:.2f} C".format(temperature))

案例6:播放音乐:这是一个较为高级的程序,用于播放一段音乐

# 导入 machine 模块,用于控制 GPIO 和 PWM
import machine
# 导入 time 模块,用于延时
import time

# 创建一个 PWM 对象,表示 GPIO 0 引脚(连接蜂鸣器)
buzzer = machine.PWM(machine.Pin(0))
# 设置 buzzer 的频率为 0(静音)
buzzer.freq(0)
# 设置 buzzer 的占空比为 512(最大值为 65535)
buzzer.duty_u16(512)

# 定义一个字典,表示音符和对应的频率(单位为赫兹)
notes = {
    "C4": 262,
    "D4": 294,
    "E4": 330,
    "F4": 349,
    "G4": 392,
    "A4": 440,
    "B4": 494,
    "C5": 523,
    "D5": 587,
    "E5": 659,
    "F5": 698,
    "G5": 784,
    "A5": 880,
    "B5": 988,
}

# 定义一个列表,表示一段音乐的音符和时长(单位为秒)
music = [
    ("E5", 0.25),
    ("E5", 0.25),
    ("E5", 0.25),
    ("C5", 0.25),
    ("E5", 0.25),
    ("G5", 0.25),
    ("G4", 0.25),
    ("C5", 0.25),
    ("G4", 0.25),
    ("E4", 0.25),
    ("A4", 0.25),
    ("B4", 0.25),
    ("A#4", 0.125),
    ("A4", 0.125),
    ("G4", 0.25),
    ("E5", 0.25),
    ("G5", 0.25),
    ("A5", 0.25),
    ("F5", 0.125),
    ("G5", 0.125),
]

# 创建一个无限循环
while True:
    # 遍历 music 列表中的每个元素
    for note, duration in music:
        # 根据音符设置 buzzer 的频率
        buzzer.freq(notes[note])
        # 延时一定的时长
        time.sleep(duration)
        # 设置 buzzer 的频率为 0(静音)
        buzzer.freq(0)
        # 延时一定的时长(间隔)
        time.sleep(0.05)

【雕爷学编程】MicroPython手册之 RP2(Pico) 使用参考_第3张图片

案例7:控制LED灯:

import machine
import time

led_pin = machine.Pin(25, machine.Pin.OUT)
while True:
    led_pin.toggle()
    time.sleep(1)

这个示例演示了如何使用RP2控制一个LED灯。首先初始化一个Pin对象,指定LED灯所连接的引脚(此处使用引脚25)。然后在一个无限循环中,使用toggle()方法来切换LED灯的状态(亮/灭),并使用time.sleep()方法暂停1秒钟。

案例8:读取按钮状态:

import machine

button_pin = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)
while True:
    button_state = button_pin.value()
    if button_state == 1:
        print("Button is pressed")
    else:
        print("Button is not pressed")
    machine.sleep(100)

这个示例演示了如何读取一个按钮的状态。首先初始化一个Pin对象,指定按钮所连接的引脚(此处使用引脚14),并设置引脚为输入模式和下拉电阻。然后在一个无限循环中,使用value()方法读取按钮的状态(1表示按钮被按下,0表示按钮未被按下),根据状态打印相应的消息,最后使用machine.sleep()方法暂停100毫秒。

9:使用ADC读取模拟传感器数据:

import machine

adc = machine.ADC(26)
while True:
    sensor_value = adc.read_u16()
    print("Sensor value:", sensor_value)
    machine.sleep(1000)

这个示例演示了如何使用RP2的ADC(模数转换器)读取模拟传感器的数据。首先初始化一个ADC对象,指定连接模拟传感器的引脚(此处使用引脚26)。然后在一个无限循环中,使用read_u16()方法读取模拟传感器的数值,返回一个16位的无符号整数。将读取到的数值打印出来,并使用machine.sleep()方法暂停1秒钟。在使用MicroPython和RP2进行开发时,需要根据具体的硬件连接和需求进行引脚配置和功能调用。以上示例代码仅供参考,具体的应用程序可能需要根据实际情况进行适当的修改和调整。

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

【雕爷学编程】MicroPython手册之 RP2(Pico) 使用参考_第4张图片

你可能感兴趣的:(MicroPython手册,单片机,嵌入式硬件,python,MicroPython,RP2(Pico),使用参考)