串口传输速率702n怎么收不到手机app 信号

本文的三位作者正阳、海洋、阿仂是来自不同公司的工程师,在Agora RTC Hack 上海站编程马拉松上开发了一款可实时视频远程看房的智能小车。本文将从方案设计、硬件开发、Android 端開发、服务端部署详实分享他们的开发经历。

此前听到多很多次“黑客马拉松”这样的活动一群来自不同地方的人聚在一起,组队、構思、开发在48小时内做出产品雏形。我们三人抱着去听听别人的创意重在参与的想法参加了这次比赛。对于想要做的东西在比赛前吔只是有一个大概的方向:

  1. 构思的方向依据我们擅长的部分来组合拼接,这就得说到我的两位给力队友海洋、阿力;海洋是嵌入式软件工程师汽车电子方向,写个驱动做个小车手到擒来阿力是后端工程师,具备处理服务器端和前端页面的能力
  2. 于是队伍有了嵌入式和云端两部分的能力,技术构思的方向是云端为嵌入式赋能希望有一个小车,小车可以传递回视频图像视频图像可以实时传给多个用户,鼡户在得到授权之后实现远程对小车的操控。

出于这样的构思实现架构如上图所示。现在有了一个基本架构也清楚了我们要实现的功能,接下来就是分工了考虑到我们各有所长,分工如下:

使用 Android系统完成摄像头驱动 在 Android系统中加入驱动,解析运动控制信号实现小車运动
将摄像头采集的视频传递出去,解析服务器信令,给小车发送运动信号 用户可以通过手机查看小车视频并控制小车
将视频传输服务器挂到公网上,用户可以用输入网址的方式查看小车视频 提供web前端用户可以通过网页控制小车

小车采用了是4轮伺服电机驱动,搭配有视頻采集模块、伺服电机驱动模块、STM32控制模块和摄像头云台模块安装后整体效果图如下:

用户在远程操控小车各种动作之前,需要小车通過wifi连接到互联网用户可以通过上位机(Android APP 或网页前端)控制小车前后左右移动或控制云台调整摄像头方向。

视频采集模块包含有wifi模块可鉯连接到wifi热点为视频传输提供网络基础。也提供HDMI接口与显示器连接方便用户调试。摄像头通过USB的方式与视频采集模块连接我们采用免驅动的天敏6602型号摄像头,分辨率可以达到640*480并能够自动调焦。

STM32控制模块采用 Arduino 接口与伺服电机驱动模块连接STM32模块负责控制电机、云台信号嘚产生,并由伺服电机驱动模块直接驱动电机工作伺服电机输入电压为6~12V,直流驱动

小车上的视频采集模块采用了定制的 Android 系统,提供网絡连接、指令转发和视频流采集、传输功能当上位机通过远程服务连接到小车后,上位机可以请求到当前小车摄像头上的视频信息;同時视频采集模块也将上位机上传来的控制信号解析为指定格式和功能的协议数据,并通过串口传输速率发送到 STM32控制模块

小车上的STM32控制模块在接收到相关控制信号后,调整输出脉冲信号的占空比由驱动板转换输出电平后直接控制伺服电机或云台模块做出相应的动作,从洏完成上位机用户想要的操控功能

对于只需要实现简单的小车控制的话,我们只需要实现通过串口传输速率向 STM32控制模块发送控制信号即鈳简单的控制信号协议如下:

为了实现我们想要的实时视频与小车的远程控制功能,我们需要采用的视频SDK并运行在 Android

为了实现RK3128对小车的控制,我们需要实现 RK3128通过 USB 转串口传输速率模块与STM32控制模块通信因此我们首先要重新配置RK3128内核,使得RK3128支持 USB转串口传输速率驱动程序

首先丅载完并先验证文件MD5值:

最后编译完成后烧录分区镜像,并插入USB转串口传输速率工具查看系统dmesg是否出现以下log信息:

出现串口传输速率设备附着到 ttyUSBx即说明定制串口传输速率驱动成功。

以上为全编译Android SDK的方法需要编译 Android 系统,相较于仅编译内核而言比较费时我们可以在上述make menuconfig时將需要的串口传输速率驱动程序勾选为M,通过make modules的方法将驱动编译成.ko文件,然后在 Android系统开机时自动加载驱动程序:

首先将.ko驱动程序文件复淛到 Android 文件系统内

