蓝牙功能

HC-05的使用-详细

故事扮演 提交于 2020-01-10 21:39:02
蓝牙转串口模块HC-05模块使用记录 最近在弄一个需要无线传输数据的项目,虽然以前也接触过HC-05这个模块,但是始终只是知道简单的使用,借这个机会更加深入的学习一下这个模块。 初识HC-05 BLK-MD-HC-05蓝牙模块是专为智能无线数据传输而打造,采用英国CSR公司BlueCore4-Ext芯片,遵循V2.0+EDR蓝牙规范。 本模块支持 UART,USB,SPI,PCM,SPDIF 等接口,并支持SPP蓝牙串口协议,具有成本低、体积小、功耗低、收发灵敏性高等优点,只需配备少许的外围元件就能实现其强大功能。 该模块主要用于短距离的数据无线传输领域。可以方便的和 PC 机的蓝牙设备相连,也可以两个模块之间的数据互通。避免繁琐的线缆连接,能直接替代串口线。不细讲,分享出技术手册见链接。 软件部分 HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有 AT 命令,用户可向模块发送各种 AT 指令,为模块设定控制参数或发布控制命令。通过控制模块外部引脚(PIO11)输入电平,可以实现模块工作状态的动态转换。 HC

Android 蓝牙开发(1)

ぐ巨炮叔叔 提交于 2019-12-31 19:14:34
普通蓝牙设备官方文档 Android 平台包含蓝牙网络堆栈支持 ,凭借此支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径。使用 Bluetooth API Android 应用可以执行下面的操作: 扫描其他蓝牙设备 查询本地蓝牙适配器的配对蓝牙设备 建立 RFCOMM 通道 通过服务发现连接到其他设备 与其他设备进行双向数据传输 管理多个连接 传统蓝牙适用于电池使用强度较大的操作,例如 Android 设备之间的流传输和通信等。针对具有低功耗要求的蓝牙设备,Android 4.3(API 18)中引入了面向低功耗蓝牙的 API 支持。 基础知识 使用 Android Bluetooth API 来完成使用蓝牙进行通信的四项主要任务: 设置蓝牙 、 查找局部区域内的配对设备 或可用设备、 连接设备 ,以及在 设备之间传输数据 。 关于蓝牙的 API 在 android.bluetooth 包中,下面介绍一下和蓝牙相关的主要类 BluetoothAdapter 本地蓝牙适配器,是所有 蓝牙交互的入口点 ,表示蓝牙设备自身的一个蓝牙设备适配器, 整个系统只有一个蓝牙适配器 。通过它可以发现其他蓝牙设备,查询绑定(配对)设备的列表,使用已知的 Mac 地址实例化 BluetoothDevice 以及创建

Nordic的sdk和蓝牙协议栈的命名规则

眉间皱痕 提交于 2019-12-28 15:14:45
Softdevice命名规则一 Softdevice包括两种底层协议栈:BLE和ANT,BLE包括两种角色:central(又称master)和peripheral(又称slave),为此需要给这些不同类型的协议栈进行命名区分。协议栈命名格式为Sxyz,其中 x – 表示协议栈的类型,1表示BLE协议栈,2表示ANT协议栈,3表示同时支持BLE和ANT y – 表示BLE角色,1表示从设备,2表示主设备,3表示同时支持主设备和从设备 z – 表示芯片类型,0表示nRF51系列,2表示nRF52系列 比如S110,表示只支持从设备模式的nRF51 BLE协议栈 比如S130,表示既支持从设备模式又支持主设备模式的nRF51 BLE协议栈 比如S132,表示既支持从设备模式又支持主设备模式的nRF52 BLE协议栈 比如S212,表示nRF52 ANT协议栈 比如S332,表示nRF52既支持BLE协议栈又支持ANT协议栈,而且BLE协议栈既支持从设备模式又支持主设备模式 Softdevice命名规则二 大体上跟命名规则1相同,但是协议栈编号最后2位跟芯片型号一样,比如S140,代表这个协议栈专门用于nRF52840。由于52840 Flash空间很大,没有必要做各种细分的协议栈,S140协议栈是一个大而全的协议栈,包含蓝牙所有功能。 Softdevice版本编号,从1.0.0开始编号

国产超低功耗蓝牙5.0 PHY6202替换NRF51822

