我有一个基于使用 BLE 外设的开源项目构建的程序。我是 arduino esp32 硬件,但想要拥有自己的服务并拥有一个单独的应用程序。我将更改蓝牙 UUID 步骤保留在最后,因为我认为这只是简单的变量更改。我使用了在线生成器https://www.uuidtools.com/v4。
我遇到的问题首先是我的外设能够连接,但 iPhone 应用程序无法检索/显示一些外设信息,当这些字段在外设中有数据时,它会显示默认的未知值。否则它将无法发送管理消息,并且在 myNodeInfo 数据上会遇到 nil(而之前没有)。现在我遇到应用程序根本无法连接的情况。但在 VScode 上,终端显示已连接,但多次断开连接,并且从未通过屏幕输入 PIN 码,并且我的应用程序无法继续。
在我更改 UUID 之前,这一切都没有发生。我什至将它们改回原来的状态,它可以连接,但无法像以前一样正确发送我需要的数据!我还尝试过:在 Xcode 和 Vscode 上清理我的项目、卸载我的应用程序并重新安装、重建我的 Vscode C++ 代码、在上传到开发板之前在 PlatformIO 上使用擦除闪存、忘记蓝牙设备、使用 2 个不同的 iphone、在两个窗口上进行编译还有麦克!我什至尝试从工厂拿一个全新的板/设备,没有任何固件并安装它,但同样的问题仍然存在。
我可以显示代码,但不确定这是否有帮助,我不知道发生了什么......
在 Xcode 上,这里是初始化这些变量的唯一位置。
var TORADIO_characteristic: CBCharacteristic!
var FROMRADIO_characteristic: CBCharacteristic!
var FROMNUM_characteristic: CBCharacteristic!
// original was: "0x6AB1B218-15A8-461F-9FA8-5DCAE273EAFD"
let AppServiceCBUUID = CBUUID(string: "0x9692DED8-E048-4499-992B-FF86BE69D834")
// original was: "0xF57C76D2-129E-4DAD-A1DD-7866124401E7"
let TORADIO_UUID = CBUUID(string: "0x164614B5-0F05-4013-B3CF-E777505D8BB7")
// original was: "0x2C55E69E-4939-11ED-B878-0242AC120002"
let FROMRADIO_UUID = CBUUID(string: "0x444D6BB7-6A32-4718-948D-9217F5442FC5")
//end of life(unused) // original was: "0x8BA2CBC2-EE02-4A55-A531-C525C5E454D5"
let EOL_FROMRADIO_UUID = CBUUID(string: "0xE7CCBBBF-D642-45AB-8729-3FB23E63E0CC")
// original was: "0xED9AD18C-A800-4F66-A670-AA7547E34453"
let FROMNUM_UUID = CBUUID(string: "0x100A0727-E3CF-4AE0-8333-AFF4E7BAC1B5")
在 Vscode (C++) 上
#define App_SERVICE_UUID "9692ded8-e048-4499-992b-ff86be69d834"
#define TORADIO_UUID "164614b5-0f05-4013-b3cf-e777505d8bb7"
#define FROMRADIO_UUID "444d6bb7-6a32-4718-948d-9217f5442fc5"
#define FROMNUM_UUID "100a0727-e3cf-4ae0-8333-aff4e7bac1b5"
// NRF52 wants these constants as byte arrays
// Generated here
// https://yupana-engineering.com/online-uuid-to-c-array-converter - but in
// REVERSE BYTE ORDER
extern const uint8_t MESH_SERVICE_UUID_16[], TORADIO_UUID_16[16u], FROMRADIO_UUID_16[], FROMNUM_UUID_16[];
另一个 C++ 类,但我没有使用“NRF52”芯片,而且那不是我的项目环境!
// NRF52 wants these constants as byte arrays
// Generated here
// https://yupana-engineering.com/online-uuid-to-c-array-converter - but in
// REVERSE BYTE ORDER
const uint8_t MESH_SERVICE_UUID_16[16u] = {0x34, 0xd8, 0x69, 0xbe, 0x86, 0xff, 0x2b, 0x99,
0x99, 0x44, 0x48, 0xe0, 0xd8, 0xde, 0x92, 0x96};
const uint8_t TORADIO_UUID_16[16u] = {0xb7, 0x8b, 0x5d, 0x50, 0x77, 0xe7, 0xcf, 0xb3,
0x13, 0x40, 0x05, 0x0f, 0xb5, 0x14, 0x46, 0x16};
const uint8_t FROMRADIO_UUID_16[16u] = {0xc5, 0x2f, 0x44, 0xf5, 0x17, 0x92, 0x8d, 0x94,
0x18, 0x47, 0x32, 0x6a, 0xb7, 0x6b, 0x4d, 0x44};
const uint8_t FROMNUM_UUID_16[16u] = {0xb5, 0xc1, 0xba, 0xe7, 0xf4, 0xaf, 0x33, 0x83,
0xe0, 0x4a, 0xcf, 0xe3, 0x27, 0x07, 0x0a, 0x10};
可能发生什么事?抱歉,如果我应该在其他地方发布这个问题,但也许我忽略了一些事情
我解决了我自己的问题,这是我自己在 if 语句上编写的代码,而不是检查“!=”我正在做“==”并在我的节点信息包上返回 nil .... 我最大的敌人就是我自己