This project utilizes Bluetooth Low Energy (BLE) as its communication protocol. BLE was chosen for its well-defined standard and proven robustness.
The standard UUIDs referenced in this project are based on the numbers officially assigned by the Bluetooth SIG. A complete list can be found in the official Bluetooth SIG git repository.
The BLE protocol is built on a three-layered architecture consisting of:
Each peripheral (the device to be controlled) announces its presence and basic data through advertising. To uniquely identify and filter for project-specific devices, the manufacturer id is set to C0DE
.
For custom, project-specific services, the UUID range 0xAxxx
is used, as this area was officially unassigned at the time of development.
This standard service is implemented by every device to provide basic information, such as hardware and software versions. It utilizes some of the standard characteristics from the 0x2Axx
range, as described below.
This service groups all characteristics required for controlling light sources. (Note: The associated characteristics are not yet fully defined.)
This service provides general configuration options for the device. (Note: The associated characteristics are not yet fully defined.)
Represents the name of the device as it should appear to the user.
Returns the current firmware version string. This value is critical for performing Firmware-Over-the-Air (FOTA) updates.
Returns the hardware version of the custom PCB. This is relevant because updated board revisions may require different data handling or firmware versions.
Returns the static string value “mars3142”.
This descriptor provides a user-readable description for a characteristic. It allows a user interface (UI) to display a meaningful name for custom characteristics (e.g., Brightness or Color Temperature).
Defines the data type and format of a characteristic's value to provide hints to the UI for optimal presentation. For example, a boolean format signals that a toggle switch is a suitable control.
Defines a valid range (minimum and maximum) for a characteristic's value. This can be used by a UI to properly configure controls like a slider.