ⅰ亾dé卋堺 提交于 2019-12-27 02:24:48
现在在智能穿戴领域市场不断的追求低功耗、低成本的蓝牙芯片。蓝牙芯片目前除了Dialog公司研制蓝牙芯片是最求超低功耗的但是对于其它性能上还比较满足不了其它领域的功能,另外NORDIC、TI的蓝牙芯片虽然功耗和性能上都是不错的,但是价格实在是高,智能穿戴产品市场价格在不断的透明化促使许多厂商不得不尝试考虑换上咱们国产的蓝牙芯片来降低成本。想必大家都听说过什么汉天下、泰凌微等等这些国产蓝牙芯片吧?虽然价格低的确实NORDIC、TI、Dialog几条街,但是射频性能和MCU性能不是很稳定,应用产品领域也不是很广,内核处理能力一般。当然,一分钱一分货 超低价格摆在那 。那么现在我就为大家简单的介绍下 能替代NORDIC NRF51822 NEF51802 的PHY6202蓝牙芯片! PHY6202蓝牙芯片是一款具有强大性能,高灵活性的超低功耗芯片。同时支持低功耗蓝牙、蓝牙5.0、蓝牙MESH、ZigBee、谷歌Thread、Mist等多种通信协议,面向智能终端周边设备、智能语音、智能家居、智能制造、智能交通等应用。 PHY6202使用一颗32位 ARM® Cortex™-M0 芯片。内核M0相对于nRF51802和NRF51822处理性能要好,以及灵敏度比51822还要好!(这里跟大家科普下M0与M4内核的主要差异是处理性能) 程序上比起51802和51822 简单易用

BLE蓝牙的连接和配对过程

 ̄綄美尐妖づ 提交于 2019-12-25 09:27:59
一 连接 连接过程参考: https://blog.csdn.net/iini01/article/details/80147232 二 配对 区别于传统蓝牙的配对过程,BLE的配对过程发生在连接过程之后 配对是一个三阶段的过程。前两个阶段是必须的,第三阶段是可选的。 第一阶段:配对特征交换 第二阶段:短期秘钥(STK)生成 第三阶段: 传输特定秘钥分配 STK生成规则 Just work: 没有加密 TK=0x00 passkey entry: 密码输入如果 passkey 是 ‘019655’ TK的值就是0x00000000000000000000000000004CC7。 将输入的值作为一个6位数的十进制,转换成16字节的十六进制。 OOB: 带外的TK值是一个16字节的随机数,通过非BLE的方式传递给对端。 2.1 第一阶段 设备首先在配对特征交换阶段交换IO能力来决定在第二阶段使用下面哪种方法: JustWorks:只工作 PasskeyEntry:输入密码 OutOfBand(OOB):带外 LE Legacy Pairing - Just Works Just Works方式不能抵抗窃听者和中间人攻击,只有在配对过程时没有遭受攻击,后面加密的链路的数据传输才是可信的。安全级别很低。 LE Legacy Pairing - Passkey Entry

CC2541蓝牙学习——串口_1

一笑奈何 提交于 2019-12-24 13:04:10
CC2541有两个串行通信接口,分别是USART0和USART1,它们能够分别运行于异步UART模式或者同步SPI模式。两个USART具体同样的功能,可以设置在单独的I/O引脚。 1.UART模式 UART模式提供异步串行接口,在UART模式中,有2种接口选择方式:2线接口和4线接口。 2线接口,使用RXD、TXD。 4线接口,使用RXD、TXD、RTS和CTS。 I/O外设引脚映射如下图所示: 根据上面的外设I/O引脚映射可知 : UART0对应的外部设置IO引脚关系为:位置1:P0_2----RX P0_3----TX 位置2:P1_4----RX P1_5----TX UART1对应的外部设置IO引脚关系为:位置1:P0_5----RX P0_4----TX 位置2:P1_7----RX P1_6----TX UART模式的操作有以下特点。 8位或者9位负载数据 奇校验、偶校验或者无奇偶校验 配置起始位和停止位电平 配置LSB(最低有效位)或MSB(最高有效位)首先传输 独立接收中断 独立收发DMA触发 奇偶校验和帧检验出错状态 UART模式提供全双工传送,也就是说可以同时收发数据,传送一个UART字节包括1个起始位,8个数据位,1个作为可选的第9位数据或者奇偶校验位,再加上1个或者2个停止位。

Android源码分析(六)-----蓝牙Bluetooth源码目录分析

