/*
* Phonk based BLE Oximeter
*/
ui.addTitle(app.name);
network.bluetoothLE.start();
var bleClient = network.bluetoothLE.createClient();
// -> Write here the BLE device MAC Address
var deviceMacAddress = "00:A0:50:1F:23:70";
var gattServiceUUID = "49535343-fe7d-4ae5-8fa9-9fafd205e455";
var gattCharacteristicUUID = "49535343-1e4d-4bd9-ba61-23c647249616";
var gattCharacteristicDescriptorUUID = "00002902-0000-1000-8000-00805f9b34fb";
var gattNotificationEnable = 0x0100;
network.bluetoothLE.start()
//Main text display area
var txt = ui.addTextList(0.1, 0.1, 0.8, 0.2).autoScroll(true)
txt.props.textSize = 15
var dt = ui.addTextList(0.1, 0.35, 0.8, 0.2).autoScroll(true)
dt.props.textSize = 15
//scan bluetooth low energy networks
//this should show devices -> services -> characteristics
ui.addToggle(['Scan bluetooth', 'Stop scan'], 0.25, 0.7, 0.5, 0.1).onChange(function (e) {
if (e.checked) {
network.bluetoothLE.scan(function (data) {
txt.add(data.name + ' ' + data.rssi + ' ' + data.mac)
})
} else {
network.bluetoothLE.stopScan()
}
})
// connect to a device
ui.addToggle(['Connect', 'Disconnect'], 0.25, 0.85, 0.5, 0.1).onChange(function (e) {
if (e.checked) {
bleClient.connectDevice(deviceMacAddress)
} else {
bleClient.disconnectDevice(deviceMacAddress)
}
})
// enable notification
// var send = ui.addButton('Enable the Notification', 0.7, 0.85, 0.2, 0.1).onClick(function () {
// bleClient.write(gattNotificationEnable, deviceMacAddress, gattServiceUUID, gattCharacteristicDescriptorUUID)
// })
bleClient.onNewDeviceStatus(function (e) {
// double check if is the device we want to connect
if (e.deviceMac === deviceMacAddress && e.status === 'connected') {
bleClient.readFromCharacteristic(deviceMacAddress, gattServiceUUID, gattCharacteristicUUID)
txt.add('connected to ' + e.deviceName)
}
})
//https://stackoverflow.com/a/34310051
function toHexString(byteArray) {
return Array.from(byteArray, function(byte) {
return ('0' + (byte & 0xFF).toString(16)).slice(-2);
}).join('')
}
bleClient.onNewData(function (e) {
//var value = util.parseBytes(e.value, "string")
// console.log('(' + e.deviceName + ') ' + e.deviceMac + '/' + e.serviceUUID + '/' + e.characteristicUUID + ' --> ')
dt.add(toHexString(e.value))
})