{"id":19975830,"url":"https://github.com/jfjlaros/simplerpc","last_synced_at":"2025-04-10T01:11:27.777Z","repository":{"id":37752339,"uuid":"153153987","full_name":"jfjlaros/simpleRPC","owner":"jfjlaros","description":"Simple RPC implementation for Arduino.","archived":false,"fork":false,"pushed_at":"2024-10-21T18:05:37.000Z","size":656,"stargazers_count":53,"open_issues_count":6,"forks_count":17,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-10T01:11:23.189Z","etag":null,"topics":["arduino","discovery","remote-procedure-call","rpc","rpc-api","rpc-framework","rpc-server","simple"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jfjlaros.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-15T17:26:38.000Z","updated_at":"2025-01-27T03:45:23.000Z","dependencies_parsed_at":"2024-11-13T03:20:33.257Z","dependency_job_id":"334df7d3-4363-463c-a535-c9456756e2ab","html_url":"https://github.com/jfjlaros/simpleRPC","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfjlaros%2FsimpleRPC","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfjlaros%2FsimpleRPC/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfjlaros%2FsimpleRPC/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfjlaros%2FsimpleRPC/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jfjlaros","download_url":"https://codeload.github.com/jfjlaros/simpleRPC/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248137886,"owners_count":21053775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","discovery","remote-procedure-call","rpc","rpc-api","rpc-framework","rpc-server","simple"],"created_at":"2024-11-13T03:20:27.355Z","updated_at":"2025-04-10T01:11:27.758Z","avatar_url":"https://github.com/jfjlaros.png","language":"C++","readme":"Simple RPC implementation for Arduino.\n======================================\n\n.. image:: https://img.shields.io/github/last-commit/jfjlaros/simpleRPC.svg\n   :target: https://github.com/jfjlaros/simpleRPC/graphs/commit-activity\n.. image:: https://github.com/jfjlaros/simpleRPC/actions/workflows/arduino-package.yml/badge.svg\n   :target: https://github.com/jfjlaros/simpleRPC/actions/workflows/arduino-package.yml\n.. image:: https://readthedocs.org/projects/simplerpc/badge/?version=stable\n   :target: https://simpleRPC.readthedocs.io\n.. image:: https://img.shields.io/github/release-date/jfjlaros/simpleRPC.svg\n   :target: https://github.com/jfjlaros/simpleRPC/releases\n.. image:: https://img.shields.io/github/release/jfjlaros/simpleRPC.svg\n   :target: https://github.com/jfjlaros/simpleRPC/releases\n.. image:: https://www.ardu-badge.com/badge/simpleRPC.svg\n   :target: https://www.ardu-badge.com/simpleRPC\n.. image:: https://img.shields.io/github/languages/code-size/jfjlaros/simpleRPC.svg\n   :target: https://github.com/jfjlaros/simpleRPC\n.. image:: https://img.shields.io/github/languages/count/jfjlaros/simpleRPC.svg\n   :target: https://github.com/jfjlaros/simpleRPC\n.. image:: https://img.shields.io/github/languages/top/jfjlaros/simpleRPC.svg\n   :target: https://github.com/jfjlaros/simpleRPC\n.. image:: https://img.shields.io/github/license/jfjlaros/simpleRPC.svg\n   :target: https://raw.githubusercontent.com/jfjlaros/simpleRPC/master/LICENSE.md\n\n----\n\nThis library provides a simple way to export Arduino_ functions as remote\nprocedure calls. The exported method definitions are communicated to the host,\nwhich is then able to generate an API interface.\n\n**Features:**\n\n- For each method, only one line of code is needed for exporting.\n- Automatic parameter and return type inference.\n- Support for all native C types and strings.\n- Support for arbitrary functions and class methods.\n- Optional function and parameter naming and documentation.\n- Support for PROGMEM_'s ``F()`` macro to reduce memory footprint.\n- Support for compound data structures like Tuples, Objects (Tuples with\n  internal structure), Vectors and arbitrary combinations of these.\n- Support for reading multidimensional C arrays (e.g., ``int**``).\n- Support for different types of I/O interfaces via plugins, e.g.,\n\n  - Bluetooth.\n  - Ethernet (untested).\n  - Hardware serial.\n  - RS485 serial.\n  - Software serial (untested).\n  - USB serial.\n  - WiFi.\n  - Wire (untested).\n\n- Support for using multiple interfaces at the same time.\n\nThe Arduino library is independent of any host implementation, a Python API\nclient_ library is provided as a reference implementation.\n\n.. TODO: Add more client libraries (Java and Android).\n\nPlease see ReadTheDocs_ for the latest documentation.\n\n\nQuick start\n-----------\n\nExport any function e.g., ``digitalRead()`` and ``digitalWrite()`` using the\n``interface()`` function.\n\n.. code-block:: cpp\n\n    #include \u003csimpleRPC.h\u003e\n\n    void setup() {\n      Serial.begin(9600);\n    }\n\n    void loop() {\n      interface(Serial, digitalRead, \"\", digitalWrite, \"\");\n    }\n\nThese functions are now available on the host under names ``method0()`` and\n``method1()``.\n\nThe documentation string can be used to name and describe the method.\n\n.. code-block:: cpp\n\n    interface(\n      Serial,\n      digitalRead,\n        \"digital_read: Read digital pin. @pin: Pin number. @return: Pin value.\",\n      digitalWrite,\n        \"digital_write: Write to a digital pin. @pin: Pin number. @value: Pin value.\");\n\nThis is reflected on the host, where the methods are now named\n``digital_read()`` and ``digital_write()`` and where the provided API\ndocumentation is also available. In the client reference implementation\ndocumentation, contains an example_ on how this works.\n\n\nFurther reading\n---------------\n\nPlease read section :doc:`usage` for more information about exporting normal\nfunctions, class member functions and documentation conventions.\n\nIf you want to create your own host library implementation for other\nprogramming languages, the section :doc:`protocol` should help you on your way.\n\n\n.. _Arduino: https://www.arduino.cc\n.. _PROGMEM: https://www.arduino.cc/reference/en/language/variables/utilities/progmem/\n.. _ReadTheDocs: https://simpleRPC.readthedocs.io\n.. _client: https://arduino-simple-rpc.readthedocs.io\n.. _example: https://arduino-simple-rpc.readthedocs.io/en/stable/#quick-start\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfjlaros%2Fsimplerpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjfjlaros%2Fsimplerpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfjlaros%2Fsimplerpc/lists"}