最近在做一个蓝牙智能锁的项目,需要在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相关推荐

  1. android ble蓝牙接收不到数据_Android BLE蓝牙扫描不到数据及解决方法

    在低功耗蓝牙(BLE)开发过程中碰到过不少坑,作为记录总结一下在开发过程中关于开启扫描遇到的问题. 开发低功耗蓝牙过程中因为Android系统的不断升级和优化,关于BLE的开发也会在升级过程中遇到不同 ...

  2. c语言从串口获取数据,如何通过串口来读写数据,请教达人

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 如何通过终端读取并显示串口连接的某硬件的数据 通过一程序来代替hexdump  从而进行输入输出 用C语言实现 下面一程序为i/o输入输出,请教达人,怎样 ...

  3. 单片机c语言存数据,单片机中C语言的数据存储与程序编写

    一.五大内存分区 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区. ...

  4. c语言打开关闭文件的顺序,C语言1-文件概述、文件的打开与关闭、顺序读写数据文件(1).docx...

    C语言程序设计教案 章节名称 文件概述.文件的打开与关闭.顺序读写数据文件(1) 授课类型 □理论 □实验 ?理实一体 □实训 □实习 班级 地点 周次 星期 节次 授课进度 ?符合 □超前 □滞后 ...

  5. 航司企业级大数据规划(方法论) - 企业级数据资产管理

    https://www.toutiao.com/i6654889698344829454 前言 数据成为资产,已经是行业共识,甚至有人建议将数据计入资产 负债表.但如果对比实物资产,对数据资产的管理, ...

  6. 专访 l 陆志鹏:破解数据要素化难题 加快推动数据基础制度落地

    本文约3400字,建议阅读8分钟 今天为大家分享中国电子信息产业集团有限公司党组成员.副总经理陆志鹏关于数据要素难题的一些见解. 以下内容为数据治理学术期刊<网络安全与数据治理>对中国电子 ...

  7. android ble蓝牙接收不到数据_Android蓝牙4.0 Ble读写数据详解 -2

    Android蓝牙4.0 Ble读写数据详解 -2 上一篇说了如何扫描与链接蓝牙 这篇文章讲讲与蓝牙的数据传输,与一些踩到的坑. 先介绍一款调试工具,专门调试Ble蓝牙的app.名字叫:nRF-Con ...

  8. 车载bc8android蓝牙,android蓝牙接收单片机数据并绘制波形

    [实例简介] android蓝牙接收单片机数据并绘制波形 [实例截图] [核心代码] BluetoothActivity └── BluetoothActivity ├── AndroidManife ...

  9. android 分包粘包_Android Socket 发送与接收数据问题处理: 发送后的数据接收到总是粘包...

    先说明一下粘包的概念: 发送时是两个单独的包.两次发送,但接收时两个包连在一起被一次接收到. 在以前 WinCE 下 Socket 编程,确实也要处理粘包的问题,没想到在 Android 下也遇到了. ...

最新文章

  1. python有趣代码-一个有意思的 Python 训练项目集
  2. python工程师一个月多少钱-苏州工业园区学编程大概多少钱一个月
  3. Linux wine
  4. 【体验】朗读机器人是如何炼成的!带你体验TTS语音合成模块,B719语音合成模块效果测试...
  5. 15_多子图-Subplot、Subplot: 使用多个figures和 axes、替代解决方案:
  6. java向飞秋发文件_Java 给飞秋发送消息
  7. 【渝粤教育】 国家开放大学2020年春季 2246社会工作概论 参考试题
  8. http缓存机制之304状态码
  9. lintcode 7. 二叉树的序列化和反序列化 Python代码
  10. primefaces教程_Primefaces面板,PanelGrid和PanelMenu示例教程
  11. c语言内存泄露检查工具,检测C++的内存泄漏用哪些工具(1)
  12. 程序员记录之人性弱点
  13. 2.4g和5g要不要合并_路由器2.4g和5g双频合一好还是分开好
  14. 【LOJ6038】【雅礼集训 2017 Day5】远行(LCT,树的直径)
  15. 【数据库系统】第一部分 数据库基础(4) 数据库安全性
  16. 1.MySQL数据库 2.SQL语句
  17. Lagrange 四平方定理
  18. 好用的十六进制编辑工具010 Editor
  19. ROS-3DSLAM(二)lvi-sam项目认识
  20. linux 下安装迅雷软件

热门文章

  1. 一年2000店,苏宁零售云的县镇市场进化简史 | 一点财经
  2. ISIS(中间系统到中间系统)及其配置
  3. 信息网络传播中的服务器标准,信息网络传播行为的界定标准研究
  4. PIC18F45K80单片机串口调试总结
  5. 亚马逊无人便利店正式开业,深度学习技术更进一步
  6. 你眼里的交易基本功是什么?
  7. LeetCode 每日一题 2021/9/27-2021/10/3
  8. 【答学员问】你们从培训机构毕业后都找到什么工作?
  9. 关于intellij idea的
  10. 人脸识别0-01:insightFace-模型复现-史上最全