修改init.rc并添加运行自己的脚本

在 App 端实现视频传输

视频传输和信令传输的部分我们通过声网 Agora SDK 来实现。由于涉及到与嵌入式开發板的结合我们主要参考的是声网在 Github 提供的各种案例中的抓娃娃机 demo。示例代码中的结构图如下:

示例代码有视频传输的部分控制信令需要自己完成。

就此使用示例代码可以顺利开启视频传输功能。

用信令让 App 控制小车

信令的具体使用方法见这里不进行详尽描述。主要使用的函数如下:

// 设置对端收到消息回调( // 设置对端接收到频道消息回调

对于小车端的 Android App 得到信令之后需要串口传输速率发送数据因此如哬实现 Android App 操作串口传输速率。这里简述两种方案:

  1. 采用 Android 系统给出的架构进行处理 Android 带有串口传输速率demo代码,名称为 SerialPort这里注意两点,此处的玳码依赖于 JNI 工具和 NDK如果没有完整安装在使用项目代码的时候会出现问题。另外串口传输速率操作不方便使用 Android 模拟器进行测试,对于没囿串口传输速率的设备在开启串口传输速率的动作时,会报错并可能导致程序退出崩溃

对于短时间实现功能来说,方案2是更容易实现嘚方法这里需要非常注意的一点,需要重新编译android的framework层给app赋予root权限 当信令解析完成串口传输速率调试通过,就可以实现远程控制小车的荇进了

为了实现用户可以方便通过手机或者电脑在线实时看房,我们需要通过web端连接小车的Android App端获取实时传输过来的视频内容。在我们嘚设想中用户可以通过远程控制小车,这样可以方便用户了解房屋各个方面的情况综上所述,我们需要实现如下两个功能:

幸运的是通过声网提供的服务,我们可以很便捷的搭建这两个服务 在本项目中,我们使用声网的视频SDK实现网页端和小车APP端的视频连接通过信囹SDK发送消息,去控制小车的前后左右行走和摄像头上下左右摆动

罗列一下我们使用到的工具:

  • 视频通话的及,用来实现远程的视频交互功能;

  • 信令的及用来实现远程遥控智能小车;

  • 服务器,用于部署静态页面;

实现视频连接和发送消息

先在页面上引入视频和信令的 SDK然后我們先来实现视频连接。


 
 
 
订阅远端的视频流并播放





 
 
完成上述的步骤之后,与小车端设置相同的appId和token(如有必要)设定好对应的参数,我们就可鉯远程控制小车并获取视频了


 
Hacker 们用实际行动,说明了 RTC 技术不仅仅可应用于娱乐、社交、教育等领域还可以迸发出更多新的创意。就在菦期Agora RTC Hack 还在全球其它城市火热进行中。有个人也有来自创业公司的团队参赛并获奖。我们将邀请其中几支来自世界各地的获奖团队参加箌9月7日 - 8日举行的 RTC 2018 实时互联网大会现场不仅有 Google WebRTC 产品经理、华为多媒体实验室首席科学家、西北工业大学智能声学与临境通信中心首席科学镓、Twitch 首席研发工程师、AVS 标准工作组组长等技术大咖们带来的干货,还将有这些饱含创意与开发热情的小项目想与他们聊一聊,交个朋友麼

系统的功能分析及体系结构设计 3.1.1系统功能分析


本设计由STC89C52单片机电路+8位LED灯电路+蓝牙模块电路+电源电路组成
1、通过手机APP可以控制8路LED灯的亮灭。
2、通过手机APP可以控制8路LED灯的亮喥每个灯的亮度有3档。
3、可以发送指令控制8个灯全灭和全亮
//蓝牙发送数据内容:
ON // 打开所有灯 大写字母’O’
Ax //一档打开 第x个灯 x为1-8中的一个數 如A2表示把led2灯打开的亮度为1挡
Bx //二档打开 第x个灯 x为1-8中的一个数 如A2表示把led2灯打开的亮度为2挡
Cx //三档打开 第x个灯 x为1-8中的一个数 如A2表示把led2灯打开的亮喥为3挡
3.1.2系统总体结构
本系统具体框图如下图所示:

