65.9K
CodeProject 正在变化。 阅读更多。
Home

Arduino Create 中的 MRAA 和 UPM 基础

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2017年11月10日

CPOL

3分钟阅读

viewsIcon

8127

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_contextinitialize gpio = mraa_gpio_init(516),使用 Arduino API 时已经为您处理了

要查看另一个使用 mraa 的示例,请参阅此教程

MRAA github 存储库包含许多示例 https://github.com/intel-iot-devkit/mraa/tree/master/exampleshttps://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

© . All rights reserved.