Arduino生态系统正在不断发展,由于Dhruva Gole的出色工作,它也来到了Zephyr。
在2022年Google与Goliot的编程之夏论坛中,Dhruva接受了将Arduino核心与Zephyr RTOS集成的挑战。现在该程序已接近完成,我们致力于构建和运行可以直接调用Zephyr库和子系统的Arduino草图。当然,Zephyr的跨平台特性意味着突然有更多的板可以运行该Arduino代码。
什么是 GSoC?
Google Summer of Code是一个专注于为开源做出新贡献的计划。该计划将参与者(通常是学生,但不一定)与导师配对,以实现之前GSoC计划接受的特定目标。 Dhruva在2021年致力于为BeagleBone AI平台带来Bela支持。他为Zephyr和Arduino的开源生态系统做出了巨大贡献。与此同时,我们能够分享Golioth工程团队的运作方式。解决I2C系统的一些棘手问题、例如在DeviceTree中映射Zephry Arduino头范例以及让构建系统无需额外的命令行参数即可工作,这些都为我们提供了很好的集体合作机会。
已取得的成果
Zephyr是一个实时操作系统(RTOS),专注于抽象硬件功能,以便相同的代码可以在无数的硬件平台上运行。这是Arduino代码的极好基础。成功组合后,Arduino草图可以在没有 Arduino端口的硬件上运行。与此同时,Zephyr的多线程和网络堆栈等功能也可供Arduino 草图使用。迄今为止该项目所达到的里程碑包括:
Arduino数字GPIO功能(例如:pinmode、digitalRead、digitalWrite)
Arduino时间函数(例如:延迟、毫秒)
通过Wire库API提供I2C支持(与外部Arduino库配合使用)
用于将Arduino接头引脚映射到任何Zephyr板的DeviceTree框架
Serial.println支持正在进行中
如何使用它?
该项目被组织为名为Arduino-Zephyr-API的Zephyr模块。任何支持Zephyr的板都可以在此模块的变体目录中定义。这是通过添加DeviceTree覆盖文件(将电路板的引脚映射到 Arduino生态系统中的引脚编号)和引脚映射头文件(使用熟悉的Arduino API调用包装 Zephyr引脚功能)来完成的。
使用Zephyr元工具west,可以编译Arduino草图并将其刷新到您的目标板。除了核心功能之外,添加RTOS还开启了在Arduino中使用多线程的能力。 Dhruva提供了通过异步闪烁多个LED实现的出色线程演示。
有关将模块添加到Zephyr安装的基本说明可在项目自述文件中找到。添加开发板的文档目前正在进行中,将于9月份GSoC计划结束时完成。
未来贡献者面临的挑战
将Arduino核心与Zephyr集成的繁重工作已经完成,并且运行良好。但要使用它,您必须已经安装了Zephyr工作区(并且知道如何使用它)。当然,Golioth有帮助安装Zephyr的快速入门,但现有Arduino用户需要能够从Arduino IDE使用此项目。
不幸的是,没有时间进行这种级别的集成。但对该计划的贡献是受欢迎的,我们希望未来的贡献者能够承担这项任务。
在实现最常用的Arduino功能方面,还有一些容易实现的成果。例如,随机数、位和字节以及数学函数都应该很容易运行。更有雄心的贡献者可以考虑将Zephyr ADC系统映射到 analogRead()和analogWrite()。