用微控制器进行编码教学的Python实现【CircuitPython】

376 阅读7分钟

github.com/adafruit/ci…

CircuitPython是一个对初学者友好的、开源的Python版本,适用于被称为微控制器的微小、廉价的计算机。微控制器是许多电子产品的大脑,包括用于建立业余项目和原型的各种开发板。电子学中的CircuitPython是学习代码的最佳方式之一,因为它将代码与现实联系起来。只需在支持的USB板上安装CircuitPython,通常通过拖放,然后在CIRCUITPY驱动器上编辑一个code.py文件。代码会自动重新加载。除了一个文本编辑器,不需要安装任何软件 (we recommend Mu for beginners.)

从CircuitPython 7.0.0开始,一些板子可能只能通过蓝牙低能量(BLE)连接。这些板子通过BLE而不是使用开放协议的USB提供串行和文件访问。(有些板子可能同时使用USB和BLE。)BLE访问可以通过各种应用程序完成,包括 code.circuitpython.org.

CircuitPython具有统一的Python核心API和不断增加的300多个与之配合的设备库和驱动程序的列表。这些库也可以在单板计算机上使用普通的Python通过 Adafruit Blinka Library.

CircuitPython是基于 MicroPython. 通过 below 查看区别. 大部分(但不是全部)CircuitPython的开发是由以下机构赞助的 Adafruit 并可在其教育开发板上使用。请同时支持MicroPython和Adafruit。

Get CircuitPython

所有支持的板卡的官方二进制文件都可以通过以下方式获得 circuitpython.org/downloads. 该网站包括稳定版、不稳定版和持续版。完整的发布说明可通过 GitHub releases获取.

Documentation

指南和视频可通过 Adafruit Learning System通过 CircuitPython category. API参考资料也可在 Read the Docs. 可以在以下网站上找到一系列令人敬畏的资源 Awesome CircuitPython.

对于新手特别有用的文件:

Code Search

GitHub目前不支持对分叉的代码搜索。因此,CircuitPython没有通过GitHub进行代码搜索,因为它是MicroPython的一个分叉。幸运的是。 SourceGraph 拥有像CircuitPython这样的公共仓库的免费代码搜索。因此,请访问 sourcegraph.com/github.com/… 来在线搜索CircuitPython代码库。

Contributing

通过 CONTRIBUTING.md 完整的指南,但请注意,如果你为这个项目做出贡献,就意味着你同意了这个项目。 Code of Conduct. 遵循的贡献者 Code of Conduct 欢迎提交PULL请求,它们将被项目管理员及时审查。欢迎加入 Discord .

Branding

虽然我们很高兴看到CircuitPython被分叉和修改,但我们希望被分叉的版本不要使用 "CircuitPython "这个名字或Blinka的标志。"CircuitPython "对我们和那些了解它的人都有特殊的意义。因此,我们希望确保提及它的产品符合一套共同的要求。

如果你想在你的产品上使用 "CircuitPython "和Blinka这个词,我们有以下要求。

  • Your product is supported by the primary "adafruit/circuitpython" repo. 这样,我们就可以在更新CircuitPython内部结构的同时更新任何自定义代码。

  • Your product is listed on circuitpython.org (source here). 这是为了确保你的产品的用户总是能够从标准的地方下载最新版本的CircuitPython。

  • Your product supports at least one standard "Workflow" for serial and file access:

  • 有一个用户可访问的USB插头,插上后显示为CIRCUITPY驱动器。

  • 使用BLE工作流程,通过蓝牙低能量进行文件和串行访问。

  • 使用WiFi工作流程通过WiFi进行文件访问,通过USB和/或WebSocket进行串行访问。

  • 不支持USB工作流程的板子应该被清楚地标记出来。

如果你选择不满足这些要求,那么我们要求你将你的CircuitPython版本称为其他版本(例如,SuperDuperPython),并且不使用Blinka标志。如果大多数CircuitPython驱动可以与之兼容,你可以说它是 "CircuitPython兼容"。


不同于 MicroPython

