CircuitPython:用于教育的嵌入式 Python

电子说

1.2w人已加入

描述

“变化是唯一不变的”是希腊哲学家赫拉克利特的智慧明珠。这一点在数字电子世界中最为真实。C 语言是 1970 年代初期计算热潮的产物,自从 BASIC 语言放弃其对微控制器编程的统治地位以来,它就一直主导着嵌入式开发。今天风向又变了,这次转向了日益流行的 Python 编程语言。MicroPython 在过去几年出现,以弥合面向桌面的 CPython 参考语言与相对有限的微控制器硬件规格之间的差距。

尽管如此,对于新手嵌入式开发人员来说,MicroPython 还是有点挑战。输入CircuitPython,它是 MicroPython 语言的一个分支,经过调整以满足学生和其他希望学习现代嵌入式系统开发的人的特定需求。自 2017 年夏季首次发布以来,由Adafruit Industries主办的CircuitPython 语言在制造商和教育标记中的受欢迎程度一直在稳步增长。

在其当前迭代中,即本文的 6.1.0 版,CircuitPython 支持由 Microchip Technology Atmel SAMD21和SAMD51微控制器以及 Nordic Semiconductor nRF52840片上系统 (SoC) 提供支持的众多开发板。以前的 CircuitPython 版本支持流行的 ESP8266 微控制器,但从版本 4 开始不再支持。虽然 CircuitPython 在许多方面与 MicroPython 相似,但它确实去除了复杂性并为那些刚刚接触嵌入式电子产品的人提供了更直接的开发工作流程。

CircuitPython 入门

首先,与 MicroPython 一样,CircuitPython 需要将特殊固件上传到开发板,称为 USB 闪存版本 2 或 UF2。许多受支持的开发板都预装了固件。但是,所有开发板都提供一种机制,使系统进入引导加载程序模式,从而允许刷新 UF2 固件。UF2 固件特定于每个开发板,因此请确保下载特定于您的开发板的最新固件。CircuitPython网站使这项任务变得简单。将开发板插入计算机并启用引导加载程序模式后,开发板应显示为名为BOOT的闪存驱动器。只需将之前下载的UF2文件拖入BOOT的根目录即可驾驶。成功安装后,将出现一个名为CIRCUITPY的新驱动器。至此,开发板已经为它的第一个项目做好了准备。

虽然任何代码编辑器都可用于编辑 CircuitPython 源文件 (.py ),但建议初学者使用Mu 编辑器。安装并运行编辑器后,只需单击“新建”按钮即可创建一个空白的 Python 脚本文件。有大量示例代码可以满足几乎所有需求。当然,举世闻名的Blinky LED就是硬件世界的Hello, World。这是一个闪烁 LED 的示例:

进口板

进口数码

导入时间

led = digitalio.DigitalInOut(board.D13)

led.direction = digitalio.Direction.OUTPUT

而真实的:

led.value = 真

时间.睡眠(0.5)

led.value = 假

时间.睡眠(0.5)

输入代码后,将文件命名为code.py并将其保存到CIRCUITPY驱动器的根目录。如果您将文件保存在其他地方,例如桌面,只需单击文件并将其从桌面拖动到CIRCUITPY驱动器图标即可。重要说明,文件名对 CircuitPython 很重要,因为有些文件名是为特殊目的保留的。code.py 文件在每次重新加载后运行。要建立仅在启动时运行一次的任何设置函数,请将该代码放在名为boot.py的文件中。

CircuitPython 的一个很好的特性是它可以检测到任何时候添加或更新文件并自动重新启动代码。无需按下重置按钮或拔下/重新插入开发板的 USB 电缆。所有源代码都保留为用户可读文件,因此您可以将开发板连接到任何计算机并以零配置管理工作进行代码更改。换句话说,您始终在设备上拥有最新的源代码。

CircuitPython 通过使用库使扩展功能变得非常简单。在CIRCUITPY驱动器的根文件夹中,应该有一个名为 lib 的文件夹。如果没有,使用计算机的文件资源管理器从头开始创建文件夹是安全的。这是存储添加功能或与传感器和执行器交互所需的所有支持文件的地方。CircuitPython 提供标准的库包,这些库在 CircuitPython 开发人员中很受欢迎。这些库文件针对嵌入式设备进行了显式优化,并以 . MPY文件扩展名。确保库包的版本号与您正在使用的 CircuitPython 的版本号相匹配至关重要。在升级 CircuitPython 固件时,不要忘记同时升级库包。

CircuitPython 与 MicroPython

CircuitPython 和 MicroPython 之间的其他一些主要区别包括:

所有构建都启用了浮点数。

不支持并发。

CircuitPython 中引入了一种安全模式,可在检测到硬崩溃或掉电情况时阻止用户代码运行。

模块别名不可用。换句话说,uos和utime模块不能作为os和time 使用。为了保持 CPython 兼容性,CircuitPython 操作系统和时间模块是其 CPython 对应项的子集。因此,CircuitPython 代码在 CPython 中是可执行的,但反之则不一定。

引入存储模块来挂载文件系统。

与其他 Python 版本一样,CircuitPython 通过读取-评估-打印循环 (REPL) 终端提供交互式编程体验。对于 CircuitPython,可以在主代码完成后通过串行终端连接到电路板并按键盘上的任意键进入 REPL 环境。输入 REPL 会禁用自动重新加载功能。

CircuitPython 的另一个令人兴奋的方面是Blinka。虽然 CircuitPython 在微控制器上运行,但 Blinka 将 CircuitPython 库带到了微型个人计算机上,这些个人计算机被称为单板计算机 (SBC),例如 Raspberry Pi。对于那些来自桌面开发人员背景的人,Blinka 使 MicroPython 成为可在面向桌面的 Python 版本中运行的 pip 可安装 Python 库,从而使使用与 SBC 相同的库与各种传感器和执行器交互成为可能用于微控制器。

Python,Python,无处不在

CircuitPython 是进入嵌入式系统软件开发“Python 化”的激动人心的入口。它的设计简单,加上强大的功能集,使其成为教育工作者和创客等人的诱人编程语言。CircuitPython 还为专业人士提供了独特的机会。对于嵌入式工程师来说,学习 Python 等强大语言的机会有助于教授桌面和 Web 应用程序技能。对于传统的桌面应用程序软件开发人员,CircuitPython 提供了一种将他们的编码技能从 PC 迁移到嵌入式系统的方法。

无论您的经验如何,CircuitPython 都是嵌入式开发领域值得一提的新编程语言。它的独特功能使嵌入式开发入门变得轻而易举,同时还提供了一些新概念,这些概念也应该会吸引资深程序员。CircuitPython 是嵌入式开发编程语言传奇历史中一个受欢迎的新成员。

我们想知道您是否有使用 CircuitPython 的经验?在Twitter 上与我们联系并与我们分享您的 CircuitPython 支持的项目!有兴趣开始使用 CircuitPython,请查看此Adafruit CircuitPython 入门工具包。

审核编辑 黄昊宇

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分