Integrated Computer Solutions (ICS) is known for its expertise in user interface design and software implementation for embedded, mobile, desktop and interactive kiosk systems. Our work is visible in everything from smartphones to vending machines and medical equipment to vehicles of all sizes. What has less visibility – literally – is our low-level work with hardware, operating systems and device drivers. A recent project related to the Internet of Things gave us a chance to highlight some of these capabilities.
Internet of Things, or IoT for short, is the latest thing in high tech and even the non-high tech world. Ask one hundred people for their definition of IoT and you will get one hundred different answers. In general, IoT means devices with some level of intelligence and communication ability working together to provide a complete solution. Whether it is a household thermostat communicating with a smartphone or a moisture sensor activating a water feed for a dry houseplant, the whole is greater than the sum of its parts. IoT ranges from the very small and trivial to the very large and complex.
The advent of cheap microcontrollers and affordable system on a chip (SoC) computers has accelerated the expansion of IoT, and the flood of low cost sensors and devices has accelerated the trend. Need a sensor to determine the temperature in the house for that thermostat? No problem, plenty to choose from. How about that moisture sensor for your plant caretaking mechanism? There are more styles than you ever thought.
The range of microcontrollers and SoC is just as vast. Intel® offers Edison and Galileo, plus NUC and MinnowBoard MAX. One of the most popular controllers is the familiar Raspberry Pi. Other choices are the BeagleBone Black and Banana Pi. The list goes on.
Getting microcontrollers and SoC computers to talk to each other might be straightforward, but sometimes it can be tricky to get the microcontroller or computer to work with a sensor or device. Enter MRAA.
MRAA (pronounced em-rah) is a low-level library written in the C language to simplify communication and control on GNU/Linux platforms. The purpose of MRAA is to abstract the details associated with accessing and manipulating the basic I/O capabilities of a platform into a single, concise API. MRAA makes developing programs less complicated because it can be used along with other software to create platform-independent code.
MRAA supports working with sensors and devices that use:
- Analog Input
- Digital Input and Output
- Pulse Width Modulation (PWM)
- Inter-Integrated 2-wire bus (I2C) Devices
- Devices that make use of Universal Asynchronous Receiver-Transmitter (UART) hardware
ICS wrote drivers for over 130 sensors, devices and actuators using MRAA and contributed them to UPM, the high level repository for sensors that use MRAA (github.com/intel-iot-devkit/upm). An ICS engineer also wrote an extensive white paper covering the use of MRAA with such devices. Download a copy here: Using MRAA to Abstract Platform I/O Capabilities