The Pinecilv2 has hardware support for Bluetooth Low Energy (BLE). This protocol allows reading and writing of parameters to the Pinecil during runtime.
The BLE interface advertises three services, these provide access to live telemetry as well as the ability to read/write settings. These are outlined in more detail below.
Pinecil devices advertise themselves on BLE as Pinecil-XXXXXXX
.
They also include the UUID 9eae1000-9d0d-48c5-AA55-33e27f9bc533
in the advertisement packet to allow for filtering.
Unless otherwise noted, all data is sent and received as Little-Endian.
As of the time of writing this, notifications are not fully implemented so data will need to be polled. Notification/Indication support will come when there is time to implement it.
It is advised to follow the below points when first implementing a BLE integration. Of course once the integration is working feel free to deviate from these. These are just suggested ideas to help kickstart.
- When filtering for devices, its preferable to filter by the UUID
9eae1000-9d0d-48c5-AA55-33e27f9bc533
, rather than by the device name if possible. - Upon first collection check if the three expected services exist; if they don't the user may have selected an incorrect device.
- It's best to read the live bulk endpoint over the live service when its easy to do so (one read vs ~15).
- However if you are just updating one or two line items it may be more efficient to just read these on the live service.
- Feel free to test both and decide.
- When reading settings from the device; the association of number <-> setting is fixed, but you may see settings you don't yet know about, make sure you can handle these.
- You probably don't want to show unknown setting's to the user though.
- Read the device firmware revision and ensure you can decode it. If BLE is revised it may be essential for handling versions cleanly.
- It's advisable to keep an eye on the IronOS repository or at least setup the Github watch for release notifications.
- Future releases may revise some BLE aspects or add new settings for example.
Below is a description of each service. Note that the exact settings are not listed for brevity; it's best to refer to the uuid lists and the handlers alongside this.
UUID: d85ef000-168e-4a71-AA55-33e27f9bc533
The live services has one characteristic per reading. The readings (in order) are: When implementing these; the ones that are not obvious are generally found in the debugging menu. Values are encoded as an unsigned 32 bit number for all results.
- Live temperature (In C)
- Live set point
- DC input voltage
- Handle temperature (In C)
- Power level
- Power source
- Tip resistance
- uptime
- Time of last movement
- Maximum temperature settable
- Raw tip reading
- Hall sensor
- Operating mode
- Estimated wattage
UUID: f6d80000-5a10-4eba-AA55-33e27f9bc533
The settings service has two special entries; for saving and resetting settings.
Otherwise all settings are enumerated using UUID's of the format : f6d7ZZZZ-5a10-4eba-AA55-33e27f9bc533))
where ZZZZ
is the setting number as matched from Settings.h.
All data is read and written in fixed unsigned 16 bit numbers.
To save the settings write a 0x0001
to f6d7FFFF-5a10-4eba-AA55-33e27f9bc533
.
Its advised to not save settings on each change but instead to give the user a save button or save after a timeout. This is just to reduce write cycles on the internal flash.
To reset all settings to defaults; write a 0x0001
to f6d7FFFE-5a10-4eba-AA55-33e27f9bc533
.
This will reset settings immediately.
UUID: 9eae1000-9d0d-48c5-AA55-33e27f9bc533
The bulk endpoint is where extra data is located with varying read sizes.
The bulk live data endpoint provides all of the data provided in the live endpoint, as one large single-read binary blob. This is designed for applications that are showing large amounts of data as this is more efficient for reading.
Not yet implemented
This encodes the current build ID to allow viewing and handling when the BLE format changes.
This is generally the device CPU serial number. For most devices this can be used as an ID. On PinecilV2 its the MAC address.
This is only relevant on the PinecilV2. This is a random ID that is burned in at the factory. This is used by the online authenticity checker tool.