android ble蓝牙接收不到数据_Android BLE蓝牙开发-读写数据 获取UUID
最近在做一个蓝牙智能锁的项目,需要在Android APP 上使用 Ble低功耗蓝牙 和单片机蓝牙设备进行通信,网上关于搜索 连接 读写数据的资料太多了,我在最后放了一个Demo,完整实现搜索 连接 读写数据,在文章结尾重点说一下UUID
首先:
1.BLE介绍
BLE是Bluetooth Low Energy的缩写,又叫蓝牙4.0,区别于蓝牙3.0和之前的技术。BLE前身是NOKIA开发的Wibree技术,主要用于实现移动智能终端与周边配件之间的持续连接,是功耗极低的短距离无线通信技术,并且有效传输距离被提升到了100米以上,同时只需要一颗纽扣电池就可以工作数年之久。BLE是在蓝牙技术的基础上发展起来的,既同于蓝牙,又区别于传统蓝牙。BLE设备分单模和双模两种,双模简称BR,商标为Bluetooth Smart Ready,单模简称BLE或者LE,商标为Bluetooth Smart。Android是在4.3后才支持BLE,这说明不是所有蓝牙手机都支持BLE,而且支持BLE的蓝牙手机一般是双模的。双模兼容传统蓝牙,可以和传统蓝牙通信,也可以和BLE通信,常用在手机上,android4.3和IOS4.0之后版本都支持BR,也就是双模设备。单模只能和BR和单模的设备通信,不能和传统蓝牙通信,由于功耗低,待机长,所以常用在手环的智能设备上。
2.连接流程
android的ble连接流程图
3.什么是GATT?
GATT全称Generic Attribute Profile,中文名叫通用属性协议,它定义了services和characteristic两种东西来完成低功耗蓝牙设备之间的数据传输。它是建立在通用数据协议Attribute Protocol (ATT),之上的,ATT把services和characteristic以及相关的数据保存在一张简单的查找表中,该表使用16-bit的id作为索引。
一旦两个设备建立了连接,GATT就开始发挥作用,同时意味着GAP协议管理的广播过程结束了。但是必须要知道的是,建立GATT连接必要经过GAP协议。
最重要的事情,GATT连接是独占的,也就意味着一个BLE周边设备同时只能与一个中心设备连接。一旦周边设备与中心设备连接成功,直至连接断开,它不再对外广播自己的存在,其他的设备就无法发现该周边设备的存在了。
周边设备和中心设备要完成双方的通信只能通过建立GATT连接的方式。
GATT图解
一个ble蓝牙设备有多个包括多个Profile
一个Profile中有多个服务Service(通过服务的uuid找到对应的Service)
一个Service中有多个特征Characteristic(通过特征的uuid找到对应的Characteristic)
一个Characteristic中包括一个value和多个Descriptor(通过Descriptor的uuid找到对应的Descriptor)
其次 要知道一些名词:
1、profile
profile可以理解为一种规范,一个标准的通信协议,它存在于从机中。蓝牙组织规定了一些标准的profile,例如 HID OVER GATT ,防丢器 ,心率计等。每个profile中会包含多个service,每个service代表从机的一种能力。
2、service
service可以理解为一个服务,在ble从机中,通过有多个服务,例如电量信息服务、系统信息服务等,每个service中又包含多个characteristic特征值。每个具体的characteristic特征值才是ble通信的主题。比如当前的电量是80%,所以会通过电量的characteristic特征值存在从机的profile里,这样主机就可以通过这个characteristic来读取80%这个数据
3、characteristic
characteristic特征值,ble主从机的通信均是通过characteristic来实现,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。
4、UUID
UUID,统一识别码,我们刚才提到的service和characteristic,都需要一个唯一的uuid来标识
UUID的格式:00001101-0000-1000-8000-00805F9B34FB
整理一下,每个从机都会有一个叫做profile的东西存在,不管是上面的自定义的simpleprofile,还是标准的防丢器profile,他们都是由一些列service组成,然后每个service又包含了多个characteristic,主机和从机之间的通信,均是通过characteristic来实现。
以上快速浏览一遍即可
在开发中我们需要获取设备的UUID字段,可以询问硬件工程师,也可以通过蓝牙测试工具查看service UUID 和characteristic UUID
(在Android studio编译运行即可 但需要将此项目编码格式从GBK转变为UTF-8以解决中文乱码问题)
在应用中搜索蓝牙找到:
service UUID
characteristic UUID
在此强调 UUID是需要我们填写在程序里的 主要用的是service UUID 和characteristic UUID
一般读,写和通知的UUID 就是 characteristic UUID
一般我们写入数据后 设备会给我们立刻返回一个通知,所以我们需要在通知中获取数据(在这里不是用的读取数据)!
工作原因不能贴项目的代码,下面这个项目实现了搜索 连接 读写数据的功能,导入到项目中作为lib 需要将正确的UUID填入即可
在这里 BLUETOOTH_NOTIFY_D 和 UUID_NOTIFY 、 UUID_WRITE 我统一填的是 搜索到的 characteristic UUID
另外注意,连接设备前,请先关闭扫描蓝牙,否则连接成功后,再次扫描会发生阻塞,扫描不到设备。
希望能够对你有所帮助。
android ble蓝牙接收不到数据_Android BLE蓝牙开发-读写数据 获取UUID相关推荐
- android ble蓝牙接收不到数据_Android BLE蓝牙扫描不到数据及解决方法
在低功耗蓝牙(BLE)开发过程中碰到过不少坑,作为记录总结一下在开发过程中关于开启扫描遇到的问题. 开发低功耗蓝牙过程中因为Android系统的不断升级和优化,关于BLE的开发也会在升级过程中遇到不同 ...
- c语言从串口获取数据,如何通过串口来读写数据,请教达人
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 如何通过终端读取并显示串口连接的某硬件的数据 通过一程序来代替hexdump 从而进行输入输出 用C语言实现 下面一程序为i/o输入输出,请教达人,怎样 ...
- 单片机c语言存数据,单片机中C语言的数据存储与程序编写
一.五大内存分区 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区. ...
- c语言打开关闭文件的顺序,C语言1-文件概述、文件的打开与关闭、顺序读写数据文件(1).docx...
C语言程序设计教案 章节名称 文件概述.文件的打开与关闭.顺序读写数据文件(1) 授课类型 □理论 □实验 ?理实一体 □实训 □实习 班级 地点 周次 星期 节次 授课进度 ?符合 □超前 □滞后 ...
- 航司企业级大数据规划(方法论) - 企业级数据资产管理
https://www.toutiao.com/i6654889698344829454 前言 数据成为资产,已经是行业共识,甚至有人建议将数据计入资产 负债表.但如果对比实物资产,对数据资产的管理, ...
- 专访 l 陆志鹏:破解数据要素化难题 加快推动数据基础制度落地
本文约3400字,建议阅读8分钟 今天为大家分享中国电子信息产业集团有限公司党组成员.副总经理陆志鹏关于数据要素难题的一些见解. 以下内容为数据治理学术期刊<网络安全与数据治理>对中国电子 ...
- android ble蓝牙接收不到数据_Android蓝牙4.0 Ble读写数据详解 -2
Android蓝牙4.0 Ble读写数据详解 -2 上一篇说了如何扫描与链接蓝牙 这篇文章讲讲与蓝牙的数据传输,与一些踩到的坑. 先介绍一款调试工具,专门调试Ble蓝牙的app.名字叫:nRF-Con ...
- 车载bc8android蓝牙,android蓝牙接收单片机数据并绘制波形
[实例简介] android蓝牙接收单片机数据并绘制波形 [实例截图] [核心代码] BluetoothActivity └── BluetoothActivity ├── AndroidManife ...
- android 分包粘包_Android Socket 发送与接收数据问题处理: 发送后的数据接收到总是粘包...
先说明一下粘包的概念: 发送时是两个单独的包.两次发送,但接收时两个包连在一起被一次接收到. 在以前 WinCE 下 Socket 编程,确实也要处理粘包的问题,没想到在 Android 下也遇到了. ...
最新文章
- python有趣代码-一个有意思的 Python 训练项目集
- python工程师一个月多少钱-苏州工业园区学编程大概多少钱一个月
- Linux wine
- 【体验】朗读机器人是如何炼成的!带你体验TTS语音合成模块,B719语音合成模块效果测试...
- 15_多子图-Subplot、Subplot: 使用多个figures和 axes、替代解决方案:
- java向飞秋发文件_Java 给飞秋发送消息
- 【渝粤教育】 国家开放大学2020年春季 2246社会工作概论 参考试题
- http缓存机制之304状态码
- lintcode 7. 二叉树的序列化和反序列化 Python代码
- primefaces教程_Primefaces面板,PanelGrid和PanelMenu示例教程
- c语言内存泄露检查工具,检测C++的内存泄漏用哪些工具(1)
- 程序员记录之人性弱点
- 2.4g和5g要不要合并_路由器2.4g和5g双频合一好还是分开好
- 【LOJ6038】【雅礼集训 2017 Day5】远行(LCT,树的直径)
- 【数据库系统】第一部分 数据库基础(4) 数据库安全性
- 1.MySQL数据库 2.SQL语句
- Lagrange 四平方定理
- 好用的十六进制编辑工具010 Editor
- ROS-3DSLAM(二)lvi-sam项目认识
- linux 下安装迅雷软件