Android、IOS等智能设备下的蓝牙通信稀疏平常,但PC端非嵌入式蓝牙开发却不常见
本文基于Java开发语言,在PC端与蓝牙BLE设备通信,可实现一对一,一对多模式下通信,并可以实现基于多蓝牙HUB下的长距离通信
软件安装
软件版本说明
PC下的蓝牙开发,主要依托BlueZ技术,由于ubuntu系统自带BlueZ,因此BlueZ相关软件无需自行安装,需安装下列软件
- 系统版本:ubuntu-17.04-desktop-amd64
- cmake版本:3.9.0
- zlibe版本:1.2.11
- libffi版本:3.0.13
- pcre版本:8.38
- glib版本:2.48.2
注意事项
- 安装pcre时,请添加配置参数:./configure –prefix=/usr –enable-utf8 –enable-unicode-properties
- 安装TinyB时,请添加配置参数:cmake -DBUILDJAVA=ON
编译安装
1 2 3 4 5 6
| wget http://www.cmake.org/files/v3.9/cmake-3.9.0.tar.gz tar -zxvf cmake-3.9.0.tar.gz cd cmake-2.8.10.2 ./bootstrap gmake gmake install
|
1 2 3 4 5 6
| wget http://zlib.net/zlib-1.2.11.tar.gz tar -xzf zlib-1.2.11.tar.gz cd zlib-1.2.11/ ./configure make make install
|
1 2 3 4 5 6
| wget ftp://sourceware.org/pub/libffi/libffi-3.0.13.tar.gz tar -xzf libffi-3.0.13.tar.gz cd libffi-3.0.13/ ./configure make make install
|
1 2 3 4 5 6
| wget https://ftp.pcre.org/pub/pcre/pcre-8.38.tar.gz tar -zxvf pcre-8.38.tar.gz cd pcre-8.38 ./configure make make install
|
1 2 3 4 5 6
| wget http://ftp.gnome.org/pub/gnome/sources/glib/2.48.2/glib-2.48.2.tar.xz tar -xJf glib-2.48.2.tar.xz cd glib-2.48.2 ./configur make make install
|
1 2 3 4 5 6 7
| git clone https://github.com/intel-iot-devkit/tinyb.git cd tinyb mkdir build cd build cmake -DBUILDJAVA=ON .. make make install
|
编译TinyB成功后,需要将编译生成的文件:libjavatinyb.so、libtinyb.so、tinyb.jar引入到Java项目中
软件配置及检测
- 确保蓝牙没有被阻止:rfkill unblock bluetooth
- 确保blueoothd守护进程已启动,ps -eF | grep bluetoothd,如果蓝牙守护进程没有启动:systemctl start bluetooth.service
- 确保使用-E标志运行bluetoothd,如果没有:vim /lib/systemd/system/bluetooth.service 在启动命令后添加-E参数
重启:systemctl daemon-reload
- 确保您的DBus策略允许用户访问BlueZ GATT界面
1 2 3 4
| vim /etc/dbus-1/system.d/bluetooth.conf 在<policy context="default">下添加 <allow send_interface="org.bluez.GattService1"/> <allow send_interface="org.bluez.GattCharacteristic1"/> <allow send_interface="org.bluez.GattDescriptor1"/>
|
(1) lsmod | grep bluetooth应该返回一个包含蓝牙的线路,如果没有,尝试modprobe bluetooth或insmod bluetooth
(2) /proc/config或者/proc/config.gz还是/boot/config应该包含CONFIG_BT=y或CONFIG_BT=m和CONFIG_BT_LE=y。如果CONFIG_BT=m启用,请确保使用modprobe bluetooth或加载您的模块insmod bluetooth
(3) rfkill list 应至少显示一行蓝牙
另外,在linux系统中,可以使用gatttool命令进行蓝牙检查
代码获取
实际上线项目:某妇幼保健院病患7*24h体温集中监控系统
Java PC BLE通信主要有如下三种方式
- 扫描设备->建立链接->扫描服务->扫描特征值->数据读写
- 定向链接设备->建立链接->定向获取服务->定向获取特征值->数据读写
- 定向链接设备(扫描设备)->建立链接->定向获取服务(扫描服务)->定向获取特征值(扫描特征值)->自动数据通知
详细Java代码请联系作者赵华安获取