STC89C52单片机核心系统电路设计
STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统鈳编程Flash存储器STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash512字节RAM, 32 位I/O 口线看门狗定时器,内置4KB EEPROMMAX810複位电路,3个16 位定时器/计数器4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构)全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作支持2种软件可选择节电模式。空闲模式下CPU 停止工作,允许RAM、定时器/计数器、串口传输速率、中断继续工作掉电保护方式下,RAM内嫆被保存振荡器被冻结,单片机一切工作停止直到下一个中断或硬件复位为止。最高运作频率35MHz6T/12T可选。

LED信号指示灯电路设计
LED灯即发光②极管它是半导体二极管的一种,可以把电能转化成光能发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性在电路Φ,R_P1是单排阻单排阻的作用是限流,保护LED灯只要单片机的控制引脚拉低,则LED灯亮否则,LED灯不亮其具体电路原理图如下图所示。

JDY-30蓝牙模块电路设计 蓝牙模块是指集成蓝牙功能的芯片基本电路集合用于无线网络通讯。本蓝牙模块就是为了只能无线数据传输而专门打造嘚本模块支持串行接口,支持SP蓝牙串口传输速率协议具有成本低、体积小、收发灵敏性高等特点,只需配备少许的外围元件就能实现夶功能


(1)支持蓝牙 SPP 串口传输速率协议
(5)数据传输比 BLE 蓝牙快、可达到 8K 每秒以上的速率
(6)支持与 SPP 主蓝牙模块连接通信(JDY-30 为从 SPP 蓝牙模块)
(7)支持与电脑 SPP 蓝牙通信
(4)蓝牙高速数据传输产品应用
(2)工作温度:-40℃-85℃
(3)天线:PCB板载天线
(1)RXD 串口传输速率输入,电平为TTL电平
(2)TXD 串口传输速率输出电平为TTL电平
蓝牙模块接口电路图如下图所示。
// 蓝牙发送字符 CX或cX 表示关闭x位灯 x取值1-8 // 蓝牙发送字符 OX或oX 表示关闭x位灯, x取值1-8 LED1=1; //关闭相应的灯 并恢复命令标志 ;//蓝牙的接收处理 均在中断中处理 请查看串口传输速率中断 TMOD |= 0x01; //使用模式116位定时器,使用"|"符号可以在使用哆个定时器时不受影响 if(TI) //如果是发送标志位清零

声明:这篇文章转载beautifulzzzz笔记网址:/zjutlitao/,其中比较多的受益于xubin341719的蓝牙系列文章同时还有其他网上作者的资料。由于有些文章只做参考或统计不足如涉及版权请在下面留言~。同时我也在博客分类中新建一个蓝牙通信分类用来研究分享蓝牙相关技术。

主要参考资料的来源:xubin341719[下面是该前辈的BT系列文章]
下载连接: (基本涵盖所有蓝牙协议)、(三蓝牙版本的核心协议v2.1\v3.0\v4.0)、(蓝牙协议相关初学者必读开发者参考)

蓝牙,是一种支持设备短距离通信(一般10m内)的技术能在包括移动电话、PDA、无线耳机、、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术能够有效地簡化终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信从而变得更加迅速高效,为拓宽道路蓝牙采用结构以及快跳频囷短包技术,支持点对点及点对多点通信工作在全球通用的2.4GHz ISM(即工业、科学、医学)。其数据速率为1Mbps采用传输方案实现。

1、无线射频單元(Radio):负责数据和语音的发送和接收特点是短距离、低功耗。蓝牙天线一般体积小、重量轻属于微带天线。
2、基带或链路控制单元(LinkController):進行射频信号与数字或语音信号的相互转化实现基带协议和其它的底层连接规程。
3、链路管理单元(LinkManager):负责管理蓝牙设备之间的通信实現链路的建立、验证、链路配置等操作。
4、蓝牙软件协议实现:如上图紫色部分这个后面我们做详细说明。

蓝牙协议体系中的协议按SIG的關注程度分为四层:

除上述协议层外规范还定义了主机控制器接口(HCI),它为基带控制器、连接管理器、硬件状态和控制寄存器提供命囹接口在图1中,HCI位于L2CAP的下层但HCI也可位于L2CAP上层。

蓝牙核心协议由SIG制定的蓝牙专用协议组成绝大部分蓝牙设备都需要核心协议(加上无線部分),而其他协议则根据应用的需要而定总之,电缆替代协议、电话控制协议和被采用的协议在核心协议基础上构成了面向应用的協议 

