在《开始使用 MicroPython 和 Raspberry Pi Pico》中,我们了解到如何在 Raspberry Pi Pico 设备上设置、配置和运行 MicroPython。在本文中,我们将专注于实现该流程的自动化,并将其转变为持续集成 (CI) 流水线。将自动化转到 CI 将保证我们每次将交付推送到代码存储库时都会测试代码
既然我们已经了解如何开始使用 MicroPython 和 Raspberry Pi Pico 设备,那么接下来就该寻找进一步自动化代码开发过程的方法。在《开始使用 MicroPython 和 Raspberry Pi Pico》中,我们运行了几个不同的指令以演示 Raspberry Pi Pico 设备的不同功能集。在本文中,我们将研究如何使用脚本自动执行其中一个示例,然后将其置入 CI。让我们先观看在终端运行的示例:
此指令为我们提供了计算机实例信息。在示例中:
由此得知,我们在配备 RP2040 芯片的 Raspberry Pi Pico 上运行 MicroPython 1.19.1 版本。与其使用 PuTTY 或 Thonny IDE 通过解释器外层运行此指令,我们实际上可以使用与 MicroPython 库捆绑在一起的工具从指令行运行整个过程。Pyboard.py 工具为我们提供了一种机制,可以直接在目标设备上运行指令,而无需打开解释器外层(或者将新文件直接加载到电路板上)。此外,它还为我们提供了其他文件系统指令,例如列出文件并将其复制到目标设备/从目标设备复制文件。例如,可以使用 Pyboard.py 工具运行 sys.implementation 指令(上方),具体如下所示:
python pyboard.py --device $TARGET_PORT --command "import sys; print(sys.implementation)"
$TARGET_PORT 是您设备显示的 COM 端口。这会跳过 Putty/Thonny IDE 步骤并允许自动化。
现在可以在目标设备上远程自动执行指令,我们应该能够将其折叠成完整的 Python 脚本。事实证明,使用 Pyboard 库非常简单。在此示例 Python 脚本中,我们使用某些额外技巧来运行上面的相同指令(例如自动检测 COM 端口并添加基于断言的检查)。不过,原则是相同的:获取机器实例并验证我们认为正在运行的内容。
将以上所有装入脚本后,我们现在可以将其置入 CI 系统。我和往常一样使用 Gitlab 来实现,但使用我自己的运行器来编程 Raspberry Pi Pico 设备。您可以在此处关注整个项目,但有趣的文件是 .gitlab-ci.yml 脚本。它包含每次我更改代码并将其推送回 Gitlab 时自动进行构建的“说明”。
这里有几项“作业”,但只有一项不涉及 Raspberry Pi Pico 设备:Docker 构建阶段。构建 Docker 容器会将我们的环境装入虚拟机之类的系统。如果我在 Docker 容器中运行 CI 作业,我几乎可以在任何地方运行(给定一些最低要求)。在这种情况下,我不需要在连接到我的目标设备的台式计算机上安装任何特殊库,因为 Docker 容器附带了所有这些库。这样做的唯一区别是我的 Docker 容器必须在“特权”模式下运行(或者至少应提供访问目标设备的明确许可),否则它将无法与目标设备通信。
Docker 容器构建完成后,我就能在每次运行作业时从 Gitlab 检索图像,然后从中感受乐趣。您会注意到我的作业变得越来越抽象,也变得越来越复杂。最后,在上一份作业中,我们通过 Pytest 框架运行整个过程
如果您熟悉我之前的一些文章,比如《FPGAs: Creating Continuous Integration Pipelines for Embedded Systems or PCBs》、《Low-Cost Verification for Digital and Analog Filters》和《Configuring a Hardware in the Loop Project》,您会注意到我是 Pytest 框架的忠实粉丝。在这种情况下,MicroPython 也不例外,我仍然默认为 Pytest 作为验证我的部分 Python 脚本的简单方法。
调用的最后一个 CI 作业运行 test_rpi_pico.py Pytest 脚本。这与 rpi_pico_check.py 脚本几乎相同,只是它创建了测试报告。与往常一样,我们拿出那份测试报告并将其提交给 Gitlab 进行解析,这样我们就可以让那个小型测试部分显示通过结果:
图 1:Pytest 的测试摘要
这个简单的测试验证了我们在上一篇文章中看到的信息。这里的优点是自动化。每当修改代码时,我们都会进行检查,以确保它是我们期望的设备。在本例中,我们使用 RP2040 芯片在 Raspberry Pi Pico 上运行 MicroPython 版本 1.19.1。
在本文中,我们回顾了与 Raspberry Pi Pico 设备通信所涉及的手动步骤。然后,我们采用该手动过程并将其转换为脚本。通过脚本自动化流程后,我们研究了如何将工作流集成到 CI 系统,然后再将其与 Pytest 合并。看完本文中的示例后,您应该能够编写自己的脚本,甚至可以将其集成到 CI。
联系我们
打破信息孤岛,增强电子产品开发各个方面的协作
Experience hands-on learning in PCB and hardware design with Altium's Student license, cloud access & comprehensive curriculum.
Gain the skills top employers look for. Start mastering PCB design with the Altium Student Lab today!
Develop the electronics design expertise that employers look for with Altium’s free Student Lab!
Start your electronics design career with Altium's free Student Lab, comprehensive curriculum & certificates
Prepare for a stellar career in electronics and hardware design with Altium’s free Student Lab.
Get ready for a fast-track career in PCB and hardware design with Altium's free Student Lab.