电子说
步骤1:蓝牙通信
两个设备是一个涉及三个渐进状态的多步骤过程:
1。查询– 如果两个蓝牙设备彼此之间完全不了解,则其中一个必须运行查询以尝试发现另一个。一台设备发出查询请求,任何侦听此请求的设备都将以其地址以及可能的名称和其他信息作为响应。
2。分页(连接) –分页是在两个蓝牙设备之间建立连接的过程。在启动此连接之前,每个设备都需要知道另一个设备的地址(在查询过程中找到)。
3。连接– 设备完成寻呼过程后,将进入连接状态。连接后,设备可以处于主动参与状态,也可以进入低功耗睡眠模式。
活动模式 –这是常规连接模式,其中设备正在主动发送或接收数据。
嗅探模式 e –这是一种省电模式,设备不活跃。它会进入睡眠状态,并且仅按设定的时间间隔(例如每100毫秒)监听一次传输。
保持模式 –保持模式是一种临时的省电模式,在该模式下,设备将休眠一段定义的时间,然后在间隔时间过后返回活动模式。主机可以命令从机保持。
停车模式 –停车是最深的睡眠模式。主机可以命令从机“停放”,直到从机通知主机唤醒后,该从机将变为非活动状态。
绑定和配对:
当两个蓝牙设备彼此共享特殊的亲和力时,可以将它们绑定在一起。绑定的设备只要距离足够近,就会自动建立连接。例如,当我开车时,口袋里的电话会立即连接到汽车的蓝牙系统,因为它们共享一个纽带。不需要UI交互!
通过一次性的配对过程创建绑定。设备配对时,它们共享其地址,名称和配置文件,通常将它们存储在内存中。对方还共享一个公用密钥,这使他们将来在任何时候在一起时都能绑定。
配对通常需要一个身份验证过程,用户必须验证设备之间的连接。身份验证过程的流程各不相同,通常取决于一个设备或另一个设备的接口功能。有时配对是一个简单的“ Just Works”操作,只需单击一下按钮即可配对(这对于没有UI的设备(如耳机)很常见)。其他时间配对涉及匹配的6位数字代码。较旧的旧版(v2.0和更早版本)的配对过程涉及在每个设备上输入公共PIN码。 PIN码的长度和复杂度范围从四个数字(例如“ 0000”或“ 1234”)到一个16个字符的字母数字字符串。
主控,从属和Piconets:
蓝牙网络(通常称为微微网)使用主/从模型来控制设备何时何地可以发送数据。在此模型中,单个主设备最多可以连接七个不同的从设备。微微网中的任何从属设备只能连接到一个主机。
主机协调整个微网中的通信。它可以将数据发送到其任何从属,也可以从它们请求数据。从站仅允许与其主机进行发送和接收。他们无法与微微网中的其他奴隶交谈。
范围:
范围是特定于应用程序的,尽管最低范围是核心规范没有限制,制造商可以调整其实现以支持其启用的用例。
范围可能会根据实现中使用的无线电类别而有所不同:
3类无线电设备–射程可达1米或3英尺
2类无线电设备–最常见于移动设备中–射程可达10米或33英尺
主要在工业用例中使用的1类无线电设备的射程为100米或300英尺
步骤2:蓝牙通信续。..
设备使用情况
(几乎)单独的无线连接–需要外部应用程序来驱动服务
设备通信
客户端/服务器(主/从)conf iguration
设备本质上是相等的
应用程序确定身份
[[客户端应用程序] 《=》 [HC05]] 《==== =============》 [[BT设备] 《=》 [服务器应用程序]]
软件/接口堆栈
[蓝牙主机] -------------------•[蓝牙主机]
^ –主机控制器接口驱动程序
|| –物理总线驱动程序
v
[物理总线] ----------------------•[物理总线]
^ –物理总线固件
||
v
[蓝牙硬件] ---------- ---•[蓝牙硬件]
–主机控制器接口固件
–基带控制器
连接到设备
•主机控制器接口–允许与蓝牙硬件进行控制交互
•传输层–主机与蓝牙硬件之间的物理连接
1。主机控制器接口
•用于访问蓝牙硬件功能的统一接口
•包含用于硬件的命令集
•包含对可能事件的处理
•包含对错误代码的访问
2。传输选项
•标准描述了三种基本的传输格式– USB传输
•通用串行总线– RS232传输,UART传输
•通用异步接收器/发送器
•串行接口–可以设置为RS232设置
步骤3:蓝牙网络
蓝牙网络:
•由最多7个活动蓝牙组成的Piconet 设备
–主/从配置
–可以将其他从设备置于“停放”状态设备不活动但保持同步
–由主机控制的连接,同步,停放/活动
–以微微网连接的所有设备共享时序和频率
•由两个或多个Piconets组成的分散网
–每个微微网只能有一个主设备,但一个微微网中的主设备可以作为奴隶来参与不同的微微网中。
–从站被时分多路复用成一个以上的微微网
–未同步时间或频率的Piconets
建立连接
•蓝牙单元发送查询消息以查找其他蓝牙单元。
主/从Piconet
•一个单元成为主机,其他单元成为从机
•主/从关系建立时序
•一个从机可以成为另一个Piconet中的主机。这会将两个Piconets连接到一个散布网中。
蓝牙Pico/散布网
•一个微微网中的主机可以是另一个微网中的从机
•寻址将微微网中的活动设备数限制为7
•无限数量的停放设备与微微网保持同步,但未处于活动状态。
频谱
蓝牙技术使用标称速率为1600跳/秒的扩频跳变全双工信号,在2.4至2.485 GHZ的无执照工业,科学和医学(ISM)频段中运行。
步骤4:蓝牙层和协议栈
蓝牙标准具有许多协议,这些协议被组织到不同的层中。
蓝牙的层结构不遵循OS1模型,TCP/IP模型或任何其他已知模型
不同的层和蓝牙协议体系结构:(图1)
蓝牙框架格式:
蓝牙框架格式的各个字段为:
1。访问代码:这是包含同步位的72位字段。它标识母版。
2。标头::这是54位字段。它包含重复3次的18位模式。
标头字段包含以下子字段:
(i)地址:此3位字段最多可以定义七个从站(1至7)。如果地址为零,则用于从主节点到所有辅助节点的广播通信。
(ii)类型:此4位字段标识来自上层的数据类型。
(iii) F :此流位用于流控制。设置为1时,表示设备无法接收更多帧。 (iv) A :该位用于确认。
(v) S :该位包含用于检测重传的帧的序列号。当使用停止和等待协议时,一位就足够了。
(vi)校验和:这8位字段包含用于检测标头中错误的校验和。
3。数据:。此字段的长度可以为0到2744位。它包含来自上层的数据或控制信息。
步骤5:蓝牙基带控制器
基带控制器:
•基带:基带协议和低级链接例程
•链接管理器:用于设置和链接控制的链接层消息
•跳频时分双工频道
基于625毫秒时隙(1600跳/秒)的频道220 PLL稳定丢失的时隙的毫秒数
•蓝牙同时使用电路和分组交换通道,支持:
–最多3个同时64 kbps同步语音通道
–同步语音和异步数据通道
–异步数据通道:
-/-721/57.6 kbps非对称
-/-对称432.6 kbps
访问代码:
•信道访问代码(CAC):标识微微网,这代码与所有交易一起使用在微微网上交换的信息
•设备访问代码(DAC):用于发信号,例如寻呼和对寻呼的响应
•查询访问代码(IAC):
–所有蓝牙设备通用的通用查询访问代码(GIAC)
–专用查询一类蓝牙设备共有的访问代码(DIAC)
–查询过程“查找”范围内的BT设备
步骤6:Atmega32 MCU的编码
我们可以向android智能手机或PC发送数据或从其接收数据:---
Ex;
/*This function is used to initialize the USART at a given UBRR value */
void BlueInit(uint16_t ubrr_value)
{
//Set Baud rate UBRRL = ubrr_value;
UBRRH = (ubrr_value》》8);
/* We Set Frame Format as
》》 Asynchronous mode
》》 No Parity
》》 1 StopBit
》》 char size 8 */
UCSRC=(1《
//Enable The RX receiver and TX transmitter
UCSRB=(1《
}
2. /* function used to read data from USART line. It waits till any data is available */
char BlueRdChar()
{
while(!(UCSRA & (1《
UCSRA |= (1 《《 RXC);
//Return received data
return UDR;
}
3. /* function writes the character in ‘data’ into USART and then transmits it to PC via TX line */
void BlueWrChar(char data)
{
while(!(UCSRA & (1《
UDR=data;
}
/*###############main Function########################################*/
#include “lcd_io.h”
#include “util/delay.h”
/* Extern declarations, prototypes etc. 。.. */
void BlueInit();
char BlueRdChar();
void BlueWrChar(char);
void Waiting(int);
#define F_CPU 16000000UL
#define USART_BAUDRATE 11500UL //9600UL
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
int main()
{
char data;
int i;
/*First Initialize the USART with baud rate = 9600bps
for Baud rate = 9600bps
UBRR value = 103
*/
BlueInit(103); //UBRR = 103
//Initialize LCD module
lcd_init();
lcd_clrscr();
lcd_gotoxy(0,0);
lcd_puts(“BLUETOOTH MODULE:”);
Waiting(5);
lcd_clrscr();
//Loop forever
while(1)
{
lcd_clrscr();
lcd_puts(“Receiving Data.。”);
for (i=0;i《=15;i++)
{
data=BlueRdChar();
BlueWrChar(data);
lcd_gotoxy(i,1);
lcd_puti(data,0);
}
Waiting(2);
}
return 0;
}
第7步:Android蓝牙传输代码
蓝牙是一种发送或发送电子邮件的方式在两个不同的设备之间接收数据。 Android平台包括对蓝牙框架的支持,该蓝牙框架允许设备与其他蓝牙设备无线交换数据。
Android提供了蓝牙API来执行以下不同操作:-
扫描用于其他蓝牙设备
获取已配对设备的列表
通过服务发现连接到其他设备
Android提供了BluetoothAdapter类来与蓝牙通信。通过调用静态方法getDefaultAdapter()
private BluetoothAdapter BA;
BA = BluetoothAdapter.getDefaultAdapter();
创建此调用的对象。为了启用设备的蓝牙,请使用以下蓝牙常量ACTION_REQUEST_ENABLE调用该意图。
Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(turnOn, 0);
提供了支持其他任务的API的其他常量:-
ACTION_REQUEST_DISCOVERABLE
This constant is used for turn on discovering of bluetooth.
ACTION_STATE_CHANGED
This constant will notify that Bluetooth state has been changed.
ACTION_FOUND
This constant is used for receiving information about each device that is discovered.
启用蓝牙后,您可以通过调用getBondedDevices()获得配对设备的列表。 ) 方法。它会返回一组蓝牙设备。..
private SetpairedDevices;
pairedDevices = BA.getBondedDevices();
蓝牙:
Android平台支持蓝牙连接,该蓝牙连接允许与其他蓝牙设备。该应用程序框架通过连接到其他蓝牙设备的Android蓝牙API提供对蓝牙功能的访问。
蓝牙API 类 Android蓝牙程序包:-
BluetoothAdapter:-- Represents the local Bluetooth adapter (Bluetooth radio)。
BluetoothDevice:-- Represents a remote Bluetooth device, query information such as its name, address, class, and bonding state.
BluetoothSocket:-- Represents the interface for a Bluetooth socket (similar to a TCP Socket)。
BluetoothServerSocket:-- Represents an open server socket that listens for incoming requests (similar to a TCP ServerSocket)。
BluetoothClass:--Describes the general characteristics and capabilities of a Bluetooth device.
责任编辑:wv
全部0条评论
快来发表一下你的评论吧 !