孤街醉人 提交于 2019-12-18 04:33:07
一 :Bluetooth 的设置应用 packages\apps\Settings\src\com\android\settings\bluetooth* 蓝牙设置应用及设置参数,蓝牙状态,蓝牙设备等。 BluetoothDevicePreference.java 顾名思义,蓝牙设备首选项,也就是蓝牙设备的配置信息,比如是否连接,是否配对,是否可见等等。该类继承了preference类,主要是提供获取蓝牙设备及通知蓝牙设备配置信息变化。 BluetoothDiscoverableEnabler.java 蓝牙搜索UI逻辑处理,包括搜索暂停,搜索恢复,及蓝牙开启关闭时的蓝牙搜索处理,以及搜索超时等处理。该类同时使用了broadcast与handle机制,用来处理搜索的状态变化。 BluetoothEnabler.java 蓝牙功能的开启/关闭功能处理。 BluetoothEventRedirector.java 蓝牙事件转发处理。通过使用broadcast机制,在onstart里面注册了蓝牙的事件权限。 BluetoothNamePreference.java 监听蓝牙名字的变化 BluetoothPairingDialog.java 是activity,配对时各种提示框及按键事件处理,如用户请求配对,密码输入,密码确认,同意等提示框。 BluetoothPairingRequest

蓝牙mesh

让人想犯罪 __ 提交于 2019-12-16 09:18:44
链接: 蓝牙Mesh技术应用,爱智屋科技产品介绍 从上面的连接视频中我学到的: 简单来说蓝牙mesh的功能: 1.家里的很多蓝牙设备间可以相互通讯 2.还可通过蓝牙mesh(类似于wifi)把这些蓝牙设备都连上网,远程控制这些设备 优点: 1.低功耗,省电 2.wifi多连几个网就不好了,但是蓝牙mesh不会,连几十个上百个都不会影响通讯质量 Q:蓝牙 Mesh相比于其他协议的优势 A:蓝牙 Mesh是在低功耗的基础之上开发出来的,它相对其他协议有五大优势。最大的优势就是蓝牙 Mesh无需网关就可以直接与智能终端通信,这能够充分利用了人机交互体验好的优势;第二是没有网关,成本低;三是安装非常便捷,用户体验上也尤为好;四是低功耗支持能力强;五是有强大的组网能力,双向可组250个节点,单向可组1000个节点,这在无线技术中能做到是非常不容易的! 链接: 天猫精灵蓝牙mesh方案说明 来源: CSDN 作者: 星星月亮0 链接: https://blog.csdn.net/baidu_40537062/article/details/103470398

android 蓝牙hfp client实现简介

大城市里の小女人 提交于 2019-12-16 08:52:50
首先确认配置文件是否开启hfp profile功能。根据设备的角色(hfp client / hfp server)来配置hfp profile. profile 配置文件路径: alps/packages/apps/Bluetooth/res/values/config.xml alps/device/${customer}/${ProjectName}/overlay/packages/apps/Bluetooth/res/values/config.xml e.g. 设备的角色定义为hfp client,需做如下配置: <bool name="profile_supported_hs_hfp">false</bool> <bool name="profile_supported_hfpclient">true</bool> 接下来看一下hfp client的实现,以accept call为例 //3步获取hfp client service 1)BluetoothAdapter mAdapter = BluetoothAdapter.getDefaultAdapter(); 2)mAdapter.getProfileProxy(getApplicationContext(),new MServerListener(), BluetoothProfile.HEADSET

MultipeerConnectivity 之蓝牙功能

南笙酒味 提交于 2019-12-15 17:34:34
步骤 手册一个广告,告诉别人,我的设备是可以被发现的的 扫描蓝牙设备,需要实现代理方法 实现一个MCSession对象存储当前,实现代理方法 实现MCSession对象,用来发送和接受数据 #import <MultipeerConnectivity/MultipeerConnectivity.h> 实现代理 MCBrowserViewControllerDelegate MCSessionDelegate @property (nonatomic, strong)MCSession *m_session; /** 发送广告 */ @property (nonatomic, strong) MCAdvertiserAssistant *assistant; /** 当前连接到的设备 */ @property (nonatomic, strong) MCPeerID *peerId; - (void)viewDidLoad { [super viewDidLoad]; // 初始化 会话 // 获取设备的名字 NSString *displayName = [UIDevice currentDevice].name; // 设备的id MCPeerID *perrID = [[MCPeerID alloc]initWithDisplayName:displayName]; self