{"id":48109414,"url":"https://github.com/CarlKCarlK/device-envoy","last_synced_at":"2026-04-20T01:01:12.320Z","repository":{"id":318915380,"uuid":"1076308254","full_name":"CarlKCarlK/device-envoy","owner":"CarlKCarlK","description":"Build Pico and ESP32 applications with LED panels, easy WiFi, and composable device abstractions.","archived":false,"fork":false,"pushed_at":"2026-04-16T20:43:55.000Z","size":16654,"stargazers_count":32,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-16T22:29:05.752Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CarlKCarlK.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-10-14T17:17:19.000Z","updated_at":"2026-04-15T14:22:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"4bc817a0-26ab-4c6e-8c33-d030fcdbb865","html_url":"https://github.com/CarlKCarlK/device-envoy","commit_stats":null,"previous_names":["carlkcarlk/serials","carlkcarlk/device-kit","carlkcarlk/device-envoy"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/CarlKCarlK/device-envoy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CarlKCarlK%2Fdevice-envoy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CarlKCarlK%2Fdevice-envoy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CarlKCarlK%2Fdevice-envoy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CarlKCarlK%2Fdevice-envoy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CarlKCarlK","download_url":"https://codeload.github.com/CarlKCarlK/device-envoy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CarlKCarlK%2Fdevice-envoy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32028547,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"ssl_error","status_checked_at":"2026-04-20T00:17:31.068Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-04-04T16:00:33.627Z","updated_at":"2026-04-20T01:01:12.314Z","avatar_url":"https://github.com/CarlKCarlK.png","language":"Rust","funding_links":[],"categories":["Libraries built on top of `esp-hal`"],"sub_categories":[],"readme":"# device-envoy\n\n[![GitHub](https://img.shields.io/badge/github-device--envoy-8da0cb?style=flat\u0026labelColor=555555\u0026logo=github)](https://github.com/CarlKCarlK/device-envoy)\n\nRust workspace for composable embedded device abstractions built on Embassy.\n\n## Intro\n\n`device-envoy` is a workspace for building embedded applications in Rust with Embassy, organized around device abstractions.\n\nA device abstraction is a software encapsulation of hardware that manages timing, tasks, control flow, interrupts, channels, and state within the abstraction.\n\nRather than replacing HALs or drivers, `device-envoy` builds on them and exposes a small set of simple operations to the rest of your program.\n\nCurrent platform focus is Raspberry Pi Pico 1 and Pico 2 via `device-envoy-rp`, and ESP via `device-envoy-esp` (actively tested on ESP32-C6 and ESP32-S3).\n\n## Workspace Crates\n\n- `crates/device-envoy`: top-level landing crate [![crates.io - device-envoy](https://img.shields.io/crates/v/device-envoy?style=flat\u0026color=fc8d62\u0026logo=rust)](https://crates.io/crates/device-envoy) [![docs.rs - device-envoy](https://img.shields.io/docsrs/device-envoy?style=flat\u0026color=66c2a5\u0026labelColor=555555)](https://docs.rs/device-envoy)\n- `crates/device-envoy-rp`: Raspberry Pi Pico focused crate [![crates.io - rp](https://img.shields.io/crates/v/device-envoy-rp?style=flat\u0026color=fc8d62\u0026logo=rust)](https://crates.io/crates/device-envoy-rp) [![docs.rs - rp](https://img.shields.io/docsrs/device-envoy-rp?style=flat\u0026color=66c2a5\u0026labelColor=555555)](https://docs.rs/device-envoy-rp)\n- `crates/device-envoy-esp`: ESP32-C6 and ESP32-S3 focused crate [![crates.io - esp](https://img.shields.io/crates/v/device-envoy-esp?style=flat\u0026color=fc8d62\u0026logo=rust)](https://crates.io/crates/device-envoy-esp) [![docs.rs - esp](https://img.shields.io/docsrs/device-envoy-esp?style=flat\u0026color=66c2a5\u0026labelColor=555555)](https://docs.rs/device-envoy-esp)\n- `crates/device-envoy-core`: shared core APIs used across platform crates [![crates.io - core](https://img.shields.io/crates/v/device-envoy-core?style=flat\u0026color=fc8d62\u0026logo=rust)](https://crates.io/crates/device-envoy-core) [![docs.rs - core](https://img.shields.io/docsrs/device-envoy-core?style=flat\u0026color=66c2a5\u0026labelColor=555555)](https://docs.rs/device-envoy-core)\n\n## Status\n\n⚠️ **Alpha / Experimental**\n\nThe API is actively evolving. Not recommended for production use, but good for experimentation, learning, and exploratory projects.\n\nThis workspace is also in active migration as shared functionality moves into `device-envoy-core` while platform crates remain usable.\n\n## Features\n\n- LED strips and panels for NeoPixel-style (WS2812) hardware\n- WiFi auto-connect and credential management\n- Audio player over I2S\n- Button input and debouncing\n- Servo control and animation\n- Flash storage for persistent configuration\n- LCD text display support\n- IR remote decoding\n- RFID card reading\n- Clock synchronization helpers\n- 4-digit seven-segment display control\n- Single LED control and animation\n\n## Forum\n\n- **[Using Embassy to build applications](https://github.com/CarlKCarlK/device-envoy/discussions)**\n\n  A place to talk about writing embedded applications with Embassy: sharing code, asking practical questions, and learning what works in practice.\n\n## Videos and Articles\n\n- [device-envoy: Making Embedded Fun with Rust, Embassy, and Composable Device Abstractions](https://medium.com/@carlmkadie/device-envoy-making-embedded-fun-31534917414b) -- versions: [article](https://medium.com/@carlmkadie/device-envoy-making-embedded-fun-31534917414b) or [video](https://www.youtube.com/watch?v=iUu6hvJLVOU)\n- [How Rust \u0026 Embassy Shine on Embedded Devices](https://medium.com/@carlmkadie/how-rust-embassy-shine-on-embedded-devices-part-1-9f4911c92007) by Carl M. Kadie and Brad Gibson\n- [More Rust articles](https://medium.com/@carlmkadie)\n\n## Thanks\n\nSpecial thanks to [Brad Gibson](https://github.com/U007D/), organizer of the [Seattle Rust User Group](https://www.meetup.com/seattle-rust-meetup/). He introduced me to Rust programming on microcontrollers, suggested the term *device abstraction*, and encouraged thinking in terms of shared traits across controller families. Those conversations helped set the goals for device-envoy.\n\n## Example: Animated LED Strip (from RP crate)\n\nThis example is from `device-envoy-rp` and cycles a 96-LED strip through red, green, and blue frames.\n\n![Animated 96-LED strip example (APNG)](https://raw.githubusercontent.com/CarlKCarlK/device-envoy/main/crates/device-envoy-core/docs/assets/led_strip_animated.png)\n\n```rust,no_run\n# #![no_std]\n# #![no_main]\n# use panic_probe as _;\n# use core::convert::Infallible;\nuse device_envoy_rp::{Result, led_strip::{LedStrip as _, Frame1d, colors}};\nuse device_envoy_rp::led_strip;\n\nled_strip! {\n    LedStripAnimated {\n        pin: PIN_4,\n        len: 96,\n    }\n}\n\nasync fn example(spawner: embassy_executor::Spawner) -\u003e Result\u003cInfallible\u003e {\n    let p = embassy_rp::init(Default::default());\n    let led_strip_animated = LedStripAnimated::new(p.PIN_4, p.PIO0, p.DMA_CH0, spawner)?;\n\n    let frame_duration = embassy_time::Duration::from_millis(300);\n    led_strip_animated.animate([\n        (Frame1d::filled(colors::RED), frame_duration),\n        (Frame1d::filled(colors::GREEN), frame_duration),\n        (Frame1d::filled(colors::BLUE), frame_duration),\n    ]);\n\n    core::future::pending().await\n}\n```\n\n## Policy on AI-assisted development and contributions\n\nThe use of AI tools is permitted for development and contributions to this repository. AI may be used as a productivity aid for drafting, exploration, and refactoring.\n\nAll code and documentation contributed to this repository must be reviewed, edited, and validated by a human contributor. AI tools are not a substitute for design judgment, testing, or responsibility for correctness.\n\n[AGENTS.md](AGENTS.md) contains the general instructions and constraints given to AI tools used during development of this repository.\n\n## Development Guide\n\nIf you want to edit this workspace, start here: [development.md](development.md).\n\n## License\n\nLicensed under either:\n\n- MIT license (see LICENSE-MIT)\n- Apache License, Version 2.0 (see LICENSE-APACHE)\n\nat your option.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCarlKCarlK%2Fdevice-envoy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCarlKCarlK%2Fdevice-envoy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCarlKCarlK%2Fdevice-envoy/lists"}