Arduino Create 中的 MRAA 和 UPM 基础
MRAA 支持 GPIO、I2C、PWM、SPI 和 UART。 还有一个非常有用的库构建在 MRAA 之上,它是单个传感器的抽象。 它被称为 UPM。 在 Arduino Create 中,使用 MRAA 的平台支持 UPM。
什么是 MRAA 和 UPM?
MRAA (mraa.io) – 发音为 ‘em rah’,是 Arduino Create* 中基于 Linux* 平台的硬件抽象层。 它是一个开源项目,支持多种板卡和编程语言。 使用 MRAA 可以让你初始化和使用板上的引脚,并且 API 易于理解。
MRAA 抽象硬件的方式是通过用户空间级别的引脚映射。 因此,当您使用 MRAA 时,您需要设置您的平台,以便为您的特定板卡正确完成映射。 完整的支持板卡列表可以在 https://github.com/intel-iot-devkit/mraa#supported-boards 中找到
MRAA 支持 GPIO、I2C、PWM、SPI 和 UART。 还有一个非常有用的库构建在 MRAA 之上,它是单个传感器的抽象。 它被称为 UPM,您可以在 https://upm.mraa.io/ 上阅读相关内容。 在 Arduino Create 中,使用 MRAA 的平台支持 UPM。
子平台
使用 MRAA 时,您可以选择定义一个子平台。 子平台使用与平台相同的 API 运行,但您需要将所有引脚的偏移量加上 512。 请注意,每个使用 MRAA 的应用程序只能有一个子平台。 使用子平台最常见的原因是扩展平台的 I/O 功能。
例如,如果您想使用通过 USB 连接的普通 Arduino* 板将传感器添加到笔记本电脑,您可以将 Arduino 板用作子平台。 您需要首先使用 StandardFirmata.ino 草图刷写 Arduino 板,然后将其作为子平台添加到代码的顶部
mraa_add_subplatform(MRAA_GENERIC_FIRMATA, "/dev/ttyACM0");
Arduino 设备通常添加为 ttyACM0
,但有时添加为 ttyACM1
或更高。 最简单的检查方法是输入
ls /dev/ttyACM*
注意:如果您使用的是 Arduino 101*(在美国境外品牌为 Genuino 101*),您应该使用此草图代替:http://iotdk.intel.com/misc/ConfigurableFirmataCurieImu.ino.bin
如何在 Arduino Create* 中使用 MRAA?
您可以直接使用 MRAA API 来增加功能,或者只是因为您更喜欢这样做。 例如
void setup() { mraa_add_subplatform(MRAA_GENERIC_FIRMATA, "/dev/ttyS1"); pinMode(516, OUTPUT); } void loop() { digitalWrite(516, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(516, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } And mraa_gpio_context gpio; void setup() { mraa_add_subplatform(MRAA_GENERIC_FIRMATA, "/dev/ttyS1"); gpio = mraa_gpio_init(516); mraa_gpio_dir(gpio, MRAA_GPIO_OUT); } void loop() { mraa_gpio_write(gpio, 1); // turn the LED on delay(1000); // wait for a second mraa_gpio_write(gpio, 0); // turn the LED off delay(1000); // wait for a second }
做同样的事情。 请注意以下事项
- 即使您使用 Arduino API,仍然需要使用 mraa_add_subplatform 添加子平台
- 如果使用 MRAA API,您需要设置
mraa_gpio_context
并initialize gpio = mraa_gpio_init(516)
,使用 Arduino API 时已经为您处理了
要查看另一个使用 mraa 的示例,请参阅此教程。
MRAA github 存储库包含许多示例 https://github.com/intel-iot-devkit/mraa/tree/master/examples 和 https://github.com/intel-iot-devkit/mraa/tree/master/examples/c%2B%2B,这些示例可以移植到 Arduino Create。
如何在 Arduino Create* 中使用 UPM?
为了使任何 UPM 库工作,您需要包含与该特定传感器对应的头文件。
不幸的是,如果在 Arduino Create 中搜索库并包含它,所有 UPM 传感器库都将被包含,而您可能只需要一两个。
解决方案是首先在列表 https://iotdk.intel.com/docs/master/upm/modules.html 中找到您的传感器
然后复制 .h 文件的名称。
在你的草图顶部包含它,例如
#include <jhd1313m1.h>
要查看它是如何实例化的,请参阅 https://github.com/intel-iot-devkit/up-squared-grove-IoT-dev-kit-arduino-create/tree/master/examples/GroveLCD
一个更通用的例子可以在这里找到:https://github.com/intel-iot-devkit/upm/blob/master/examples/c%2B%2B/jhd1313m1-lcd.cxx
我去哪里寻求帮助?
如果您遇到问题,最好的去处是在 MRAA 或 UPM github 存储库上创建一个 issue