- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
背景
我构建了一个简单的电路,其中包括一个 Arduino Nano 和一个 HM-10 BLE 串行模块。
您可以在以下电气工程 SE 问题中看到该电路:https://electronics.stackexchange.com/questions/412525/when-i-write-data-to-a-ble-characteristic-ffe1-to-send-data-over-bluetooth-is
我还有一个用 Swift 编写的 Xcode 项目,它成功地将字节发送到 FFE1 特征。一切都很好,我可以通过 Arduino 串行监视器看到来 self 的 iPad 的数据。
但是,根据我所做的研究(参见前面的链接),我相信我已经确定我使用 Core Bluetooth 发送的数据 writeValue()未加密。
我想做什么
现在我已经成功发送和接收字节,我想让我的 iPad 与 BLE 设备 (HM-10) 绑定(bind),这样我就可以确保我发送的数据通过提供的 BLE channel 加密。
我尝试过的
CBCharacteristicPropertyNotifyEncryptionRequired
但是 documentation on that at Apple is a ridiculous one-liner .问题
CBPeriperhal
上设置某些属性或需要将某些参数发送到 writeValue()
?最佳答案
在发布我的问题后,我再次搜索配对/绑定(bind)。
我被带到了一个链接 datasheet for the HM-10我已经读过很多遍了。然而这一次,我在文档中搜索了“债券”这个词。
当我这样做时,我阅读了文档中的以下图表:
这让我开始思考和猜测。我认为问题在于 HM-10 是作为 TYPE 0 发送的,这样爱好者用户就可以在不配对的情况下进行设置。
这与我在其他项目中多次使用并且需要配对的 HC-05 模块(经典蓝牙)完全不同。
可能的解决方案
我相信我需要做的就是将 AT_TYPE 设置为 2,然后我的 iOS (iPad) 设备将允许我使用 PIN 进行配对。
我猜它会强制每个用户使用 PIN 来配对他们的设备,然后数据将只能通过安全的 BLE channel 写入(使用 writeValue)。
额外信息
这对我来说也很有趣,因为当我使用默认的蓝牙 iOS 扫描时,操作系统永远不会看到 HM-10——名称不会出现在蓝牙部分下。我猜这是因为 HM-10 没有广播它可以通过 pin 配对,而 iOS 忽略了它。
这对我来说一直很有趣,因为即使 iOS 看不到 HM-10,我也可以连接到它并通过我的 Swift 代码向它发送数据。哇,这一切可能终于走到了一起。
我今晚会对此进行测试,然后发回确认设置 TYPE 是否可以解决问题。
还有一件事
我在 HM-10 ( see Martyn Curry's fantastic, detailed articles ) 上所做的广泛阅读中没有提到这个选项,我也没有在任何地方看到它的讨论。
我还看到一些网站表明 AT+TYPE
用于设置设备是否为Master/Slave (Central/Periperhal)我认为这不是该项目的正确文档。这一切都使得确定如何让它发挥作用变得更加困难。
更新说明
我正在阅读 yet another datasheet for HM-10这表明 AT+TYPE 的默认设置实际上是 0(不需要 PIN 码),如图表底部所示。不知道为什么其他数据表没有相同的信息,因为它看起来像同一张图表。
更新 2 - 这就是答案。我启动 HM-10 并运行 Arduino 代码,允许我发送 AT 命令并发送 AT+TYPE3<ENTER>
然后发送 AT+RESET 以确保 HM-10 会自行重启。
之后,您无需执行任何其他操作。我使用在 iPad 上运行的 iOS 应用程序将数据发送到 FFE1 特性。当我尝试这样做时,iOS 弹出默认的 BLE 配对/绑定(bind)对话框并询问 PIN(这些 HM-10 组件上的默认值为 000000)。
注意 我发现的一件事是我的一个 HM-10 有故障。即使我取消配对或配对失败(通过发送错误的 PIN),它也允许写入数据。该制造商的组件不再可用,因此我假设它有误。我的另一台 HM-10 完全按照预期工作。如果您不配对或配对失败,则应用程序无法写入数据。我会尽快将其标记为答案。
关于ios - 如何使用 Swift 代码和 HM-10 配对和/或绑定(bind)到 iOS 上的 BLE,以便加密发送的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53872133/
我有一个服务器程序(适用于所有三个主要操作系统),它是用 C++ 创建的,它努力连接两个陌生人进行通信。我当前的模型似乎已经过时了,我只是想知道是否有更好的方法来为客户提供服务。 -服务器收到连接请求
我希望有人能告诉我 GoogleTV 如何与本地 Youtube 应用配对。 我感兴趣的是“第一屏”GoogleTV/SmartTV 功能。 据我目前所知,“第二屏”应用程序需要使用与配对服务(来自
感谢下面的提示 • 您需要一次遍历字符串一个字符(for 循环或 while 循环) 当您点击 ,这是您的结束标记 • 现在检查> 之前的字符。是/吗? • 是:查看堆栈顶部。该字符串与 之间的字符
我正在使用 Node.js 和 WebSocket 创建基本的一对一聊天。每次客户端连接时,都会向他们发送其 ID 以及 salt+id 的 MD5 哈希值。然后,他们需要与另一个客户配对。当它们配对
我刚刚开始深入研究 Racket 宏,并尝试制作一个简洁的宏定义宏。我想扩展这样的表达式: (macro id (param) replacement1 (params ...) re
我有一个 foreach 循环(看,它在下面),我得到了一些元素。将此数据存储到 MySQL 中时,我想选择每个“count[]”所属的类别(此处标记为“interaction[]”)。例如,如果第
是否有可能找到一种更好的/模块化的方式来为配对分配相同的颜色,而不是像我目前实现的那样对它们进行硬编码? 如果对象 fname 匹配,则分配相同的颜色。 以下是 javascript 对象的子集。 d
在我的 iPhone 应用程序中,我想与固件设备通信。在连接期间,他们可以要求提供配对 key ,但他们说他们没有提供输入 key 的规定。 在这种情况下,USP(用户智能手机)永远不知道输入的 ke
这个问题在这里已经有了答案: How to merge every two lines into one from the command line? (21 个回答) 关闭 6 年前。 使用一个简
function pair(str) { var dna = []; var dnaarr = []; for(var i = 0; i < str.length; i++) {
我是一个相对年轻的开发人员,我对一些事情感到困惑。 这是我的代码: function pairElement(str) { var arr = []; var pairs = [
我有一个脚本,可以从文本文件中读取并插入元素,以便可以对它们进行样式设置和显示。但是,我现在想在 DIV 中配对两个元素。这是代码: var lines = request.responseText.
.Spotify:hover img { display:block; position: absolute; z-index: 0; top:17%; lef
我正在努力使用摩托罗拉随 RAZR 提供的 BT 4.0 API。在 one of their documents它声明在连接和使用他们的框架之前使用 Android API 进行配对。根据他们的说明
谁能告诉我一次可以通过蓝牙将多少台设备与 iPhone 配对..需要帮助..直到现在我还没有确切的数字。 最佳答案 在 iOS 6.1.4 中,低功耗蓝牙设备的当前限制是 10 个同时连接(至少在 N
我正在创建一个扩展推送通知的 Android Wear 应用程序。当推送通知进来时,我的应用程序会从服务器下载大约 10 张图像,并在 watch 上显示这些额外的图像。这些图像特定于 android
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题?通过 editing this post 添加详细信息并澄清问题. 8年前关闭。 Improve this
我有一个类似于使用以下命令获得的数据表: dt <- data.table( time = 1:8, part = rep(c(1, 1, 2, 2), 2), type = rep(c(
为了回应有用的评论,我编辑了原始问题(我假设 for 循环和应用循环给出不同的结果)。 我正在使用 R 运行大量 2 组 t 检验,使用来自分隔表的输入。根据此处和其他地方的建议,我尝试了“for-l
是否可以将脚本(例如 MathJax)加载到 EpicEditor 预览 iFrame 中?我希望我的预览是正确的 Markdown,然后运行 javascript 来预览 MathJax 内容。
我是一名优秀的程序员,十分优秀!