在设备之间发送和接收文件。如果想发送和接收流数据(而且想采用传统的串口传输速率应用程序并给它加上蓝牙支持),那么 RFCOMM 哽好反过来,如果想发送对象数据以及关于负载的上下文和元数据则 OBEX 最好。

蓝牙应用程序活动图如下:

找到服务,RFCOMM是通过不同的频噵(channel)来提供不同的Profile的所以需要找到要用的服务在设备上的哪个频道上,这是通过同一个软件包里的sdptool来完成的就是SDP,服务发现协议 

  從3.0版本开始(据说2.1也是支持的TBD),蓝牙才开始支持BluetoothProfileBluetoothProfile是蓝牙设备间数据通信的无线接口规范。想要使用蓝牙无线技术,设备必须能够翻译特定蓝牙配置文件,配置文件定义了可能的应用.

    蓝牙配置文件表达了一般行为,蓝牙设备可以通过这些行为与其他设备进行通信.

    蓝牙技术定义叻广泛的配置文件,描述了许多不同类型的使用安全.按蓝牙规格中提供的指导,开发商可创建应用程序以用来与其他符合蓝牙规格的设备协同笁作.在最低限度下,各配置文件规格应包含下列主题的相关信息.

    为执行其任务,每个配置文件都使用堆栈各层上的特定选项和参数.若需要,也可包括必需的服务记录概要ProfilesAPI层则分别对Audio、Data、Control等提供了不同的模块。目前已规范有四大类、十三种协议规格

  Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部的Bluetooth规范为了更容易的保持Bluetooth设备之间的兼容,Bluetooth规范中定义了ProfileProfile定义了设备如何实现一种连接或者应用,你可以紦Profile理解为连接层或者应用层协议

GAP是所有其他配置文件的基础,它定义了在蓝牙设备间建立基带链路的通用方法.除此之外,GAP还定义了下列内容:

   ① 必须在所有蓝牙设备中实施的功能
   ② 发现和链接设备的通用步骤
   ③ 基本用户界面术语.

GAP确保了应用程序和设备间的高度互操作性,还尣许开发人员利用现有的定义更加容易地定义新的配置文件.GAP处理未连接的两个设备间的发现和建立连接过程.此配置文件定义了一些通用的操作,这些操作可供引用GAP的配置文件,以及实施多个配置文件的设备使用.GAP确保了两个蓝牙设备可通过蓝牙技术交换信息,以发现彼此支持的应用程序.不符合任何其他蓝牙配置文件的蓝牙设备必须与GAP符合以确保基本的互操作性和共存.

SDAP描述了应用程序如何使用SDP发现远程设备上的服务.由於GAP的要求,任何蓝牙设备都应能够连接至其他蓝牙设备.基于此,SDAP要求任何应用程序都应当能够发现它要连接的其他蓝牙设备上的可用服务.此配置文件可承担搜索已知和特定服务及一般的任务.SDAP涉及了称为“服务发现用户应用程序”的一个应用程序,这是蓝牙设备查找服务所必需的.此應用程序可与向/从其他蓝牙设备发送/接收服务查询的SDP相接.SDAP依赖于GAP,并可以重新使用部分GAP.

SPP定义了如何设置虚拟串行端口及如何连接两个蓝牙设備.SPP基于ETSI TS 07.10规格,使用RFCOMM协议提供串行商品仿真.SPP提供了以无线方式替代现有的RS-232串行通信应用程序和控制信号的方法.SPP为DUN,FAX,HSP和LAN配置文件提供了基础.此配置攵件可以支持最高128kb/s的数据率.SPP依赖于GAP.

GOEP可用于将对象从一个设备传输到另一个设备.对象可以是任意的.如:图片,文档,名片等.此配置文件定义了两个角色:提供拉提或推送对象位置的服务器及启动操作的客户端.使用GOEP的应用程序假定链路和信道已按GAP的定义建立.GOEP依赖于串行端口配置文件.
GOEP为使鼡OBEX协议的其他配置文件提供了通用蓝图,并为设备定义了客户端和服务器角色.对于所有的OBEX事务.GOEP规定应由客户端启动所有事务.但是此配置文件並没有描述应用程序就如何定义要交换的对象或如何实施交换.这些细节留给属于GOEP的配置文件.即OPP,FTP和SYNC去完成.通常使用此配置文件的蓝牙设备为筆记本电脑,PDA,手机及智能电话.

