使用 Raspberry Pi Pico 的 MicroPython 初学者指南

Raspberry Pi Pico 是 Raspberry Pi 系列的最新成员。在此之前,Raspberry Pi 系列产品是能够运行操作系统的单板计算机。

基于新的 RP2040 芯片,Raspberry Pi Pico 同时支持 MicroPython 和 C/C++。使用 Raspberry Pi Pico,初学者和爱好者可以控制硬件和连接的设备。 Raspberry Pi Pico 的 GPIO 引脚可用于使灯光变暗、读取开关状态等。

什么是微Python?

微控制器上的编程主要是用 C 语言完成的,正如在Arduino 开发板中所见。然后在 2014 年,发布了一种新的微控制器编程语言 MicroPython。 MicroPython 允许您在微控制器的裸机上编写 Python 代码。这意味着您可以在没有操作系统的情况下编写 Python 代码。

Python 是一种初学者友好的高级编程语言,可让用户专注于学习编程概念。这与 MicroPython 非常相似。

使用 LED

为了控制硬件,Pico 与沿其两侧的一系列引脚进行通信。这些称为通用输入输出 (GPIO) 引脚,板载 LED 可在 GPIO 25 上找到。要控制它,首先导入必要的库:

 import machine
 import utime

然后使用机器库调用Pin函数来处理Pin的GPIO pin,本例中我们将Pin设置为GPIO 25,所以它是第一个参数。第二个参数将它设置为输出引脚而不是输入引脚,这样做,引脚知道它应该做什么:

 onboard_led = machine.Pin(25, machine.Pin.OUT)

继续,在下面的代码中,我们告诉 Pico 然后将其 GPIO 25 处的引脚设置为 1,或“开启”。

 while True:
onboard_led.value(1)

但是,您可能会意识到似乎什么也没有发生。这是因为 Pico 的工作速度非常快,因此 LED 亮起的速度比您肉眼所能察觉的要快。为了解决这个问题,我们需要使用utime库中的 sleep 命令来减慢程序的速度。 LED 将打开和关闭的完整代码如下所示:

 import machine
import utime
onboard_led = machine.Pin(25, machine.Pin.OUT)
while True:
onboard_led.value(1)
utime.sleep(5)
onboard_led.value(0)
utime.sleep(5)

打开和关闭 LED

或者,还有另一种打开和关闭 LED 的方法,使用切换命令:

 import machine
import utime
onboard_led = machine.Pin(25, machine.Pin.OUT)
while True:
led_onboard.toggle()
utime.sleep(5)

在示例中, toggle命令取代了将 LED 的值设置为 1 和稍后设置为 0 的需要。它仍然会亮起 5 秒,然后再熄灭 5 秒,只要程序正在运行。

创建函数

随着程序变得越来越复杂,将代码块组合在一起有助于保持一致性。为此,像 Python 一样的 MicroPython 允许使用函数。函数是一组执行特定任务的相关语句。例如,在下面的代码中,定义了一个名为printNames的函数:

 def printNames:
print(“Raspberry Pi 1”)
print(“Raspberry Pi 2”)
print(“Raspberry Pi 3”)
print(“Raspberry Pi 4”)
print(“Raspberry Pi Compute Module”)
print(“Raspberry Pi 400”)
print(“Raspberry Pi Pico”)
printNames()

代码中的最后一行调用该函数以便它实际执行。

循环

条件逻辑根据布尔约束的计算结果为真还是假来执行不同的操作。许多Raspberry Pi Pico 项目都基于这些逻辑陈述。在以下示例中,使用 if-else 语句来确定是否执行打印语句:

 i = 17
def printNames():
if i > 15:
print("i is greater than 15!")
else:
print("i is not greater than 15")
printNames()

在下一个示例中,for 循环与range函数一起使用。这些循环可用于多次重复一个代码块。

在这个例子中,打印命令将被执行五次,每次执行之间有 5 秒的延迟,使用sleep命令:

 import utime
def printNames():
for i in range(5):
print("Raspberry Pi Pico")
utime.sleep(5)
printNames()

模数转换器 (ADC)

虽然您看不到它,但 Raspberry Pi Pico 有一个内部模数转换器。在以下示例中,电位计连接到 GPIO 26 上的 Raspberry Pi Pico,它具有 ADC 功能:

 import machine
import utime
pot = machine.ADC(26)
while True:
print(pot.read_u16())
utime.sleep(1)

在这里,在我们可以使用这个支持 ADC 的引脚之前,它需要设置 ADC 功能。然后在程序运行时,电位计的值将每秒打印一次。 Raspberry Pi Pico 上支持 ADC 的其他引脚包括 GPIO27、28 和 29。

脉宽调制 (PWM)

微控制器的数字输出只能是 1 或 0。要创建模拟信号,您需要一个数模转换器。然而,另一种方法是通过使用脉宽调制或简称 PWM 来人为地创建模拟信号。

通过打开和关闭数字信号,这被称为脉冲。通过调制脉冲宽度,可以人为地创建模拟信号,如下例所示:

 import machine
import utime
pot = machine.ADC(26
led = machine.PWM(machine.Pin(21))
led.freq(1000)
while True:
led.duty_u16(pot.read_u16())

首先,机器和utime库被导入。使用 GPIO 引脚 21 上激活的 PWM 输出创建一个对象onboard_led 。然后,使用freq命令设置频率以调制脉冲宽度。想象一下转动电位器,当转动一个方向时,LED 会变亮。

发生这种情况是因为电位器的模拟值被用作 PWM 信号占空比的值,它是一个介于 0 和 65535 之间的值。但是,如果不进行转换,稍微转动电位器可能已经导致 LED 达到其最大亮度级别.

为了解决这个问题,使电位器只在转动到最后时才达到全亮度,使用duty_u16函数转换该值。此函数将其转换为 16 位整数,该整数介于 0 和 1024 之间,这与您从 Pico 的模拟引脚接收的值范围相同。

使用 Raspberry Pi Pico 创造更多

本文介绍了 Raspberry Pi Pico 上 MicroPython 中的基本命令。有关更多信息,请查看有关使用 Raspberry Pi Pico进行MicroPython 编程的官方文档。

如果尚未在您的 Raspberry Pi Pico 上进行设置,请使用Thonny IDE来运行您的 MicroPython 代码,或者查看Unicorn CPU 模拟器以直接在您的计算机上运行虚拟微控制器。