大佬教程收集整理的这篇文章主要介绍了RN42蓝牙在流数据的几秒钟内在iOS上断开连接,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_8@
即使断开连接,设备仍然会向RN42发送数据,从而降低了电子设备问题的可能性.此设置在Android设备上也可以完美运行.我可以在没有任何断开连接或崩溃的情况下流式传输数据.@H_301_8@
我尝试过的事情……@H_301_8@
>遵循Apple提供的外部附件示例EADemo.
>纯粹使用运行循环而不是轮询.
>按照本文中的建议将流放在后台线程上.
>删除所有NSLog以帮助提高性能.
>在调试和发布模式下编译.@H_301_8@
一种有效的方法是减慢数据传输速度(即小于5kB / s),因为它允许iOS和BT模块在断开连接之前保持连接并传输数据更长时间.@H_301_8@
@H_301_8@
#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; [...]
@H_301_8@
当RN42用于与iOS设备通信时,它的通信速度不能超过2.5-3kB / s …如果它用于与Android或计算机或其他任何设备通信,它可以35kB / s(超过SPp)传输.@H_301_8@
其原因是RN42中的芯片功率不足,无法处理BT设备和重新打包iOS设备所需格式的字节(iAP协议).@H_301_8@
他们建议以下选项:@H_301_8@
>切换到使用WiFi模块.
>在您的微控制器上实施iAP协议,并使用vanilla RN42传输数据(理论上应该以35kB / s的速度返回).
>缓冲设备上的数据,并以较慢的速率发回.
>使用vanilla RN42和其中一个实现iAP堆栈的PIC器件.@H_301_8@
我有一个礼貌的第五个建议……找一个新的Apple支持的蓝牙模块.@H_301_8@
此外,使用4线UART通信应该有助于崩溃.@H_301_8@
以上是大佬教程为你收集整理的RN42蓝牙在流数据的几秒钟内在iOS上断开连接全部内容,希望文章能够帮你解决RN42蓝牙在流数据的几秒钟内在iOS上断开连接所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。