在您的 IoT 项目中使用库
对于您的物联网项目,Libmraa 和 UPM 是必不可少的库。
获取新的 Intel® IoT Developer Kit,这是一个完整的硬件和软件解决方案,允许开发人员使用 Intel® Galileo 和 Intel® Edison 板创建令人兴奋的新解决方案。访问 Intel® 物联网开发者中心。
函数和库
函数是专注于特定任务的代码块。函数主要有两种类型:打包在库中的函数和您在代码中定义的函数。C++、Python*、Java* 和 Node.js* 等编程语言提供内置函数,您可以随时调用它们。在不同的编程语言中,函数有不同的名称,例如 *方法、子程序*和*过程*。
库是函数的集合。例如,sqrt(x) 是 math.h C++ 库中的一个数学 C++ 内置函数;它有助于计算给定数字的平方根。这样的库包含多个函数,例如对数(log10)和指数(exp)。对于与物联网 (IoT) 相关的项目,两个主要的库尤其有用:Libmraa* (MRAA) 和 Useful Packages & Modules (UPM)。在处理硬件时,您需要工具来与主板的各个部分及其连接的传感器进行通信。这些库提供了各种传感器的定义,并且与多个主板兼容。
Libmraa*
如果您想使用 Libmraa*,您必须先在您的 Intel® Galileo 或 Intel® Edison 板上安装它。该库使您能够通过库提供的函数与主板进行交互。Libmraa 为每个主板及其组件定义了配置。它提供了一个应用程序编程接口 (API),用于与低级外围设备进行接口,例如通用输入/输出 (GPIO)、脉冲宽度调制 (PWM)、蓝牙*低功耗、集成电路 (I2C)、串行外设接口 (SPI) 和通用异步收发器 (UART)。芯片和传感器的物理引脚映射到 Libmraa。您不需要了解各种组件之间通信细节:库会处理主板和 breakout 板的连接引脚。图 1 说明了 Edison 板上的引脚,表 1 反映了一小部分引脚。您可以看到 I2C 引脚是物理引脚 J17-引脚 8,在 MRAA 中映射到 7;另外,PWM 显示为物理引脚 J18-引脚 7,MRAA 映射到引脚 20。这样,当您对 MRAA 引脚进行编程时,它将与主板上映射的物理引脚通信。您可以在论文 Intel® Edison Breakout Board 中看到完整的 breakout 板和引脚。
表 1. Intel® Edison 主板引脚子集
引脚 | 描述 | ||
---|---|---|---|
J17 - 引脚 1 | GP182_PWM2 | 支持 PWM 输出的 GPIO | |
J17 - 引脚 5 | GP135 | UART2_TX | GPIO, UART2 发送输出 |
J17 - 引脚 8 | GP20 | I2C1_SDA | GPIO, I2C1 数据开漏输出 |
J18 - 引脚 7 | GP12_PWM0 | 支持 PWM 输出的 GPIO | |
J18 - 引脚 8 | GP183_PWM3 | 支持 PWM 输出的 GPIO | |
J18 - 引脚 12 | GP129 | UART1_RTS | GPIO, UART1 就绪发送输出 |
Libmraa 包含多个 API 类,每个类都有许多您可以为物联网项目使用的函数。以下是这些函数的一个小列表:
GPIO 类。 Libmraa 的 GPIO 接口;函数包括:
- mraa_gpio_init_raw 函数
- mraa_gpio_context
- mraa_gpio_dir
I2C 类。 Libmraa 的 I2C 接口;函数包括:
- mraa_i2c_init
- mraa_i2c_read
AIO 类。 Libmraa 的模拟输入/输出 (AIO) 接口;函数包括:
- mraa_aio_init
- mraa_aio_set_bit
PWM 类。 Libmraa 的 PWM 接口;函数包括:
- mraa_pwm_init_raw
- mraa_pwm_period_ms
SPI 类。 Libmraa 的 SPI 接口;函数包括:
- mraa_spi_write
- mraa_spi_transfer_buf
- mraa_spi_bit_per_word
UART 类。 Libmraa 的 UART 接口;函数包括:
- mraa_uart_set_baudrate
- mraa_uart_set_flowcontrol
- mraa_uart_set_timeout
COMMON 类。 定义 Libmraa 的基本共享值;函数包括:
- mraa_adc_raw_bits
- mraa_get_i2c_bus_count
- mraa_get_platform_type
有关每个类支持的函数的完整列表和说明,请参阅 mraa 文档。
要使用 MRAA 提供的所有功能,您必须在代码中包含 mraa.h。图 2 展示了一个 C 语言示例,用于将 LED 连接到主板上的 D5 并使用 GPIO 函数。结果是 LED 闪烁;sleep 函数控制 LED 在亮和灭状态之间切换的频率。
Useful Packages & Modules
UPM 为各种常用传感器和执行器提供软件驱动程序。驱动程序使硬件能够与操作系统通信。UPM 比 MRAA 更高级,并辅助控制 RGB LCD 和温度传感器等元素的面向对象操作。支持的传感器列表非常广泛,包括加速度计、按钮、颜色传感器、气体传感器、全球定位系统 (GPS)、射频识别和伺服电机。 查看完整列表。
图 3 说明了如何使用 UPM 库读取按钮的输入。首先,您需要包含 grove.hpp 库,该库允许您使用 upm::GroveButton 函数创建一个按钮对象,然后使用 `name()` 和 `value()` 函数从传感器获取所需的值。 查看更多 UPM 示例。
Eclipse* 和 Intel® XDK IoT Edition 等集成开发环境 (IDE) 将 MRAA 和 UPM 作为集成库提供。支持的 IDE 可从 Intel® IoT Developer Kit 集成开发环境 下载。在使用 Eclipse 时,您可以选择创建一个新的物联网项目,其中将包含一些其他项目类型中没有的工具(图 4)。
物联网传感器支持工具(图 5)包含传感器和执行器的列表,并附有硬件的描述和图片。只需选择您将在项目中包含的所有硬件,该工具就会自动将相关的库添加到您的代码中。例如,如果您将使用 MMA7455 加速度计,该工具将在您的当前 .ccp 代码中附加 `#include
Libmraa 和 UPM 协同工作,提供您轻松与项目中元素交互所需的工具。它们消除了了解每块硬件的引脚和需求的麻烦,将所有具体细节打包成友好易用的库。从原型设计自动喂食器到创建使用 GPS、加速度计和 RGB LCD 来跟踪您运动的可穿戴设备,您都可以借助 MRAA 和 UPM 来开发您的项目。
这两个库都是开源项目,拥有专门的 GitHub* 存储库(请参阅 upm 和 mraa 存储库)。欢迎开发人员协助增强和编写新的 API 和函数,并审查文档。贡献者需要遵循编码和文档风格。感谢开源社区的努力,各种编程语言的新函数和库被频繁添加。
摘要
库及其函数有助于编写更清晰、更高效且可重用的代码。对于内置函数,您无需担心计算是如何执行的:只要您使用所需输入来实现函数,它就会生成所需的输出。对于您的物联网项目,Libmraa 和 UPM 是必不可少的库。