{"id":13612489,"url":"https://github.com/persello/bluedroid","last_synced_at":"2025-10-07T03:30:18.672Z","repository":{"id":61862564,"uuid":"526653605","full_name":"persello/bluedroid","owner":"persello","description":"Bluedroid wrapper for ESP32.","archived":true,"fork":false,"pushed_at":"2023-07-30T07:25:37.000Z","size":207,"stargazers_count":40,"open_issues_count":7,"forks_count":8,"subscribers_count":4,"default_branch":"develop","last_synced_at":"2025-09-17T04:08:17.199Z","etag":null,"topics":["bluetooth","esp-idf","esp32","rust"],"latest_commit_sha":null,"homepage":"","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/persello.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":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-19T15:11:44.000Z","updated_at":"2024-12-07T14:40:01.000Z","dependencies_parsed_at":"2024-06-09T14:01:58.779Z","dependency_job_id":"889cdd7f-57f6-4b5a-b70b-a0d2054bf3ec","html_url":"https://github.com/persello/bluedroid","commit_stats":{"total_commits":117,"total_committers":6,"mean_commits":19.5,"dds":"0.45299145299145294","last_synced_commit":"62d84c6a8b9e2863b217e8d68d15893f06770222"},"previous_names":["pulse-loop/bluedroid"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/persello/bluedroid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/persello%2Fbluedroid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/persello%2Fbluedroid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/persello%2Fbluedroid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/persello%2Fbluedroid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/persello","download_url":"https://codeload.github.com/persello/bluedroid/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/persello%2Fbluedroid/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278715508,"owners_count":26033296,"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-10-07T02:00:06.786Z","response_time":59,"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":["bluetooth","esp-idf","esp32","rust"],"created_at":"2024-08-01T20:00:30.686Z","updated_at":"2025-10-07T03:30:18.349Z","avatar_url":"https://github.com/persello.png","language":"Rust","funding_links":[],"categories":["Projects"],"sub_categories":["`std`"],"readme":"# Bluedroid Rust wrapper\n\n[![crates.io](https://img.shields.io/crates/v/bluedroid)](https://crates.io/crates/bluedroid)\n[![build](https://github.com/pulse-loop/bluedroid/actions/workflows/build.yml/badge.svg)](https://github.com/pulse-loop/bluedroid/actions/workflows/build.yml)\n[![docs.rs](https://docs.rs/bluedroid/badge.svg)](https://docs.rs/bluedroid)\n![crates.io](https://img.shields.io/crates/d/bluedroid)\n![crates.io](https://img.shields.io/crates/l/bluedroid)\n\nThis is a Rust wrapper for the Bluedroid Bluetooth stack for ESP32.\nIt allows you to build a GATT server with a declarative API and supports multithreading.\n\n## Usage\n\nDeclare a characteristic:\n\n```rust\n  let manufacturer_name_characteristic = Characteristic::new(BleUuid::Uuid16(0x2A29))\n        .name(\"Manufacturer Name String\")\n        .permissions(AttributePermissions::new().read().write())\n        .properties(CharacteristicProperties::new().read().write().notify())\n        .max_value_length(20)\n        .on_write(|data, param| {\n            info!(\"Received write request: {:?} {:?}\", data, param);\n        })\n        .show_name()\n        .set_value(\"Hello, world!\".as_bytes().to_vec())\n        .build();\n```\n\nDeclare a service:\n\n```rust\nlet device_information_service = Service::new(BleUuid::Uuid16(0x180A))\n    .name(\"Device Information\")\n    .primary()\n    .characteristic(\u0026manufacturer_name_characteristic)\n    .build();\n```\n\nDeclare a profile and start the server:\n\n```rust\nlet profile = Profile::new(0x0001)\n    .name(\"Device Information\")\n    .service(\u0026device_information_service)\n    .build();\n\nGLOBAL_GATT_SERVER\n    .lock()\n    .unwrap()\n    .profile(profile)\n    .device_name(\"ESP32-GATT-Server\")\n    .appearance(Appearance::WristWornPulseOximeter)\n    .advertise_service(\u0026device_information_service)\n    .start();\n```\n\n## Features\n\n- [x] GATT server\n  - [x] Advertisement\n    - [x] Custom name\n    - [x] Custom appearance\n  - [x] Multiple applications\n  - [x] Services\n    - [x] Declaration\n    - [x] Advertisement\n  - [x] Characteristics\n    - [x] Declaration\n    - [x] Broadcast\n    - [x] Read\n      - [x] Static (by stack)\n      - [x] Dynamic (by application, with callback)\n      - [ ] Long\n    - [x] Write\n      - [x] With response\n      - [x] Without response\n      - [ ] Long\n    - [x] Notify\n    - [x] Indicate\n  - [x] Descriptors\n    - [x] Declaration\n    - [x] Read\n    - [x] Write\n  - [ ] Encryption\n- [ ] GATT client\n  \u003e There are currently no plans to implement the GATT client API.\n  \u003e Contributions are welcome.\n- [ ] BR/EDR\n  \u003e There are currently no plans to implement the Bluetooth Classic API.\n  \u003e Contributions are welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpersello%2Fbluedroid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpersello%2Fbluedroid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpersello%2Fbluedroid/lists"}