蓝牙手机程序的编写方法
硬件状况记录:
根据调查,硬件提供的RC6621A设备是BLE设备。也就是蓝牙低功耗(Bluetooth Low Energy)设备。这种设备和传统蓝牙设备不同。使用Gatt协议(Generic Attribute Profile)协议。而不是类似于套接字的蓝牙协议。
传统蓝牙设备使用类似于套接字的蓝牙协议。实现效果类似于微信,就是两个设备连接以后,可以进行文字聊天。
而BLE设备使用Gatt协议,在连接以后,只能读写Characteristic数据。而不能像微信一样聊天。
因此上,大部分网上针对传统蓝牙的代码都是不可以直接拿来使用的,例如易加蓝牙助手。必须找到并使用BLE的例子代码。为此,在之前走了一些弯路。
每次使用以前需要首先输入一个超长字符串唤醒设备。
[2024-04-11 10:28:47.817]# SEND ASCII>
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[2024-04-11 10:28:47.982]# RECV ASCII>
WAKE UP
之后就可以进入数据模式。如果想使用AT指令设置设备,输入+++进入AT模式。输入AT+EXIT/r/n退出AT模式。
蓝牙BLE搜索功能调研:
调查中遇到的问题:
使用BLE的例子代码(后面简称代码B)发现搜索不到BLE设备。通过调查易加蓝牙助手的代码和其他可以搜索到蓝牙BLE设备的程序代码,发现代码B给出的蓝牙BLE搜索代码是有问题。也就是不能使用下面的安卓7.0及以上的方案代码查找设备。
//安卓7.0及以上的方案
bleScanner = bluetoothManager.getAdapter().getBluetoothLeScanner();
bleScanner.startScan(scanCallback);
而必须使用安卓7.0以下的方案:
BluetoothManager bluetoothManager =
(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
bluetoothManager.getAdapter().startLeScan(mLeScanCallback);
下面首先整理一下,手头的几个参考程序。
首先是易加蓝牙助手,这个的代码暂时无法编译执行。但是编译好的可执行程序是可以运行。效果如下。这个程序可以查找到设备。同时收发使用的是读写Characteristic数据。之所以无法收发的原因是未修改UUID。
之后是BLEDemo-master程序。效果如下。可以查找到设备。点击设备进入以后,可以进行通信。
可以看到,PC上使用RC6621A设备发送BBBBB,在手机上就会接受到多个42。这是因为B的ASCII码等于0x42。
这个BLEDemo-master程序需要修改代码中的UUID。因为每一个设备的UUID都是不一样的。例如RC6621A设备的默认UUID如下:
需要在代码中进行如下修改:
//TODO 以下uuid根据公司硬件改变
public static final String UUID_SERVICE = "6e400001-b5a3-f393-e0a9-e50e24dcca9e";
public static final String UUID_INDICATE = "0000000-0000-0000-8000-00805f9b0000";
public static final String UUID_NOTIFY = "6e400003-b5a3-f393-e0a9-e50e24dcca9e";
public static final String UUID_WRITE = "6e400002-b5a3-f393-e0a9-e50e24dcca9e";
public static final String UUID_READ = "3f3e3d3c-3b3a-3938-3736-353433323130";
只要修改UUUID_SERVICE,UUID_WRITE和UUID_NOTIFY即可。注意值为数字和小写字母。大写字母不生效。
版权声明:
作者:zhangchen
链接:https://www.techfm.club/p/121850.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论