使用 MicroPython 在树莓派 Pico 上编程

Python 编程语言是为台式机、笔记本电脑和服务器等计算机系统开发的。像 Raspberry Pi Pico 这样的微控制器板更小、更简单、内存也更小,这意味着它们不能运行与大型 Python 语言相同的 Python 语言。这就是 MicroPython 诞生的意义。MicroPython 最初由 Damien George 开发,于 2014 年首次发布,是一种专门为微控制器开发的 Python 兼容编程语言。它包含了许多主流 Python 的特性,同时添加了一系列新的特性,旨在利用 Raspberry Pi Pico 和其他微控制器板上灯可用的设备。如果你以前与 Python 编程过,你会立即发现 MicroPython 很熟悉。如果没有,不要担心,这是一个学习起来很容易的语言!

Thonny Python IDE 介绍

A 工具栏 – 工具栏提供基于图标的快速访问系统,用于常用的程序功能,如保存、加载和运行程序。
B 脚本区域 – 脚本区域是编写 Python 程序的位置。它被分割成你的程序的主要区域和 显示行数的少量侧边距。
C Python 控制台 – Python 控制台允许你键入单个指令,当你按下回车键时,这些指令就会运行,并提供有关运行程序的信息。这也称为 REPL,用于「读取、评估、打印和循环」。
D 解释器 – Thonny 窗口的右下角显示并允许你更改当前的 Python 解释器——用于运行你的程序的 Python 版本。

Thonny 连接到 Pico

在开始用 MicroPython 编程之前,需要设置所谓的集成开发环境(IDE)。Thonny,一个流行的 Python 和 MicroPython IDE,已经预装在 Raspberry Pi OS 上。如果你在另一个 Linux 发行 版、Windows 或 macOS 上使用Pico,请打开 Web 浏览器,访问 thonny.org,并单击页面顶部的下载链接,下载用于你的操作系统的 Thonny 和 Python 包安装程序。

作为一个集成的开发环境,Thonny 将你需要编写或开发的所有不同工具聚集在一起或集成到单个用户界面或环境中。有许多不同的 IDE——有些允许你使用多种不同的编程语言进行开发,而另一些则像 Thonny 一样专注于单一语言。

当你的 Pico 已经连接到树莓派时,点击 Thonny 窗口的右下角,上图区域 D。这里显示了你当前的解释器,它负责接受你输入的指令,并将它们转换成计算机或微控制器可以理解和运行的代码。通常解释器是在 Raspberry Pi 上运行的 Python 的副本,但是为了在你的 Pico 上运行你的程序,需要对它进行修改。

在显示的列表中,查找「MicroPython(Raspberry Pi Pico)」,然后单击它。如果你在列表中看不到它,请仔细检查你的 Pico 是否正确插入 microUSB 数据线,以及 micro USB 数据线是否正确插入到树莓派或计算机。

看看 Thonny 窗口底部的 Python 控制台: 你会看到它现在输出显示「MicroPython」,并告诉你,它正在运行在「Raspberry Pi Pico」。恭喜你,你已准备好了编程环境。

第一个 MicroPython 程序:Hello, World!

开始编写第一个程序时,请单击 Thonny 窗口底部的 Python Shell 区域,只需在底部「>>>」提示符的右侧,输入以下指令之后回车。

print("Hello, World!")

你会看到你的程序立即开始运行:Python 将在相同的 Shell 区域响应,并打印出「Hello, World!」,这是因为 Shell 与运行在你的 Pico 上的 MicroPython 解释器直接相连,后者的工作是查看你的指令并解释它们的含义。这就是所谓的互动模式,你可以把它想象成与某人面对面的对话:你刚说完话,对方就会做出回应,然后等着你接下来说什么。

使用 Shell 为 Pico 编程有点像电话对话:当你按下回车键时,你的指令将通过 microUSB 线发送到运行在 Pico 上的 MicroPython 解释器;解释器查看你的指令并执行,然后通过 microUSB 线把执行结果发送回给 Thonny。

不过,你不必通过 Shell 在交互模式下编程。点击 Thonny 窗口中间的脚本区域,然后再次输入你的程序:

