This repository implements **flutter_blue_plus**, a Flutter plugin library for Bluetooth Low Energy (BLE) communication across Android, iOS, macOS, Linux, and Web platforms. It provides a unified Dart API to perform BLE scanning, connect to devices, discover GATT services/characteristics/descriptors, read/write data, subscribe to notifications, and manage bonding and MTU negotiation. The architecture follows Flutter's federated plugin pattern: a common platform interface package defines abstract contracts and serialization messages, while separate packages implement the native side using MethodChannel (Android Java, iOS/macOS Objective-C, Linux Dart/BlueZ, Web JS interop). The library is designed for production use, featuring per-device operation queues via a mutex factory, robust error handling, streaming state updates, and conveniences like automatic subscription cleanup on disconnect. It is commercially licensed, requiring a paid license for commercial use. The codebase is well-structured with clear separation of concerns, though it carries a moderate amount of deprecated API surface and some platform-specific workarounds. The example app demonstrates all major features and serves as both a test harness and reusable UI pattern for BLE exploration.
This repository provides an Arduino library that implements the Bluetooth Low Energy MIDI (BLE-MIDI) transport layer, enabling Arduino boards to send and receive MIDI data over BLE connections. The library works with the FortySevenEffects Arduino MIDI Library and supports multiple hardware platforms including ESP32 (with both standard BLE and NimBLE), ArduinoBLE (NANO 33 BLE), and nRF52. The architecture features a clean separation between the core BLE-MIDI protocol implementation and hardware-specific adaptations. The transport layer correctly handles timestamp generation per the BLE-MIDI specification, running status optimization, and buffer management. Hardware abstractions use C++ templates to provide a consistent interface across different BLE stacks while exposing platform-specific configuration options.
This repository is an ESPHome custom component and configuration pack that turns an ESP32 into a BLE bridge for controlling Tesla vehicles. It implements a `tesla_ble_listener` component that connects to the car's BLE advertisement/command channel, encrypts/decrypts Tesla's proprietary BLE messages using a forked `tesla-ble` library, and exposes ESPHome services, buttons, sensors, and selectors for actions like lock/unlock, frunk/trunk, climate, and cabin overheat protection. The repo is primarily YAML package definitions and C++ component code, with a Makefile and CI workflow for building board-specific firmware.
IronOS is embedded firmware for a family of portable soldering irons (TS100, TS80/P, TS101, Pinecil, Pinecil V2, MHP30, Sequre S60/S60P/T55/S99). The firmware runs on three distinct SoC architectures — STM32F103 (Cortex-M3), GD32VF103 (RISC-V), and Bouffalo BL702 (RISC-V) — behind a single board-support abstraction. It implements PID temperature control of the soldering tip via PWM, thermocouple uV-to-temperature conversion with cold-junction compensation, USB-PD (FUSB302/FUSB302B/HUB238/FS2711) and Quick Charge 3.0 power negotiation, accelerometer/hall-effect-based motion detection for sleep, an OLED menu UI, and a full BLE GATT stack on Pinecil V2. The core control loop is: ADC samples tip thermocouple voltage (with PWM holdoff timing) -> gain/op-amp compensation and lookup-table interpolation to Celsius -> PID controller -> PWM duty to the heating element, with input voltage/current monitoring for wattage budgeting and thermal runaway protection.
This is a high-quality Android sample application from Nordic Semiconductor that demonstrates Bluetooth Low Energy (BLE) connectivity using the Kotlin BLE Library. The app connects to a peripheral implementing the LED Button Service (LBS), allowing users to toggle an LED and detect button clicks and long presses. It features a modular architecture with separate modules for the device specification (transport-agnostic), BLE transport implementation, UI, and scanner. The app uses Jetpack Compose for UI, Hilt for dependency injection, Navigation 3 for navigation, and a foreground service for background operation. It includes both a native flavor for real BLE hardware and a mock flavor for testing without physical devices. The codebase is well-structured, follows modern Android best practices, and serves as a reference for building BLE apps with the Nordic BLE library.
LibrePods is a cross-platform application suite whose verified purpose is to liberate Apple AirPods from the Apple ecosystem, providing full accessory management on non-Apple hardware. The Android app (Kotlin/Jetpack Compose) offers battery monitoring via BLE manufacturer-data parsing, noise-control mode switching, ear detection, head-gesture recognition, hearing aid adjustments, custom EQ, device takeover, home-screen widgets, Quick Settings tiles, and iOS-style popup overlays. The Linux companion (Qt6/QML) delivers the same control surface through a system tray app backed by BlueZ and PulseAudio, with a Rust rewrite in progress per the ci-linux-rust.yml workflow.
Gobot is a Go framework for robotics, physical computing, and the Internet of Things. It provides a consistent hardware abstraction layer (HAL) over dozens of single-board computers (Raspberry Pi, BeagleBone, Intel Edison, Jetson, etc.), microcontrollers (Arduino via Firmata, Digispark), and communication protocols (GPIO, I2C, SPI, BLE, serial, MQTT, NATS, MAVLink). The architecture is modular: platform-specific adaptors implement core interfaces (DigitalPinner, PWMPinner, I2cBusAdaptor, etc.) and are composed from reusable building blocks in the `platforms/adaptors` package. Drivers for sensors, actuators, displays, and robots (Sphero, Parrot drones, DJI Tello, GoPiGo3) are organized by bus type (gpio, i2c, spi, ble, aio, onewire, serial) and share a common lifecycle pattern with event publishing and command registration. A built-in HTTP API server (with optional basic auth and CORS) exposes robot state and commands over REST and Server-Sent Events, and includes an embedded web UI (Robeaux). The framework supports both high-level orchestration via `Robot` and `Manager` and low-level 'metal' usage for direct hardware control. External dependencies include `periph.io` for GPIO, `tinygo.org/x/bluetooth` for BLE, `gocv.io/x/gocv` for computer vision, and `go.bug.st/serial` for serial communication. The codebase is extensively tested with mock filesystem and syscall infrastructure, and uses functional options for configuration throughout.
BatMON is a Home Assistant add-on and standalone Docker application for monitoring battery management systems (BMS) over Bluetooth Low Energy (BLE) and serial connections. It decodes telemetry from ~25 BMS families (Daly, JK, ANT, Renogy, Seplos, etc.) and publishes normalized data to MQTT for Home Assistant, or directly to InfluxDB. The architecture is a Python asyncio application with a BMS abstraction layer (`bmslib`) that defines a common interface (`fetch()`, `fetch_voltages()`) and model-specific decoders. The main entry point is `main.py`, which dispatches to HA add-on or standalone mode via `entrypoint.sh`/`addon_main.sh`. Data flows from BMS hardware through BLE/serial adapters into decoder classes, then to MQTT/InfluxDB via a GUI wire format (`bmslib/wire/model.py`). External dependencies include bleak (BLE), paho-mqtt, influxdb, and Home Assistant add-on infrastructure (bashio, supervisor). The project includes a Helm chart, Docker multi-arch builds, and a test suite with known-answer vectors for CRC/AES and protocol decoders.
This is a Homebridge plugin (`@switchbot/homebridge-switchbot`) that bridges SwitchBot IoT devices (lights, curtains, locks, sensors, vacuums, etc.) into Apple HomeKit using both HAP and Matter protocols. It communicates via Bluetooth Low Energy (BLE) and the SwitchBot OpenAPI cloud API, with configurable fallback and rate-limiting. The plugin provides a rich configuration UI served through Homebridge Config UI X, including device discovery, credential management, and advanced polling settings. The architecture follows a platform plugin pattern with two platform classes (HAP and Matter), a resilient client layer (debounce, circuit breaker, daily budget tracking), a device factory and abstract base class for device-specific implementations, and extensive Matter cluster mappings. While the codebase is well-structured and actively maintained, it suffers from a large monolithic platform file (~2800 lines), low test coverage (~1.36%), and a dependency conflict requiring `--legacy-peer-deps` during installation. ESLint configuration also fails in CI. Nonetheless, the plugin is feature-rich, handles edge cases like BLE encryption and OpenAPI rate limits, and includes a polished custom UI.