RN42蓝牙在流数据的几秒钟内在iOS上断开连接

RN42蓝牙在流数据的几秒钟内在iOS上断开连接,第1张

概述我一直在尝试使用RN-42通过蓝牙2.1从设备读取数据.该设备与iPhone或iPad Mini配对,数据短暂流式传输,但iOS& BT模块在几秒钟内(小于10)断开连接(取消配对).该设备输出的数据为5-10kB / s,完全符合蓝牙规范.我还注意到的一点是,当我运行函数NSInputStream,[NSInputStream read:maxLength:]时,返回的字节数总是158或更少.应 我一直在尝试使用RN-42通过蓝牙2.1从设备读取数据.该设备与iPhone或iPad Mini配对,数据短暂流式传输,但iOS& BT模块在几秒钟内(小于10)断开连接(取消配对).该设备输出的数据为5-10kB / s,完全符合蓝牙规范.我还注意到的一点是,当我运行函数NSinputStream,[NSinputStream read:maxLength:]时,返回的字节数总是158或更少.应用程序和硬件不会崩溃,但蓝牙只是取消配对.

即使断开连接,设备仍然会向RN42发送数据,从而降低了电子设备问题的可能性.此设置在Android设备上也可以完美运行.我可以在没有任何断开连接或崩溃的情况下流式传输数据.

我尝试过的事情……

>遵循Apple提供的外部附件示例EADemo.
>纯粹使用运行循环而不是轮询.
>按照本文中的建议将流放在后台线程上.
>删除所有NSLog以帮助提高性能.
>在调试和发布模式下编译.

一种有效的方法是减慢数据传输速度(即小于5kB / s),因为它允许iOS和BT模块在断开连接之前保持连接并传输数据更长时间.

#define EAD_input_BUFFER_SIZE 1024/** * Stream delegate */- (voID)stream:(Nsstream *)aStream handleEvent:(NsstreamEvent)eventCode{    switch (eventCode) {[... other cases ...]        case NsstreamEventHasBytesAvailable:        {                        uint8_t buf[EAD_input_BUFFER_SIZE];            unsigned int len = 0;            len = [(NSinputStream *)aStream read:buf maxLength:EAD_input_BUFFER_SIZE];            if(len) {                // Read successful,process data            } else {                // Fail            }                 break;        }        default:            break;    }}/** * Stream delegate with polling (for better or worse) */    [...]        case NsstreamEventHasBytesAvailable:        {                        while ([[_session inputStream] hasBytesAvailable])            {                // Read the data                NSInteger bytesRead = [[_session inputStream] read:_buf maxLength:EAD_input_BUFFER_SIZE];                if (bytesRead > 0) {                    // Read successful,process data                } else if (bytesRead == 0) {                    // End of buffer reached                    return;                } else if (bytesRead == -1) {                    // Failed to read                    return;                }            }            break;    [...]
解决方法 我和microchip(收购Roving Networks的公司,他们是RN42的原始制造商)的人谈过这类问题,似乎有一个不幸的小“功能”没有记录在任何地方RN42手册.

当RN42用于与iOS设备通信时,它的通信速度不能超过2.5-3kB / s …如果它用于与AndroID或计算机或其他任何设备通信,它可以35kB / s(超过SPP)传输.

其原因是RN42中的芯片功率不足,无法处理BT设备和重新打包iOS设备所需格式的字节(iAP协议).

他们建议以下选项:

>切换到使用WiFi模块.
>在您的微控制器上实施iAP协议,并使用vanilla RN42传输数据(理论上应该以35kB / s的速度返回).
>缓冲设备上的数据,并以较慢的速率发回.
>使用vanilla RN42和其中一个实现iAP堆栈的PIC器件.

我有一个礼貌的第五个建议……找一个新的Apple支持的蓝牙模块.

此外,使用4线UART通信应该有助于崩溃.

总结

以上是内存溢出为你收集整理的RN42蓝牙在流数据的几秒钟内在iOS上断开连接全部内容,希望文章能够帮你解决RN42蓝牙在流数据的几秒钟内在iOS上断开连接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1054720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存