注意:蓝牙1.1版本规范所有蓝牙设备的最小实现必须支持通用访问配置文件,服务发现应用配置文件和串行端口配置攵件.

在两台电脑或者Labtop之间就可以建立这种连接,如下图所示: 

SPP是基于RFCOMM的spp 协议处于rfcomm的上层,spp的应用需走rfcomm层如果你使用RFCOMM能够实现,那么也僦不需要使用SPP而却速度还会比SPP来做快,因为省略了采用profile的一些数据包头等不过,还是推荐采用SPP来做兼容性有保证,这也是为什么蓝牙本质上数据和语音的传送却出现HFPHSP,SPPOPP等诸多具体应用profile的原因。

? 蓝牙4.0实际是个三位一体的蓝牙技术它将传统蓝牙、低功耗蓝牙和高速蓝牙技术融合在一起,这三个规格可以组合或者单独使用也就是说 BLE是蓝牙4.0增加的,之前没有(TBD)

蓝牙4.0专门面向对成本和功耗都有较高要求的无线方案,其主打特性就是省电、省电、省电极低的运行和待机功耗使得一粒纽扣电池甚至可连续工作一年之久。它有低功耗、经典、高速三种协议模式其中:高速蓝牙主攻数据交换与传输;经典蓝牙则以信息沟通、设备连接为重点;低功耗蓝牙以不需占用太哆带宽的设备连接为主。这三种协议规范能够互相组合搭配从而适应更广泛的应用模式。正因为有了三种可以互相组合搭配的协议蓝牙4.0因此成为唯一一个综合协议规范。它有着极低的运行和待机功耗此外,低成本和跨厂商互操作性3毫秒低延迟、AES-128加密等诸多特色,可鉯用于计步器、心律监视器、智能仪表、传感器物联网等众多领域大大扩展蓝牙技术的应用范围。

蓝牙4.1主打IOT(Internet Of Things全联网)最新的蓝牙4.1標准是个很有前途的技术,其智能、低功耗、高传输速度、连接简单的特性将适合用在许多新兴设备上

蓝牙4.1设备可以同时作为发射方和接受方,并且可以连接到多个设备上。举个例子智能手表可以作为发射方向手机发射身体健康指数,同时作为接受方连接到蓝牙耳机、手環或其他设备上蓝牙4.1使得批量数据可以以更高的速率传输,当然这并不意味着可以用蓝牙高速传输流媒体视频这一改进的主要针对的還是刚刚兴起的可穿戴设备。例如已经比较常见的健康手环其发送出的数据流并不大,通过蓝牙4.1能够更快速地将跑步、游泳、骑车过程Φ收集到因为新标准加入了对IPv6专用通道联机的支持,通过IPv6连接到网络实现与Wi-Fi相同的功能,解决可穿戴设备上网不易的问题

蓝牙4.0和蓝牙4.1的比较

)不同,蓝牙低功耗(BLE)的目的是提供更显著的低功耗这使得Android应用程序可以和具有低功耗的要求BLE设备,如接近传感器心脏速率监视器,健身设备等进行通信

③ BLE低功耗蓝牙软件有2个主要组成: OSAL操作系统抽象层和 HAL硬件抽象层,多个Task任务和事件在OSAL管理下工作而每個任务和事件又包括3个组成:BLE 协议栈,profiles和应用程序

         附图1 BLE蓝牙协议栈结构图

分为两部分:控制器和主机。对于4.0以前的藍牙这两部分是分开的。所有profile(姑且称为剧本吧用来定义设备或组件的角色)和应用都建构在GAP或GATT之上。下面由结构图的底层组件开始介绍 

附图 2 BLE低功耗蓝牙系统架构图,图中的Task用附图1BLE蓝牙协议栈结构图来描述

通用属性规范(GATT)—GATTprofile是一个通用规范用于在BLE链路发送和接收被稱为“属性(attributes)”的数据片目前所有的低功耗应用 profile都是基于GATT。

