Mar 202017
Bluetooth and its LE variant are new areas for me and, but the learning curve is not too steep thanks to Puck.js. Making it do what I want is not easy though since I don’t know what it can do.
The most important documents are:
- https://www.bluetooth.com/specifications/gatt/services for the GATT services which are known
- https://www.bluetooth.com/specifications/gatt/characteristics for the Characteristics of those
- The Espruino Puck.js forum in case you have questions
- The Espruino source code and
- The reference information for Espruino hardware and software (see the Bluetooth and NRF functions and their examples)
Here an example:
// Have a service to show temperature and battery level
// This is only visible when you are connecting to the Puck
var currentTemperature=E.getTemperature().toFixed(2)*100;
console.log("Temp: "+currentTemperature);
NRF.setServices({
0x1809 : { // Health Thermometer
0x2A6E: { // Temperature
readable: true,
notify: true,
value : [ currentTemperature % 256, currentTemperature / 256 ]
}
},
0x180f : { // Battery Level
0x2a19 : { // Percentage
readable : true,
notify: true,
value: [ Puck.getBatteryPercentage() ],
}
}
});
// Updating the temperature
setInterval(function() {
currentTemperature += 1; // For debugging: increase temp by 0.01 degree per update
NRF.updateServices({
0x1809 : {
0x2A6E : {
value : [ currentTemperature % 256, currentTemperature / 256 ],
notify: true
}
}
});
}, 2000);