如何正确更改应用程序的 CBUUID/UUID 而不会破坏它?

问题描述 投票:0回答:1

我有一个基于使用 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};

可能发生什么事?抱歉,如果我应该在其他地方发布这个问题,但也许我忽略了一些事情

swift bluetooth-lowenergy uuid arduino-esp32 platformio
1个回答
0
投票

我解决了我自己的问题,这是我自己在 if 语句上编写的代码,而不是检查“!=”我正在做“==”并在我的节点信息包上返回 nil .... 我最大的敌人就是我自己

© www.soinside.com 2019 - 2024. All rights reserved.