使用按钮从 IoT 设备发送信号到 react-native 应用程序蓝牙并了解服务和特性

Posted

技术标签:

【中文标题】使用按钮从 IoT 设备发送信号到 react-native 应用程序蓝牙并了解服务和特性【英文标题】:Sending signal from IoT device with button to react-native application bluetooth-ble and understanding services and characteristics 【发布时间】:2021-12-29 18:48:22 【问题描述】:

我正在制作一个 react-native 应用程序,该应用程序将连接到具有按钮的 IoT 设备。我已设法将我的应用程序连接到 IoT 设备,并且我正在获取服务和特性以及其他信息,但我不确定如何理解这些以及如何通过单击按钮将信号从设备发送到我的手机。

我正在使用真正的 iPhone 设备进行测试。

以下是我 console.log 连接设备信息后的输出:

 LOG  Connected to 4C9C0294-C96E-A796-113A-16032707772F
 LOG  "advertising": "isConnectable": 1, "kCBAdvDataRxPrimaryPHY": 129, "kCBAdvDataRxSecondaryPHY": 0, "kCBAdvDataTimestamp": 662495861.133707, "serviceData": "FFE1": [Object], "serviceUUIDs": ["FFE1"], "characteristics": ["characteristic": "2A29", "isNotifying": false, "properties": [Array], "service": "180A", "characteristic": "2A24", "isNotifying": false, "properties": [Array], "service": "180A", "characteristic": "2A25", "isNotifying": false, "properties": [Array], "service": "180A", "characteristic": "2A27", "isNotifying": false, "properties": [Array], "service": "180A", "characteristic": "2A26", "isNotifying": false, "properties": [Array], "service": "180A", "characteristic": "2A28", "isNotifying": false, "properties": [Array], "service": "180A", "characteristic": "7F280002-8204-F393-E0A9-E50E24DCCA9E", "isNotifying": false, "properties": [Array], "service": "7F280001-8204-F393-E0A9-E50E24DCCA9E", "characteristic": "A3C87501-8ED3-4BDF-8A39-A01BEBEDE295", "isNotifying": false, "properties": [Array], "service": "A3C87500-8ED3-4BDF-8A39-A01BEBEDE295", "characteristic": "A3C87502-8ED3-4BDF-8A39-A01BEBEDE295", "isNotifying": false, "properties": [Array], "service": "A3C87500-8ED3-4BDF-8A39-A01BEBEDE295", "characteristic": "A3C87503-8ED3-4BDF-8A39-A01BEBEDE295", "isNotifying": false, "properties": [Array], "service": "A3C87500-8ED3-4BDF-8A39-A01BEBEDE295", "characteristic": "A3C87504-8ED3-4BDF-8A39-A01BEBEDE295", "isNotifying": false, "properties": [Array], "service": "A3C87500-8ED3-4BDF-8A39-A01BEBEDE295", "characteristic": "A3C87505-8ED3-4BDF-8A39-A01BEBEDE295", "isNotifying": false, "properties": [Array], "service": "A3C87500-8ED3-4BDF-8A39-A01BEBEDE295", "characteristic": "A3C8750A-8ED3-4BDF-8A39-A01BEBEDE295", "isNotifying": false, "properties": [Array], "service": "A3C87500-8ED3-4BDF-8A39-A01BEBEDE295", "characteristic": "A3C8750B-8ED3-4BDF-8A39-A01BEBEDE295", "isNotifying": false, "properties": [Array], "service": "A3C87500-8ED3-4BDF-8A39-A01BEBEDE295"], "id": "4C9C0294-C96E-A796-113A-16032707772F", "name": "nRF5x", "rssi": -52, "services": ["180A", "7F280001-8204-F393-E0A9-E50E24DCCA9E", "A3C87500-8ED3-4BDF-8A39-A01BEBEDE295"]

主要问题是如何翻译这些服务和特征的含义?

第二个问题是您是否知道如何从物联网设备按钮单击接收信号?

【问题讨论】:

您可能需要学习蓝牙 LE GATT 服务和特性的基础知识,否则您将无法走得很远。 bluetooth.com/bluetooth-resources/intro-to-bluetooth-gap-gatt。如果您了解这一点,则需要为您的 IoT 设备获取一些说明特性含义的文档。 【参考方案1】:

物联网设备是您制造的还是来自某个地方?如果你做到了,你应该知道按钮如何更新设备特性。如果不是,那么我建议阅读您的物联网设备的数据表,看看它们是否指定了每个特征的含义。或者,您可以下载 LightBlue 之类的蓝牙扫描仪应用程序,然后查看设备的所有特征。当你按下按钮时,它们中的数据会发生变化。

【讨论】:

设备是预制的。当我连接到这些设备(我已经订购了其中的 2 个)时,它们只会在断开连接前保持连接约 10 秒。所有应用程序(BLE 扫描仪、nrfConnect、LightBlue)都会发生这种情况。这是正常的吗?当我按照我的理解进行连接时,如果我的应用程序要监听一个事件,在这种情况下“从 IoT 设备单击按钮”,那么该特性需要具有“指示”或“通知”值吗?似乎有一些服务和特性具有读、读/写和一个有读/写/通知的服务和特性,这就是我猜的 bu 例外是应用程序 BeaconSET+,它保持连接并让我编辑参数 我不确定它为什么会自行断开连接。也许设备有一些消息,如果它没有得到它,它会断开连接?是的,如果设备以这种方式实现了按钮,则该特征应该具有通知属性

以上是关于使用按钮从 IoT 设备发送信号到 react-native 应用程序蓝牙并了解服务和特性的主要内容,如果未能解决你的问题,请参考以下文章

如何通过azure设备配置服务从azure功能向iot设备发送自定义错误消息?

Azure IoT 中心 - 使用 IoT 中心将文件从 Azure blob 下载到 IoT 设备

如何使用IoT规则将数据从AWS IoT发送到AWS DynamoDB v2

没有设备令牌的 ios 推送通知/消息

iOS 给iot设备配网

无法将云到设备消息发送到 Azure IoT 中心