print("Hello, World!")

当你这次按下回车键时,除了在脚本区域中获得新的空白行外,什么都没发生。要使此版本的程序工作,你必须单击 Thonny 工具栏中的「运行」图标,或单击「运行」菜单,然后单击「运行当前脚本」。

你会被询问是否要保存程序到这台电脑,即 Raspberry Pi,或「MicroPython device」,即 Pico。单击「MicroPython device」,然后键入一个文件名,如 Hello_World.py,然后单击 OK 按钮。

一旦你的程序保存好,它就会自动在你的 Pico 上运行。你会看到两条消息出现在 Shell 区 域的底部的 Thonny 窗口:

>>> %Run -c $EDITOR_CONTENT
Hello, World!

其中第一行是 Thonny 的指示,告诉 Pico 上的 MicroPython 翻译运行脚本区域的内容:「EDITOR_CONTENT」。第二个是程序的输出——你让 MicroPython 打印的信息。恭喜你!现在你 已经以交互模式和脚本模式写了两个 MicroPython 程序,并成功地在你的 Pico 上运行了它们!

还有一件事需要解决,就是重新加载你的程序。按窗口右上角的「X」键关闭 Thonny,然后再次加载它。这次不是编写一个新程序,而是点击 Thonny 工具栏中的「Open」图标。就像当你保存你 的程序时,你会被询问是否要保存到「This computer」或你的「MicroPython device」。点击「MicroPython device」,你会看到你已经保存到你的 Pico 的所有程序的列表。

在列表中查找 Hello_World.py,单击选择它,然后单击OK。你的程序将加载到 Thonny,准备好被编辑或你再次运行它。

循环和代码缩进

与标准 Python 程序一样,MicroPython 程序通常从上到下运行。它依次运行每一行,在进入下一 行之前通过解释器运行它,就像你在 Shell 中逐行输入它们一样。

但是,仅仅逐行运行指令列表的程序并不是很聪明——因此,MicroPython 就像 Python 一样,有自己的方法来控制程序运行的顺序,即缩进。

通过单击 Thonny 工具栏中的新图标创建一个新程序。你不会失去现有的程序,相反,Thonny 将在脚本上方的区域创建一个新的标签。输入以下两行开始你的程序:

print("Loop starting!")
for i in range(10):

第一行向 Shell 输出一条简单的消息,就像你的 Hello World 程序一样。第二行开始一个定义的循环,它将重复-循环-一个或多个指令的一组次数。一个变量i被赋值给循环,并给出一系列数字。range 指令从数字 0 开始计次,但永远不会到达数字 10。冒号告诉 MicroPython 循环本身从下一行开始。

变量是强大的工具。顾名思义,变量是可以改变的值,或在程序的控制下随时间变化。最简单 的说,一个变量有两个方面——它的名称和它所存储的数据。在循环的情况下,变量的名字是「i」,其数据由 range 指令设置——从 0 开始,每次循环结束并重新开始时增加 1。

为了在循环中真正包含一行代码,它必须缩进——从脚本区域的左侧移动进来。下一行以四个 空格开始,当你按下第二行回车后,Thonny 将自动添加这些空格。现在输入:

print("Loop number", i)

与程序中的其他行相比,这四个空格将这行推入内部。缩进是 MicroPython 区分循环外部指令 和循环内部指令的方式:缩进的代码构成了循环内部,被称为嵌套代码。

你将注意到,当你在第三行末尾按下回车时,Thonny 会自动缩进下一行——假设它是循 环的一部分。要删除这个缩进,只需在输入第四行之前按下退格键一次:

print("Loop finished!")

你的四行程序现在已经完成。第一行位于循环之外,并且只运行一次;第二行设置循环;第三个循
环位于循环内部,每次循环运行一次;第四行还是在循环外面。

print("Loop starting!")
for i in range(10):
	print("Loop number", i)
print("Loop finished!")

单击 Run(运行)图标,选择通过点击「MicroPython device」选择将程序保存在 Pico 上,并将其命名为 Indentation.py。该程序将在保存后立即运行,查看 Shell 区域的输出。

