Arduino in RIOT. More...
Arduino in RIOT.
This module enables users to run unmodified Arduino sketches in RIOT. For this we aim at supporting the full Arduino API.
The support of the Arduino API in RIOT is useful for multiple reasons:
Refer to Arduino API for the actual API documentation
To run your Arduino sketch in RIOT, just follow these steps:
arduino
module to your application, your Makefile
should now look something like this: *.sketch
to be processed.make all
, make flash
, make term
, etc.That's all. As bonus you can of course use any existing RIOT code inside your Arduino sketches - you simply have to add the includes to your sketch and the corresponding modules to your Makefile
.
*.sketch
to be recognized by RIOT's build systemFor enabling RIOT to run Arduino sketches, we extended the build system to handle *.sketch
files and we implemented the Arduino API using RIOT's native functions.
Building Arduino sketches in RIOT is done in a three step process.
First, the make system defines a generated arduino_sketches
module placed into $(BINDIR)
Arduino sketches makefile, which is included from the Makefile.include of the RIOT Arduino module. The generated module is added to used modules and build directories.
Second, as prerequisites for the link
target, the make system will create the module into $(BINDIR)/arduino_sketches
with an arduino_sketches.cpp
source file. Into this file, it copies some Arduino glue code ( pre.snip and post.snip) together with the contents of all *.sketch
files contained in the application folder.
Third, the RIOT make system is called as usual, building the generated library with the Arduino code and including it in the final firmware.
For supporting the Arduino API, we have created our own function and class definitions, using the exact same signatures as in the original Arduino header files. These headers are then implemented using standard RIOT APIs, e.g. the peripheral drivers, xtimer
, etc.
libstdcpp
) is not required.As a minimum requirement, the features arduino_pins
is a hard dependency. See Digital Pins what a board needs to provide this.
Additional mappings for analog pins (see Analog Pins) and PWM pins (see PWM Pins) is required to be able to use analogRead()
and analogWrite()
.
See also IO-Mapping and Shields on how a board can provide more I/O mappings and even declare electrical and mechanical compatibility with common Arduino form factors.
Make it possible to bootstrap Arduino code manually from any RIOT application. Include a pseudomule as e.g. arduino_base, which does not implement a main function calling setup()
and loop()
, so these functions have to be called manually from a RIOT application.
Implement analog outputs (PWM mapping)
Implement analog inputs (ADC mapping)
Add means to include various Arduino Libraries (maybe as pkg?)
Implement anything else that is missing...
Adapt Arduino build script, so sketches do not have to have the file ending *.sketch
anymore
Modules | |
Arduino API | |
Implementation of the Arduino API in RIOT. | |
Files | |
file | Arduino.h |
Wrapper to keep source code compatibility for Arduino.h. | |
file | arduino_board.h |
Configuration of the Arduino API for Arduino Atmega boards. | |
file | arduino_board_analog.h |
Arduino analog pin map. | |
file | arduino_board_pins.h |
Arduino digital pin map. | |
file | arduino_board_pwm.h |
Mapping of Arduino digital pin numbers to PWM settings. | |
file | SPI.h |
Wrapper to access the definition of the Arduino 'SPI' interface. | |
file | Wire.h |
Wrapper to keep source code compatibility for Wire.h. | |