蓝牙SIG定义了许多profile用于低功耗设备Profile(配置文件)是一个规范,规范了设备洳何工作在一个特定的应用场景注意:一个设备可以实现多个profile。例如一个设备可以包含一个心脏监测仪和电池电平检测器。

    低功耗蓝牙模块主透传协议是针对低功耗蓝牙模块从透传协议设计的通过本协议模块可替代手机设备与从透传协议模块连接,实现透传功能或直驅控制功能此协议模块可用作从透传协议模块开发过程中的辅助工具。

    BLE主透传协议模块(以下简称MTTM)可以工作在透传模式(TTM)或指令模式(CM)

    MTTM上电启动后,处于待机模式(SBM)此时处于空闲状态,无睡眠需要用户通过AT指令控制模块连接从设备。在成功与从设备建立链接后MTTM会自动查找从设备的透传通道,如果从设备属于BLE从透传协议模块(以下简称STTM)MTTM默认进入透传模式,否则默认进入指令模式

  透傳模式下,用户CPU可以通过模块的通用串口传输速率与STTM进行双向通讯从MTTM串口传输速率输入的数据将转发到STTM,并从STTM的串口传输速率输出;从STTM輸入的数据将转发到MTTM并从MTTM的串口传输速率输出,从而实现透明传输功能用户数据的具体含义由上层应用程序自行定义。 

透传中数据的格式也是profile或蓝牙标准profile或自定义simple profile。基本结构依然是:

  profile可以理解为一种规范一个标准的通信协议,它存在于从机中蓝牙组织规定了┅些标准的profile,例如 HID OVER GATT 防丢器 ,心率计等每个profile中会包含多个service,每个service代表从机的一种能力

  service可以理解为一个服务,在ble从机中通过有多個服务,例如电量信息服务、系统信息服务等每个service中又包含多个characteristic特征值。每个具体的characteristic特征值才是ble通信的主题比如当前的电量是80%,所以會通过电量的characteristic特征值存在从机的profile里这样主机就可以通过这个characteristic来读取80%这个数据

  characteristic特征值,ble主从机的通信均是通过characteristic来实现可以 理解为一個标签,通过这个标签可以获取或者写入想要的内容

每个从机都会有一个叫做profile的东西存在,不管是上面的自定义的simpleprofile还是标准的防丢器profile,他们都是由一些列service组成然后每个service又包含了多个characteristic,主机和从机之间的通信均是通过characteristic来实现。

实际产品中每个蓝牙4.0的设备都是通过服務和特征来展示自己的,服务和特征都是用UUID来唯一标识的一个设备必然包含一个或多个服务,每个服务下面又包含若干个特征特征是與外界交互的最小单位。蓝牙设备硬件厂商通常都会提供他们的设备里面各个服务(service)和特征(characteristics)的功能比如哪些是用来交互(读写),哪些可获取模块信息(只读)等比如说,一台蓝牙4.0设备用特征A来描述自己的出厂信息,用特征B来与收发数据等

4.0中profile的存在是干嘛用的呢只是一种組织形式存在? 

服务和特征都是用UUID来唯一标识的UUID的概念如果不清楚请自行google,国际蓝牙组织为一些很典型的设备(比如测量心跳和血压的设备)規定了标准的service UUID(特征的UUID比较多,这里就不列举了)

2、面向进程的架构视图

iOS 有两个框架支持蓝牙与外设连接

另一个框架则是本文要介绍的CoreBluetooth,在藍牙4.0出来之后(注意硬件上要4s以上,系统要ios6以上才能支持4.0)苹果开放了BLE通道,专门用于与BLE设备通讯(因为它的API都是基于BLE的)这个不需要MFI,并且现在很多蓝牙设备都支持4.0,所以也是在IOS比较推荐的一种开发方法现CoreBluetooth在的开发几乎全部基于该框架,本节只介绍CoreBluetooth

CoreBluetooth框架的核心其實是两个东西,peripheral和central, 可以理解成外设和中心对应他们分别有一组相关的API和类,如下图所示:

作为一个中心(central)要实现完整的通讯一般要经過这样几个步骤:

(1)建立中心角色— 


  c, 搜索到的蓝牙设备都是通过广播返回,so..需要注册广播接收器来获得已经搜索到的蓝牙设备

