因此,对于一个项目,我试图通过蓝牙低功耗在Adafruit Feather 32u4和Raspberry PI 3之间进行双向通信。我能够通过UART服务使通信正常进行,但是我想创建一个具有某些特征的自定义服务,可以从这两个设备进行设置和读取。我在树莓派上运行高尚的Node,这就是我计划设置和读取来自Feather的值的方式。
有人能帮我实现任何代码示例吗?我似乎很难通过BLE标准找到有关自定义服务的许多信息。
这是我创建服务的方式:
Serial.println(F("Adding the definition (UUID = 0x8000): "));
success = ble.sendCommandWithIntReply( F("AT+GATTADDSERVICE=UUID=0x8000"), &serviceId);
if (! success) {
error(F("Could not add service"));
}
Serial.println(F("Adding the status characteristic (UUID = 0x8001): "));
success = ble.sendCommandWithIntReply( F("AT+GATTADDCHAR=UUID=0x8001, PROPERTIES=0x08, MIN_LEN=2, DATATYPE=INTEGER, VALUE=0, DESCRIPTION=Outlet 1 Status"), &StatusCharId);
if (! success) {
error(F("Could not add characteristic"));
}
这就是我试图用高贵的(节点)读/写的方式
device.discoverServices(['8000'], function(error, services) {
if(error) {console.log(error);}
var customService = services[0];
console.log(customService);
if(customService) {
customService.discoverCharacteristics(null, function(error, chars) {
for(var i in chars) {
console.log(' ' + i + ' uuid: ' + chars[i].uuid);
if(chars[i].uuid == '8001'){
setInterval(() => {
const convert = (from, to) => str => Buffer.from(str, from).toString(to)
const utf8ToHex = convert('utf8', 'hex')
const hexToUtf8 = convert('hex', 'utf8')
var random = getRandomInt(2);
chars[i].write(new Buffer(random), true, function (error) {
if (error) {
console.log(error);
}
}.bind(this));
chars[i].read(function(error, data) {
// data is a buffer
var val = data.toString('hex');
console.log(data.toString('hex'));
});
}, 2500);
}
看来我的节点代码没有正确设置该值。而且我希望能在羽毛上聆听变化