单片机蓝牙模块与手机蓝牙通信(1)
2022.4.18
一 、Bluetooth结构
1、JAVA层
bluetooth的JAVA类 frameworks/base/core/java/android/bluetooth/
2、JNI层
frameworks/base/core/jni/android_bluetooth_开头的文件
bluez通过JNI到上层的接口
frameworks/base/core/jni/android_server_bluetoothservice.cpp
调用硬件适配层的接口system/bluetooth/bluedroid/bluetooth.c
3、bluez库
external/bluez/
bluez用户空间的库,开源的bluetooth代码,包括很多协议,生成libbluetooth.so。
4、硬件适配层
system/bluetooth/bluedroid/bluetooth.c 对硬件操作的接口
system/bluetooth/data/* 一些配置文件,复制到/etc/bluetooth/
还有其他一些测试代码和工具。
二、Bluetooth开发涉及的4种类
1、BluetoothAdapter,蓝牙适配器,可判断蓝牙设备是否可用等功能。
常用12种方法列举如下(字母顺序):
cancelDiscovery() , 取消搜索过程,在进行蓝牙设备搜索时,如果调用该方法会停止搜索。(搜索过程会持续12秒)
disable() 关闭蓝牙,也就是我们常说的禁用蓝牙。
enable() 打开蓝牙,这个方法打开蓝牙无弹出提示。若让系统提示:用户是否打开蓝牙设备:加两行代码:
Intent enabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enabler,reCode);//同startActivity(enabler);
(从FirstActivity跳转到SecondActivity,然后返回FirstActivity并且获取从SecondActivity传回来的参数。reCode一般等于3。在AndroidManifest.xml里面添加蓝牙权限)
getAddress() 获取本地蓝牙地址
getDefaultAdapter() 获取默认BluetoothAdapter
getName() 获取本地蓝牙名称
getRemoteDevice(String address) 根据蓝牙地址获取远程蓝牙设备
getState() 获取本地蓝牙适配器当前状态
isDiscovering() 判断当前是否正在查找设备,是则返回true
isEnabled() 判断蓝牙是否打开,是则返回true
listenUsingRfcommWithServiceRecord(String name,UUID uuid) 根据name,UUID创建并返回BluetoothServerSocket(创建BluetoothSocket服务器端的第一步)
startDiscovery() 开始搜索
2.BluetoothDevice 描述了一个蓝牙设备
常用 6种方法列举如下(字母顺序):
createRfcommSocketToServiceRecord(UUIDuuid)
根据UUID创建并返回一个BluetoothSocket(即创建BluetoothSocket)
getAddress(), getName(),使用同BluetoothAdapter
setPin , createBond, cancelPairingUserInput等隐藏方法(涉及蓝牙的自动配对,需通过java的反射调用)
3.BluetoothServerSocket 是Socket
这个类有三个方法
两个重载的
accept(), accept(inttimeout) 两者的区别后者指定了过时时间。执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行!
这两个方法都返回一个BluetoothSocket,最后的连接也是服务器端与客户端的两个BluetoothSocket的连接
close() 关闭
4.BluetoothSocket 跟BluetoothServerSocket相对。蓝牙通讯分为server服务器端和client客户端,它们之间使用BluetoothSocket 类的不同方法来获取数据。
一共5个方法
close() 关闭
connect() 连接
getInptuStream() 获取输入流
getOutputStream() 获取输出流
getRemoteDevice() 获取远程设备,通过设备的mac蓝牙地址(物理地址)来获取BluetoothDevice对象
单片机蓝牙模块与手机蓝牙通信(1)相关推荐
- arduino nano 简单实现蓝牙模块与手机进行通信
1.背景 目前很多通信方式都需要外附手柄,控制器,接收器,体积比较大,用起来不够方便.那么,对于距离要求不高的控制小项目,蓝牙通信一定是不二之选. 2.需要预备了解的内容 基础的编程思想和基础的C语言 ...
- 单片机蓝牙模块与手机蓝牙通信(6)小结
安卓版本不同,代码细节会不同,要耐心根据提示修改调试,必要看看官方文档和百度. 明明已经调试通过,版本不同就报错问题是学习者要克服的心理最大关.前面5篇是按照2022.3月下载版本,API17. 下面 ...
- 实现蓝牙模块与手机进行通讯
之前做过一个Zigbee通信的实验,需要用到蓝牙模块与手机蓝牙模块之间的通信用以接收RSSI,很长时间没有解决就收数据乱码的问题,最后无意间了解到手机蓝牙的baudrate为9600,乱码的问题也就迎 ...
- Android手机靠近蓝牙模块自动连接蓝牙模块,断后自动重连。也可以手机靠近手机自动连接。连接成功率百分之百,可后台运行
BluetoothChat手机与串口模块通信靠近自动连接2.0apk示例:链接: https://pan.baidu.com/s/1YoMNNBfLTAuXm2XukG5s9g 提取码: sm3h 全 ...
- 基于stm32通过HC_05(ZS-040)蓝牙模块用手机控制stm32开发板上led灯的亮灭
文章目录 前言 一.HC-05蓝牙是什么? 二.应用实例步骤 1.使用AT指令对蓝牙的初始化 2.打开手机蓝牙助手查看是否搜索到该蓝牙 3.用蓝牙模块代替TTL连接stm开发板 4.创建项目开始配置相 ...
- 利尔达e95蓝牙模块程序_Arduino使用HC05蓝牙模块与手机连接
通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...
- Arduino使用HC05蓝牙模块与手机连接
通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...
- arduino nano 蓝牙_Arduino使用HC05蓝牙模块与手机连接
通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...
- 10分钟完成蓝牙模块与手机之间的数据读写交互
经过多年的发展,蓝牙技术已经渗透到了我们生活中的各个领域,比如消费领域的可穿戴.工业领域的抄表.汽车领域的蓝牙网络控制等等,作为物联网技术的一大核心,其实上手起来非常快,下面我们一起来探讨一下如何使用 ...
- 智能物联网有哪些应用场景?_串口WiFi模块,蓝牙模块,WiFi+蓝牙组合模块
文章目录 前言 一.智能家居 二.智能交通 三.智慧农业 四.智能制造 五.智慧物流 六.智慧能源 七.智能医疗 八.智能安防 九.智慧建筑 十.智能零售 无线模块及应用方案 前言 物联网从萌芽到彷徨 ...
最新文章
- R语言计算杰卡德相似系数(Jaccard Similarity)实战:自定义函数计算Jaccard相似度、对字符串向量计算Jaccard相似度、将Jaccard相似度转化为Jaccard距离
- 使用openssl生成rsa公钥和私钥
- html 树形图可拖拽,HTML5拖拽API实现vue树形拖拽组件
- 【debug】python打包成exe,太大了该怎么解决?
- redis scan命令详解
- awk去除行首行尾空格
- Atitit doc mng 文档管理总结目录1. 主要几大内容 12. 存储管理 22.1. 一般来说 ,文档存储在IM网盘note邮箱blog wiki等地 22.2. 文档格式与体
- 绑定事件和解绑事件的方法
- jQuery对象和DOM对象的区别
- 汽车销售管理系统源码
- java开发学生管理系统
- PyTorch中的pack_padded_sequence和pad_packed_sequence
- CSDN页面上方广告条太烦人?js写个油猴脚本给它隐藏了~
- 30A的MOS现在价格都下探到1块了,为什么你还在用继电器?
- win10资源管理器窗口无法缩小
- Nature Genetics:华中农业大学严建兵团队合作揭示玉米和玉米的“父辈”如何适应环境进化...
- Ant批量打包工具的使用
- Keras中predict()方法和predict_classes()方法的区别
- 如何设置自定义任务栏图标_轻松自定义Windows 7任务栏图标
- return 不能跳出 forEach 循环
热门文章
- 服装企业三步走向PLM,致力提升价值的时尚品牌
- 第五代通信技术简单概述
- 按键精灵打怪学习-自动寻路回打怪点
- mac上文字识别(Tesseract-OCR for mac )
- 小马激活工具对比暴风激活工具
- 数字信号处理(matlab版)(第3版) pdf,数字信号处理-(第3版)-(MATLAB版)
- Eucalyptus使用注意事项
- 2.6 数值分析: 追赶法
- 基于关系推理的自监督学习无标记训练
- 【交换安全】DAI - Dynamic ARP Inspection 详解/arp欺骗/gratuitous arp