利用 Mbed 生态系统加速物联网产品开发
投稿人:DigiKey 北美编辑
2019-11-20
嵌入式和物联网 (IoT) 开发团队承受着压力,需要尽快完成并交付设计。为了能够快速行动,他们需要使用经过验证且具有强大生态系统的元器件和软件框架。他们还需要研究如何维护系统,以及将来如何扩展,这意味着解决方案还需要具备可移植性,并且在需要时能够跨多种硬件平台工作。
但是,微控制器供应商经常将开发人员束缚在自己的生态系统中,这使得在微控制器之间进行切换不是那么容易。此外,微控制器生态系统的软件工具常常不足,大部分是基于 C 语言,这对开发团队而言也是绊脚石。
考虑到这些需求,本文将介绍 Arm Mbed 平台和操作系统。文中将展示开发人员如何利用 Mbed 生态系统来加速嵌入式产品开发,并使用它来扩展到微控制器供应商生态系统之外的世界。
什么是 Arm Mbed?
Mbed 是由 Arm 主导的面向物联网设备开发人员的在线协作体系1。Mbed 为开发人员提供极为丰富的资源来加速开发,从 Mbed OS、Mbed TLS 一直到 Mbed 库支持的开发板和各种元器件。
Mbed 的初衷是让开发人员能够利用在线社区中 200,000 开发人员以及主要微控制器供应商(例如 Cypress Semiconductor、NXP Semiconductors 和 STMicroelectronics)所支持的大型生态系统,借助现有元器件、开发工具和库来加快开发速度。使用 Mbed 生态系统有许多优势:
- 库和示例均用 C++ 编写,C++ 是一种现代的面向对象语言,其设计使得代码可扩展且可重用。
- 支持利用现有硬件平台快速开发嵌入式产品原型以证明其可行性。
- 使用 Mbed 在线和离线编译器以及 Mbed 命令行界面 (CLI),简化软件测试的开发(测试甚至包括在许多示例和库中)。
- 内置用于开发物联网设备的工具,例如云连接器服务,不仅简化了设备到云的连接,而且简化了通过其他基于云的服务管理设备的工作。
Mbed 的通用架构模型给嵌入式开发人员提供了极大的灵活性和可扩展性。举例来说,该架构模型一般分为三个单独的层(图 1):
- 低级硬件抽象层 (HAL)
- Mbed OS API,用作中间件,提供存储、RTOS、安全连接、通信堆栈等能力
- 高级物联网层,包括开发人员的应用程序代码、Mbed OS 库和连接客户端
图 1:Mbed 架构包含三个主要层,可以根据需要进行扩展和补充:一个通过 HAL 抽象的低级硬件接口,一个对中间件进行抽象的 Mbed OS API 层,以及一个用于编写应用程序代码并利用库和 Pelion 等客户端的高级层。(图片来源:Arm Mbed)
该架构的设计方式让开发人员可以加入应用所需的组件,而省去其余工作。这使该架构具有可伸缩性和灵活性,方便开发人员用来快速开发原型,并在较短时间内将原型变为量产产品。
Mbed 从硬件开始
尽管 Mbed 提供了良好的软件基础,但除了软件和开发软件所需的工具之外,还会提供其他功能。团队开发产品的最快方法是在使用软件的同时利用 Mbed 硬件生态系统。硬件生态系统包括三个不同方面:
- 模块
- 开发板
- 元器件
模块本质上是以物联网为中心的连接设备,它以经过认证且随时可用的封装形式提供。例如,开发人员若要开发一款支持 LoRaWAN 的产品,可以选择 Multi-Tech Systems 的 MTMDK-XDOT-NA1-A00 xDot 模块开发套件(图 2)。xDot 模块在视距应用中可提供长达 10 英里的双向通信距离,在建筑物中可提供 1 到 3 英里的双向通信距离,数据速率从每秒 293 位 (bps) 到每秒 20 Kb (kbps)。该模块使用低功耗 STMicroelectronics 的 STM32L151CCU6 处理器,其工作频率为 32 兆赫 (MHz),可以通过 SPI、UART 或 I2C 接口利用 AT 消息传递方案进行控制。
图 2:xDot 模块为开发人员提供经过认证的 LoRaWAN 模块,该模块受 Mbed 软件堆栈的支持,可以大大缩短开发人员实现和运行解决方案的时间。(图片来源:Multi-Tech Systems Inc.)
Mbed 板本质上是 Mbed 全面支持的不同微控制器系列的开发板。每个开发板都有微控制器供应商提供的独特特性和功能。例如,对支持低功耗蓝牙 (BLE) 的开发板感兴趣的开发人员,可能会喜欢 Cypress Semiconductor 的 CY8CKIT-062-BLE(图 3)。
图 3:CY8CKIT-062-BLE 开发板具备多种用于开发物联网连接设备的特性,包括电子墨水显示屏、电容式触控按钮和滑块、BLE 模块以及 KitProg2 调试器。(图片来源:Cypress Semiconductor)
CY8CKIT 的独特之处在于它使用多核 PSoC 62 安全微控制器。一个内核是 Arm® Cortex®-M4 处理器,第二个内核是低功耗 Arm Cortex-M0 +。这使开发人员可以划分应用程序代码,例如让一个处理器处理 BLE 通信,或者使用 Cortex-M0+ 内核作为安全处理器来锁定应用程序。板上提供的 I/O 扩展可将 Mbed 元器件连接到系统,从而大大减轻开发人员开发系统原型的工作。
Mbed 元器件是一个硬件元器件,具有 Mbed 支持的库及其相关的中间件,这些库和中间件充当产品开发的构件。例如,从事物联网项目的开发人员可能会决定要使用温度传感器。开发人员可以在 Mbed 元器件中搜索其支持的温度传感器,例如,他们可能会在外设模块中发现 Maxim Integrated 的 MAX31723PMB1,该模块可用于快速开发原型(图 4)。
此类 Mbed 元器件的优点在于,它们几乎总是作为开发板提供并带有原理图。这样,开发人员不仅可以查看使传感器工作所需的硬件配置,还可以使用软件库来启动和运行传感器。
图 4:MAX31723PMB1 数字温度计和温控器外设模块(原理图所示)可以轻松插入 Mbed 开发板,然后使用相关的 Mbed 元器件库来快速连接温度传感器并与之交互。(图片来源:Maxim Integrated)
Mbed 并非只有像测量温度和湿度的传感器那样的简单传感器。例如,开发医疗设备的开发人员会发现,Maxim Integrated 的 MAXREFDES220# 模块为他们提供了基于手指的心率和 SpO2 血氧传感器的参考设计(图 5)。
图 5:MAXREFDES220# 模块为开发人员提供了一个支持基于手指的心率和 SpO2 监测的开发板。(图片来源:Maxim Integrated)
此外,还有诸如 Seeed Technology 的 114991252 VL53L0X Flow 分线板之类的组件,它们可用于光线检测和 3D 飞行时间 (ToF) 测距等应用(图 6)。例如,尝试在边缘开发基于手势的技术的开发人员,可能会对该传感器感兴趣。
图 6:Seeed Technologies 的 114991252 Flow 传感器分线板可轻松集成到 Mbed 开发板中,用于需要光线检测的应用或手势检测等 3D 飞行时间应用。(图片来源:Seeed Technology)
开发人员选定开发板和元器件之后,便可开始利用 Mbed 进行开发,通过创建“Hello World” LEDBlinky 应用程序来测试他们是否可以成功对开发板进行编程并使 LED 灯闪烁。
用 Mbed 编写“Hello World” LEDBlinky 应用程序
开发 Mbed 应用程序有多种方法:通过在线编译器;通过离线编译器;或使用命令行界面 (CLI) 工具。根据个人经验,建议使用 CLI,因为它能更好地控制开发过程,并且更易于集成到开发流程中,例如测试工具和连续集成服务器。
CLI 提供了命令行界面功能,因此使用 Windows 的开发人员可以使用命令提示符来编译代码。创建 LEDBlinky 应用程序的第一步是使用 Mbed 随附的预写示例。这可以通过在命令提示符中输入以下命令来完成:
mbed import mbed-os-example-blinky
下载示例需要几分钟时间,因为还会下载 Mbed OS 和应用中可能会使用的其他支持组件。下载完成后,开发人员便可导航到 mbed-os-example-blinky 文件夹,其中有一个 main.cpp 文件。开发人员可以在自己喜欢的编辑器中打开此模块,其中代码大致如下所示:
复制 #include "mbed.h" #include "platform/mbed_thread.h" #include "stats_report.h" DigitalOut led1(LED1); #define SLEEP_TIME 500 // (msec) #define PRINT_AFTER_N_LOOPS 20 // main() runs in its own thread in the OS int main() { SystemReport sys_state( SLEEP_TIME * PRINT_AFTER_N_LOOPS /* Loop delay time in ms */); int count = 0; while (true) { // Blink LED and wait 0.5 seconds led1 = !led1; thread_sleep_for(SLEEP_TIME); if ((0 == count) || (PRINT_AFTER_N_LOOPS == count)) { // Following the main thread wait, report on the current system status sys_state.report_state(); count = 0; } ++count; } }
开发人员可以在此进行修改,但是对于本文而言,使用默认值即可。更值得注意的是编译和部署代码。具体用来编译和部署代码的命令将因硬件而异。下面的例子显示了如何使用一条命令对 Cypress CY8CKIT-062-BLE 开发板进行编译和编程:
mbed compile -m CY8CKIT_062_BLE -t GCC_ARM -f
第一次编译项目可能需要几分钟,因为工具链需要构建所有自动进入 Mbed 应用程序的关联文件。编译周期完成后,结果应类似于下面的图 7 所示。
图 7:成功编译 LEDBlinky 项目后 Mbed 编译器的输出。(图片来源:Jacob Beningo)
命令行中的 -f 选项将会自动获取已编译的十六进制文件,并将其复制到开发板上,开发板显示为 DAPLink 大容量存储设备。此时,LED 应该闪烁,开发人员可以开始开发主要应用程序。
Mbed 的使用技巧与诀窍
Mbed 入门非常简单,但对于开发人员来说可能存在挑战。以下是关于开始使用 Mbed 开发产品的一些“技巧与诀窍”:
- 避免使用在线编译器。虽然这对于业余爱好者来说很好,但对于专业人士而言,让其他人的服务器拥有源代码可能是个问题。此外,来回云端可能会减慢调试速度。诸如 Mbed IDE 或 Mbed CLI 之类的本地编译器是更好的选择。
- Mbed 支持多线程,但默认情况下,主函数在自己的线程中运行。
- 从 Mbed 示例项目开始,对其进行考察,了解如何更有效地使用 Mbed 应用程序。
- 利用 Mbed 测试工具确保应用开发没有无意间破坏 Mbed 框架中的任何内容。
- 使用 Mbed 硬件站点搜索可以快速集成在一起来开发产品的开发板、元器件和模块。
上述技巧将有助于确保开发人员尽量减少花费在嵌入式产品开发上的时间。
总结
嵌入式和物联网开发人员需要一个受到良好支持的生态系统来为他们提供现代化的工具、流程和软件,帮助他们加快开发工作并使开发成本最小。如本文所示,Mbed 平台和 OS 是开发人员可以利用的一种潜在选择。
Mbed 提供可扩展且灵活的软件架构,其中包含许多已经集成在一起并经过测试的组件。由于对各种硬件模块、开发板和元器件的强大支持,开发人员可以轻松创建产品原型,然后将其扩展成生产解决方案。
参考资料
免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。