CircuitPython。

  • 在大多数板子上支持原生USB,否则支持BLE,无需特殊工具即可编辑文件。
  • 所有的构建中都启用了浮点(又称小数)。
  • 错误信息被翻译成10多种语言。
  • Python内部的并发性没有得到很好的支持。中断和线程被禁用。在某些板块上,async/await关键字可用于合作多任务。对于需要并发的任务,如音频文件播放,可以用本地模块实现一些并发。

Behavior

  • 文件的运行顺序以及文件之间共享的状态。CircuitPython的目标是明确每个文件的作用,使每个文件相互独立。

  • boot.py在工作流被初始化之前,只在启动时运行一次。这为在启动时配置USB奠定了基础,而不是将其固定。由于串口不可用,输出被写到boot_out.txt

  • code.py(或main.py)在每次重载后运行,直到它完成或被中断。在它运行完毕后,虚拟机和硬件被重新初始化。 这意味着你不能再从 code.py中读取状态,因为REPL是一个新的虚拟机。** CircuitPython这一变化的目标包括减少关于引脚和内存使用的混淆。

  • 主代码完成后,可以通过按任何键进入REPL。

  • 自动加载状态将在重新加载时保持。

  • 增加了一个安全模式,在发生硬崩溃或变色后不运行用户代码。这使得在崩溃后通过大容量存储修复导致讨厌的崩溃的代码成为可能。修复后需要重置(按钮)才能回到正常模式。

  • RGB状态LED指示CircuitPython状态。- 一次绿色闪烁--代码完成,没有错误。- 两次红色闪烁--代码因异常而结束。- 三次黄灯闪烁--安全模式。可能是由于CircuitPython的内部错误。

  • 在文件系统被工作流写入后重新运行code.py或其他主文件。(用supervisor.disable_autoreload()来禁用)

  • 当 REPL 处于活动状态时,自动加载被禁用。

  • 主文件是这些文件中的一个。 code.txt, code.py, main.py, main.txt

  • Boot是这些中的一个。 boot.py, boot.txt.

API

  • 统一的硬件API。记录在案的有 ReadTheDocs.
  • API文档是Python在C文件中的存根 shared-bindings.
  • No machine API.

模块

  • 没有模块的别名。(uosutime分别不能作为ostime使用。) 相反,ostimerandom与CPython兼容。
  • 新的storage'模块,管理文件系统挂载。(功能来自MicroPython中的uos`)。
  • 与CPython对应的模块,如timeosrandom,是严格的 subsets of their CPython version. 因此,CircuitPython的代码可以在CPython上运行,但不一定是相反的。
  • 嘀嗒声可作为 time.monotonic()

项目结构

以下是顶级源代码目录的概述。

Core

MicroPython的核心代码在包括CircuitPython在内的各个端口之间共享。

  • docs 以Sphinx reStructuredText格式的高级用户文档。
  • drivers 用Python编写的外部设备驱动。
  • examples 一些Python脚本的例子。
  • extmod 在多个端口模块中使用的共享C代码。
  • lib 共享的核心C代码,包括外部开发的库,如FATFS。
  • logo CircuitPython的标志。
  • mpy-cross 一个交叉编译器,在MicroPython中运行前将Python文件转换为字节码。有助于减少库的大小。
  • py 核心Python实现,包括编译器、运行时和核心库。
  • shared-bindings 共享Python模块的定义,它们的文档和支持的C APIs。端口必须实现 C API 以支持相应的模块。
  • shared-module共享的Python模块的实现,可以基于common-hal
  • tests 测试框架和测试脚本。
  • tools各种工具,包括pyboard.py模块。

Ports

端口包括一个单片机线路特有的代码。

SupportedSupport status
atmel-samdSAMD21 stable SAMD51 stable
cxd56stable
espressifESP32 beta ESP32-C3 beta ESP32-S2 stable ESP32-S3 beta
litexalpha
mimxrt10xxalpha
nrfstable
raspberrypistable
stmF4 stable others beta
unixalpha
  • stable 极不可能有bug或功能缺失。
  • beta 正在积极改进,但可能会有功能缺失和bug。
  • alpha 会有bug和功能缺失。