我正在查看 Arduino 的 BLE 演示:
https://github.com/dzindra/BLE-iOS-demo/blob/master/esp32blinky/esp32blinky.ino
我注意到没有“身份验证/授权”或明确的“连接代码”。
该代码包括创建服务和特性以及对其进行广告。最多您可以看到客户端连接时触发的以下回调:
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
Serial.println("Connected");
};
void onDisconnect(BLEServer* pServer) {
Serial.println("Disconnected");
}
};
我想知道人们采用什么方法来确保用户只有在拥有者的情况下才能连接到 Arduino 的 BLE(例如,按下按钮“触发”连接模式)等...
另一个示例展示了充当客户端的 ESP32 如何通过服务器进行身份验证:
两者似乎都是两个 ESP32 如何充当客户端/服务器并相互验证的好例子。那么我该如何让我的 iPhone 进行身份验证呢?我使用以下 iPhone 示例进行简单连接,无需身份验证。
事情看起来有点“hacky”,想知道是否有关于如何通过身份验证连接到 Arduino BLE 的权威答案?
编辑:基本上,我不想阻止随机的人连接到我的 BLE 设备。除此之外我不需要任何东西(我不需要加密)。我只是想防止随机人员连接到我的设备,并破坏我的智能手机与 BLE 设备的连接。
似乎无论您使用什么机制来验证有效连接,问题仍然存在:如果您的 BLE 设备实际上使用广告数据包来传送数据,那么当有人尝试连接时,广告数据包传输就会中断,直到您断开未经授权的连接。 我利用一小段时间的机会将正确的值写入寄存器,否则将重置连接。
广告的功能不是传递数据(在某些罕见的例子中可能是)。此外,广告与联系关系不大。许多设备在无法连接的情况下进行广告。任何人都可以被动扫描您的设备,这就是广告的重点。
此外,BLE 中的术语是外围设备和中央设备、客户端和服务器还有其他含义,很可能是指 GATT 客户端和服务器(服务器通常但不总是在外围设备中)
关于限制与您的设备的连接:连接时您可以检查中心设备的MAC地址并使用白名单来决定是否要断开连接。更好的是使用配对/绑定。