我正在构建一些由 ESP32 控制的 IoT 设备。我想通过 Android 应用程序进行实时控制。因为 WiFi 太耗电(我的设备是电池供电的) 我决定使用 BLE 进行连接,这应该是更合适的选择。
我有 Xamarin Android 应用程序,它充当 GATT 服务器,因为它允许在我的应用程序中连接和聚合多个设备。 ESP32 设备在我做广告并正确接收通知时连接到服务器,例如当我单击按钮时。 问题是我不知道如何管理用户退出应用程序时的情况。 如何恢复连接?在 android 设备的本地数据库中保存一些 deviceId 没有问题,但谁能告诉我应该采取哪些步骤来实现以下结果:
用户将应用连接到设备,退出应用或离开 ble 范围,当他再次打开时,连接恢复,用户可以向设备发送一些数据。
在 ESP32 上似乎没有重新连接选项,而在 android 上理论上有,但是当设备不是服务器而是客户端时(自动连接 = 真) 可能是我做错了(设备应该是服务器,然后可以连接到多个设备并达到实时控制的结果?)
我会感谢任何建议:)
答案 0 :(得分:1)
使用 BLE,您无法从外围设备发起连接。中央设备负责发起和维护连接。因此,您有两种选择来实现您想要的:-
选项 1:如您所说,切换角色,使 Android 设备成为连接的中心。通过这种方式,您可以设置 autoconnect = true,这可能是更简单的选择。
选项 2:保持角色,但在 ESP32 端添加代码,以便在断开连接时,ESP32 切换到连续扫描模式,在其中搜索 Android 设备,并在找到它,它会重新连接。如果您想节省 ESP32 的电池电量,那么您可以让它进入睡眠状态,并且仅在 Android 设备再次可用时定期唤醒以进行快速扫描。
答案 1 :(得分:0)
所以经过一些研究和 Youssif 的回答后,我确实尝试切换角色并使 esp32 作为服务器和 android 应用程序作为客户端。 (尽管一开始似乎违反直觉)
事实证明,作为一个 android ble 客户端,有更多的选择,我认为它是更受支持的路径。我用来管理整个 BLE 的 Shiny.NET 库有很大的可能使这个过程变得非常愉快(如果你通过糟糕的文档)。
这是实现我预期结果的途径:
我没有使用任何特定术语,因为这不是重点。我的应用程序是用 C# Xamarin 编写的,但同样的路径适用于原始的 android 应用程序,这些只是实现细节。