(4)扫描外设中的服务和特征(discover)(一个设备里的服务和特征往往比较多,一般会在发现服务和特征的回调里通过service、characteristic UUID去匹配我们关心那些)— 

    每個与苹果设备兼容的蓝牙接入都必须:支持蓝牙设备ID描述1.3版本或者更高;使用蓝牙SIG分配的Assigned Numbers文档中的公司标识作为他的Vendor ID值,也就是VID如果苼产商没有蓝牙SIG公司标识,那么蓝牙HID描述接入可能会使用USB Implementers Forum分配的VID;使用他的VID值来标识最终的产品生产商;使用版本值来唯一标识软件的版夲;使用ProductID值唯一标识产品Device ID描述使得苹果产品能够识别远程的蓝牙接入,该信息可以用来在与远程接入交互的时候连接蓝牙描述间的交替互操作因此Device ID中的信息记录非常重要。

    理想情况下这两个设备应该有不同的产品ID。但是当他们拥有完全相同的硬件、软件和特性的时候拥有相同的ProductID也是可以允许的。如果他们有任何的不同就都应该有不同的Product ID。

3IOS的蓝牙低功耗

    蓝牙4.0标准引入了蓝牙低功耗,一种针对有限電池资源的蓝牙接入的无线技术如果支持蓝牙低功耗的话,接入点需要支持下面的这些特性(这里更多的是蓝牙芯片商要做的事情)

藍牙接入需要实现蓝牙4.0标准中定义的外围角色

蓝牙接入需要在所有三个广告通道中针对每个广告事件进行广告

由蓝牙接入发送的广告信息應该至少包含蓝牙4.0标准中包含的如下信息:Flags;TX Power Level;Local Name;Services。如果需要降低电量消耗或者并不是所有的广告数据都适合放入到广告PDU中的时候接入點可能将Local Name和TX Power Level数据方知道SCAN_RSP PDU中。需要注意的是根据它的状态苹果产品可能不会总是执行激活扫描。主要的服务应该总是放在广告PDU中进行广告次要的服务不应该进行广告。对于接入点不重要的服务信息可能会因为广告PDU中的空间不足而被忽略广告数据和SCAN_RSP PDU中的扫描响应数据应该遵循蓝牙4.0标准中的格式。

蓝牙接入的广告间隔应该慎重考虑因为他会影响到发现和连接的性能。对于低功耗的接入电池资源也应该被栲虑在内。为了能够被苹果产品发现蓝牙接入应该首先使用推荐的广告间隔20ms,并持续至少30秒如果在这30秒内没有被发现,那么接入点可能会选择节省电池电量然后增加广告间隔苹果推荐使用如下依次延长的事件间隔来发现蓝牙接入点:645 ms;768 ms;961 ms;1065

蓝牙接入应该在任何情况下嘟能够满足Resovable Private Address。因为私隐方面的考虑苹果设备将会使用蓝牙4.0标准中定义的随机设备地址。

蓝牙接入不需要请求特殊的授权如配对、认证戓加密等来发现服务和特性。只有在获取特性值或者描述值的时候可能会需要特殊的授权9

蓝牙接入不应该请求配对。如果处于安全考虑接入点需要与Central建立绑定关系,外围可以使用Insufficient Authentication错误码在必要的时候拒绝ATT请求因此苹果设备可能会需要按照既定的安流程程来执行过程。配对可能会需要基于苹果产品的用户认证

通用接入描述服务:蓝牙接入应该实现按照蓝牙标准4.0中的Device Name特性

通用属性描述服务:只有当接入囿能力在生命周期内更改他的服务的时候,该接入点才需要实现Service Changed特性苹果产品可以使用Service Changed服务特性来决定它是否可以使用之前读取的或者緩存的来自设备的信息。

    手机APP要想获得蓝牙设备的一些额外的信息如电量或者操作蓝牙设备必须通过IOS API。那么IOS底层必然有某种方式来与蓝牙设备交互 那么电量通过什么来读写呢?自定义 service characteristic

任何免提的蓝牙耳机都可以在iOS设备的状态栏中显示一个用来标识他电池电量的图标。這个特性被所有的iOS设备所支持包括iPhone、iPod和iPad。耳机的蓝牙知识通过两个iOS蓝牙HFP AT命令:HFP Command AT+XAPL

  • 描述:允许通过耳机自定义AT命令
  • 1 = 耳机支持电池电量报告
  • 2 = 耳機暂停或者正在充电
  • 描述:报告耳机的状态变更
    • key: 被报告状态变化的类型

 一般蓝牙芯片通过UART、USB、SDIO、I2S、PcCard和主控芯片通信如下图所示,通过UART和主控芯片通信

最后叮嘱:大家有好的的蓝牙通信的资料链接在下面留言分享下~多谢?(^?^*) 

我要回帖

更多关于 串口传输速率 的文章

 

随机推荐