{"id":28177872,"url":"https://github.com/dclause/hermes-five","last_synced_at":"2025-08-08T20:18:45.099Z","repository":{"id":259323268,"uuid":"824448087","full_name":"dclause/hermes-five","owner":"dclause","description":"The Rust Robotics \u0026 IoT Platform.","archived":false,"fork":false,"pushed_at":"2025-07-17T00:52:39.000Z","size":2005,"stargazers_count":36,"open_issues_count":18,"forks_count":1,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-07-24T07:00:03.959Z","etag":null,"topics":["arduino","iot","rust"],"latest_commit_sha":null,"homepage":"https://dclause.github.io/hermes-five/","language":"Rust","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/dclause.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-05T06:49:01.000Z","updated_at":"2025-07-17T06:52:02.000Z","dependencies_parsed_at":"2024-10-24T11:56:42.529Z","dependency_job_id":"1b59b7b0-a937-417e-948c-2d5573c68971","html_url":"https://github.com/dclause/hermes-five","commit_stats":null,"previous_names":["dclause/hermes-five"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dclause/hermes-five","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dclause%2Fhermes-five","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dclause%2Fhermes-five/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dclause%2Fhermes-five/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dclause%2Fhermes-five/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dclause","download_url":"https://codeload.github.com/dclause/hermes-five/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dclause%2Fhermes-five/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269482630,"owners_count":24424404,"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","status":"online","status_checked_at":"2025-08-08T02:00:09.200Z","response_time":72,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","iot","rust"],"created_at":"2025-05-16T01:11:05.652Z","updated_at":"2025-08-08T20:18:45.074Z","avatar_url":"https://github.com/dclause.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hermes-Five\n\n[![License](https://img.shields.io/github/license/dclause/hermes-five?color=success)](/LICENSE)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/dclause/hermes-five/build.yml?branch=develop\u0026label=Build)](https://github.com/dclause/hermes-five/actions/workflows/build.yml?query=branch%3Adevelop)\n[![Test Status](https://img.shields.io/github/actions/workflow/status/dclause/hermes-five/test.yml?branch=develop\u0026label=Test)](https://github.com/dclause/hermes-five/actions/workflows/test.yml?query=branch%3Adevelop)\n[![Docs Status](https://img.shields.io/docsrs/hermes-five?label=Doc)](https://docs.rs/hermes-five)\n[![Code Coverage](https://codecov.io/gh/dclause/hermes-five/branch/develop/graph/badge.svg?token=KF8EFDUQ7A)](https://codecov.io/gh/dclause/hermes-five/branch/develop)\n[![crates.io](https://img.shields.io/crates/v/hermes-five.svg)](https://crates.io/crates/hermes-five)\n[![Documentation](https://img.shields.io/badge/Documentation-available%20here-success)](https://dclause.github.io/hermes-five/)\n\n### The Rust Robotics \u0026 IoT Framework\n\n**Drive and orchestrate Arduinos, ESPs, nodeMCU, RaspberryPis and all kind\nof [Firmata-compatible](https://github.com/firmata) hardware in pure async Rust.\nControl LEDs, sensors, motors from your laptop with the safety and speed of Rust.**\n\n_Program robots and embedded devices with confidence. Hermes-Five gives you high-level APIs to remotely control boards (\nArduino, ESP, nodeMCU, RaspberryPI, ..), extenders (PCA9685, PCF8575, ..) LEDs, sensors, servos and more, all from safe\nand asynchronous Rust code. Think _Johnny-Five_, but safer, faster, and fully async._\n\n\u003cimg align=\"center\" style=\"margin:20px 0;\" alt=\"Schema sample of blinking led using Arduino UNO\" src=\"/docs/public/schemas/overall.png?raw=true\" /\u003e\n\n## Documentation\n\nHermes-Five offers three main documentation sources:\n\n- The [user documentation](https://dclause.github.io/hermes-five) for tutorials and concepts.\n- The [API documentation](https://docs.rs/hermes-five/latest) for developer reference.\n- The [examples](https://github.com/dclause/hermes-five/tree/develop/hermes-five/examples) directory to learn by doing.\n\n## Key Features\n\n* **🧠 High-level abstractions:** Control LEDs, sensors, buttons, servos and all kind of devices. Write expressive, async\n  Rust code to control them.\n* **🛜 Protocol-agnostic:** Serial, WiFi and Bluetooth supported (via Firmata).\n* **🧩 Modular design:** Plug-and-play support for boards and devices. Arduino, ESP32, nodeMCU, Raspberry Pi, etc.\n* **🕹️ Animation engine:** Interpolate servo movements, LED fades and more with ease.\n* **🧪 Test-friendly:** Includes mocks to run and test logic without hardware.\n\n_🖱️ Prefer a GUI over code? Try [Hermes-Studio](https://github.com/dclause/hermes-studio) - a visual programming\ninterface powered by Hermes-Five._\n\n## Getting started\n\n- Flash the\n  compatible [Firmata Protocol client](https://github.com/firmata/arduino/blob/main/examples/StandardFirmataPlus/StandardFirmataPlus.ino)\n  via Arduino IDE on your board.\n- Create a new Rust project:\n\n```shell\ncargo new my_awesome_project\ncd my_awesome_project\n```\n\n- Add this crate to your dependencies in the `Cargo.toml` file.\n\n```toml\n[dependencies]\nhermes-five = \"0.1.0\"\n```\n\n- Modify your `src/main.rs` as needed (\n  see [examples](https://github.com/dclause/hermes-five/tree/develop/hermes-five/examples) for inspiration).\n- Start by exploring the [examples](https://github.com/dclause/hermes-five/tree/develop/hermes-five/examples) code,\n  the [user documentation](https://dclause.github.io/hermes-five)\n- or the [API documentation](https://docs.rs/hermes-five/latest)\n\n\u003e [!TIP]\n\u003e Feature flags:\n\u003e   - **libudev** -- (enabled by default) Activates `serialport` crate _libudev_ feature under-the-hood (required on\n      Linux only for port listing).\n\u003e   - **serde** -- Enables serialize/deserialize capabilities for most entities.\n\u003e   - **mock** -- Provides mocked entities of all kinds (useful for tests mostly).\n\n### Hello Hermes!\n\nThe following example shows the simplest possible program: from your computer, command a serially connected Arduino to\nblink its built-in LED on pin 13.\n\n```rust\nuse hermes_five::hardware::{Board, BoardEvent};\nuse hermes_five::devices::Led;\n\n#[hermes_five::runtime]\nasync fn main() {\n\n    // Register a new board \n    // (of type arduino + auto-detected serial port by default)\n    let board = Board::start().unwrap();\n\n    // When board communication is ready:\n    board.on(BoardEvent::OnReady, |board: Board| async move {\n\n        // Register a LED on pin 13 (arduino embedded led).\n        // Pin: 13; OFF by default\n        let mut led = Led::new(\u0026board, 13, false)?;\n\n        // Blinks the LED every 500ms: indefinitely.\n        led.blink(500);\n\n        Ok(())\n    });\n}\n```\n\n## Examples\n\nAll available examples can be found in\nthe [examples](https://github.com/dclause/hermes-five/tree/develop/hermes-five/examples) folder.\n\nTo start an example, run the following command:\n\n```\ncargo run --example folder_examplename\n```\n\nTo run an example in a file called `examples/folder/examplename.rs`, use the concatenation name\nas `folder_examplename`.\n\nIf you want the \"full\" log output you can use:\n\n```\nRUST_LOG=DEBUG cargo run --example folder_examplename\n```\n\n## Roadmap\n\nFor details, see the full [roadmap](/roadmap.md): currently working\ntoward release 0.2\n\n## Contribution\n\nAll contributions are more than welcome through [PR](https://github.com/dclause/hermes-five/pulls) and\nthe [issue queue](https://github.com/dclause/hermes-five/issues).\n\n- Fork the repository\n- Create a new branch: `git checkout -b feature-branch`\n- Commit your changes: `git commit -am 'Add new feature'`\n- Push to the branch: `git push origin feature-branch`\n- Create a new Pull Request\n\n**_The author does not claim to know everything about Rust programming or IoT, and all ideas are welcome as long as they\nrespect the project's original philosophy._**\n\n## License\n\nThis project is licensed under the MIT License. See\nthe [LICENSE](/LICENSE) file for details.\n\n## Contact\n\nFor support, please open an issue or reach out to the [author](https://github.com/dclause).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdclause%2Fhermes-five","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdclause%2Fhermes-five","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdclause%2Fhermes-five/lists"}