Loop starting!
Loop number 0
Loop number 1
Loop number 2
Loop number 3
Loop number 4
Loop number 5
Loop number 6
Loop number 7
Loop number 8
Loop number 9
Loop finished!

缩进是 MicroPython 的一个强大部分,也是程序不能按预期工作的最常见原因之一。当寻找程 序中的问题时,一个称为调试的过程,总是反复检查缩进,特别是当你开始在循环中嵌套循环 时。

MicroPython 还支持无限循环,它可以无限循环。要将程序从确定循环变为无限循环,请编辑 第 2 行:

while True:

如果你现在单击 Run 图标,你将得到一个错误:名称「i」没有定义。这是因为你已经删除了为
变量「i」创建并赋值的行。要修复这个问题,只需编辑第 3 行,这样它就不再使用变量了:

print("Loop running!")

再次点击 Run 图标,如果你动作快,你会看到「Loop starting! 」消息后面跟着一串永无休止的「Loop running!」消息。「Loop finished!」消息将永远不会打印,因为循环没有结束。每次 Python 打印完「Loop running!」消息时,它返回到循环的开始处并再次输出。

点击 Thonny 工具栏上的 Stop 图标,告诉程序停止正在做的事情,即中断程序并重新启动 MicroPython 解释器。你将看到 Shell 区域中出现一条消息,程序将停止,而不会到达第 4 行。

条件和变量

和所有编程语言一样,MicroPython 中的变量的存在不仅仅是为了控制循环。点击 Thonny 工具栏上的 New 图标启动新程序,然后在脚本区域输入以下内容:

user_name = input ("What is your name? ")

点击 Run 图标,通过点击「MicroPython device」选择将程序保存在 Pico 上,并将其命名为 Name_Test.py,并观察 Shell 区域中发生了什么:将询问你的姓名。在 Shell 区域中输入你的名字,然后回车。因为这是你的程序中唯一的指令,其他的都不会发生。

如果想要对放入变量中的数据进行实际操作,则需要在程序中增加更多行。

为了让你的程序用这个名字做一些有用的事情,从第 2 行开始输入一个条件语句:

if user_name == "Clark Kent":
	print("You are Superman!")
else:
	print("You are not Superman!")

记住,当Thonny看到你的代码需要缩进时,它会自动这么做——但它不知道什么时候你的代码 需要停止缩进,所以你必须自己删除空格。

单击 Run 图标并在 Shell 区域中键入你的名字。除非你的名字恰好是「Clark Kent」,否则你会看到「You are Superman!」再次点击 Run,这次输入 Clark Kent 的名字,确保写的和程序中完全一样,用大写的 C 和 K。这次,程序承认你实际上是超人。

「==」符号告诉 Python 进行直接比较,查看变量 user_name 是否与程序中的文本(即字符串)匹配。

如果你处理的是数字,你还可以进行其他的比较「>」查看一个数字是否大于另一个数字,「<」查看它是否小于,「>=」查看它是否大于或等于,「<=」查看它是否小于或等于。还有「!=」,意思是不等于,是「==」的反义词。这些符号在技术上称为比较运算符。 注意:使用变量的关键是了解「=」,与「==」两者的区别。记住,「=」的意思是「使这个变量等于这个值」,而「==」的意思是「检查变量是否等于这个值」。把它们混在一起肯定会导致程序无法工作! 比较操作符也可以在循环中使用。删除第 2 行到第 5 行,然后在它们的位置输入以下内容:

while user_name != "Clark Kent":
	print("You are not Superman - try again!")
	user_name = input("What is your name? ")
print("You are Superman!")

再次点击 Run 图标。这一次,程序不会退出,而是会不断询问你的名字,直到确认。有点像一个非常简单的密码。要退出循环,可以在脚本区域输入「Clark Kent」,或者单击 Thonny 工具栏上的 Stop 图标。

祝贺你!你现在知道如何使用条件语句和比较操作符了!

你还可以:
查看系列教程中的其他文章「树莓派 Pico 上手指南(在 Pico 上使用 MicroPython)」
购买本教程所用到的 Pico 上手套件



坐沙发

发表评论

你的邮件地址不会公开


*