Simple RPC implementation for Arduino.

https://img.shields.io/github/last-commit/jfjlaros/simpleRPC.svg https://travis-ci.org/jfjlaros/simpleRPC.svg?branch=master https://readthedocs.org/projects/simplerpc/badge/?version=latest https://img.shields.io/github/release-date/jfjlaros/simpleRPC.svg https://img.shields.io/github/release/jfjlaros/simpleRPC.svg https://img.shields.io/github/languages/code-size/jfjlaros/simpleRPC.svg https://img.shields.io/github/languages/count/jfjlaros/simpleRPC.svg https://img.shields.io/github/languages/top/jfjlaros/simpleRPC.svg https://img.shields.io/github/license/jfjlaros/simpleRPC.svg

This library provides a simple way to export Arduino functions as remote procedure calls. The exported method definitions are communicated to the host, which is then able to generate an API interface.

Features:

  • For each method, only one line of code is needed for exporting.
  • Automatic parameter- and return type inference.
  • Support for all native C types and strings.
  • Support for arbitrary functions and class methods.
  • Optional function and parameter naming and documentation.
  • Support for PROGMEM’s F() macro to reduce memory footprint.
  • Support for compound data structures like Tuples, Objects (nested Tuples), Vectors and arbitrary combinations of these.

The Arduino library is independent of any host implementation, we provide a Python API client library as a reference implementation.

Please see ReadTheDocs for the latest documentation.

Quick start

Export any function e.g., digitalRead() and digitalWrite() using the interface() function.

#include <simpleRPC.h>

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  interface(digitalRead, "", digitalWrite, "");
}

These functions are now available on the host under names method2() and method3().

The documentation string can be used to name and describe the method.

interface(
  digitalRead,
    "digital_read: Read digital pin. @pin: Pin number. @return: Pin value.",
  digitalWrite,
    "digital_write: Write to a digital pin. @pin: Pin number. @value: Pin value.");

This is reflected on the host, where the methods are now named digital_read() and digital_write() and where the provided API documentation is also available. In our client reference implementation documentation, we show an example on how this works.

Further reading

Please read Usage for more information about exporting normal functions, class member functions and documentation conventions.

If you want to create your own host library implementation for other programming languages, the section Protocol should help you on your way.