上一篇 微信小程序连接蓝牙设备
本篇 将继续介绍 微信小程序获取连接的蓝牙设备的服务及特征值
一、获取连接的蓝牙设备的服务
1.data 里面定义两个参数:
servicesList:[], //蓝牙设备服务列表
serviceUUID:'', //连接的蓝牙设备选中的服务uuid
2.获取连蓝牙设备的服务列表
//获取连接蓝牙设备的所有服务
getBLEDeviceServices()
{
var that=this;
let deviceId = that.data.deviceId;
Bluetooth.getBLEDeviceServices(deviceId).then(
function(res){
that.seeConsole('获取连接设备所有服务成功');
//console.log(res);
if(res)
{
let servicesList = [];
res.services.forEach(item=>{
const idx = util.inArray(servicesList, 'uuid', item.uuid)
if (idx === -1) {
servicesList.push(item);
}
that.setData({ servicesList: servicesList });
})
}
},
function(err){
that.seeConsole('获取连接设备所有服务失败');
}
);
},
//获取连接蓝牙设备的所有服务 按钮事件
getBLEDeviceServicesClick()
{
var that=this;
let isCreateBLEConnection = that.data.isCreateBLEConnection;
if(isCreateBLEConnection)
{
Bluetooth.CheckSystemInfo().then(res=>{
if(res)
{
that.getBLEDeviceServices();
}
});
}
else
{
wx.showModal({
content: '请先连接设备',
showCancel:false,
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
}
}
});
}
}
3.选择蓝牙设备服务UUID
//选择服务uuid
selectSevice(e){
var uuid = e.detail.value;
//console.log(uuid);
this.setData({serviceUUID:uuid});
},
二、获取连接的蓝牙设备选择的服务的所有特征值
1.data 里面定义六个参数:
readCharacteristicList:[], //蓝牙设备服务特征值(read)列表
readCharacteristicUUID:'', //
writeCharacteristicList:[], //蓝牙设备服务特征值(write)列表
writeCharacteristicUUID:'', //
notifyCharacteristicList:[], //蓝牙设备服务特征值(notify)列表
notifyCharacteristicUUID:'', //连接的蓝牙设备选中的服务的选中的特征值uuid
2.获取所有特征值
//获取连接蓝牙设备的所有服务
getBLEDeviceCharacteristics()
{
var that=this;
let deviceId = that.data.deviceId;
let serviceUUID = that.data.serviceUUID;
Bluetooth.getBLEDeviceCharacteristics(deviceId, serviceUUID).then(
function(res){
that.seeConsole('获取连接设备选择的服务的所有特征值成功');
if(res)
{
let readCharacteristicList = [];
let writeCharacteristicList = [];
let notifyCharacteristicList = [];
for (let i = 0; i < res.characteristics.length; i++) {
let item = res.characteristics[i]
if (item.properties.read) {
readCharacteristicList.push(item);
}
if (item.properties.write) {
writeCharacteristicList.push(item);
}
if (item.properties.notify || item.properties.indicate) {
notifyCharacteristicList.push(item);
}
}
console.log(readCharacteristicList, writeCharacteristicList, notifyCharacteristicList)
that.setData({
readCharacteristicList:readCharacteristicList,
writeCharacteristicList:writeCharacteristicList,
notifyCharacteristicList:notifyCharacteristicList
});
}
},
function(err){
that.seeConsole('获取连接设备选择的服务的所有特征值失败');
}
);
},
//获取连接蓝牙设备的所有服务 按钮事件
getBLEDeviceCharacteristicsClick()
{
var that=this;
let serviceUUID = that.data.serviceUUID;
if(serviceUUID!='')
{
Bluetooth.CheckSystemInfo().then(res=>{
if(res)
{
that.getBLEDeviceCharacteristics();
}
});
}
else
{
wx.showModal({
content: '请先选择连接设备的服务UUID',
showCancel:false,
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
}
}
});
}
},
3.选择 read、write、notify 特征值uuid
//选择蓝牙设备 read 特征值 uuid
selectReadCharacteristics(e){
var readCharacteristicUUID = e.detail.value;
this.setData({readCharacteristicUUID:readCharacteristicUUID});
},
//选择蓝牙设备 write 特征值 uuid
selectWriteCharacteristics(e){
var writeCharacteristicUUID = e.detail.value;
this.setData({writeCharacteristicUUID:writeCharacteristicUUID});
},
//选择蓝牙设备 notify 特征值 uuid
selectNotifyCharacteristics(e){
var notifyCharacteristicUUID = e.detail.value;
this.setData({notifyCharacteristicUUID:notifyCharacteristicUUID});
},
三、页面代码及样式代码
<view class="event-bar" list-item>
<view class="view_left">
<button class="btn_bg" bindtap="getBLEDeviceServicesClick">获取连接设备所有服务</button>
</view>
</view>
<view class="scan-list" list-item wx:if="{{servicesList.length>0}}">
<view class="list_view list_view_no">
<view class='list-group'>
<view class='list-left'>
服务
</view>
<view class='list-right'>
<radio-group bindchange="selectSevice" class="radio_group">
<label class="radio-label" wx:for="{{servicesList}}">
<radio value="{{item.uuid}}" checked="{{serviceUUID==item.uuid?true:false}}"></radio>
<view class='radio-text'>{{item.uuid}}</view>
</label>
</radio-group>
</view>
</view>
</view>
</view>
<view class="event-bar" list-item>
<view class="view_left">
<button class="btn_bg" bindtap="getBLEDeviceCharacteristicsClick">获取连接设备选择的服务的所有特征值</button>
</view>
</view>
<view class="scan-list" list-item wx:if="{{readCharacteristicList.length>0}}">
<view class="list_view list_view_no">
<view class='list-group'>
<view class='list-left'>
read
</view>
<view class='list-right'>
<radio-group bindchange="selectReadCharacteristics" class="radio_group">
<label class="radio-label" wx:for="{{readCharacteristicList}}">
<radio value="{{item.uuid}}" checked="{{readCharacteristicUUID==item.uuid?true:false}}"></radio>
<view class='radio-text'>{{item.uuid}}</view>
</label>
</radio-group>
</view>
</view>
</view>
</view>
<view class="scan-list" list-item wx:if="{{writeCharacteristicList.length>0}}">
<view class="list_view list_view_no">
<view class='list-group'>
<view class='list-left'>
write
</view>
<view class='list-right'>
<radio-group bindchange="selectWriteCharacteristics" class="radio_group">
<label class="radio-label" wx:for="{{writeCharacteristicList}}">
<radio value="{{item.uuid}}" checked="{{writeCharacteristicList==item.uuid?true:false}}"></radio>
<view class='radio-text'>{{item.uuid}}</view>
</label>
</radio-group>
</view>
</view>
</view>
</view>
<view class="scan-list" list-item wx:if="{{notifyCharacteristicList.length>0}}">
<view class="list_view list_view_no">
<view class='list-group'>
<view class='list-left'>
notify
</view>
<view class='list-right'>
<radio-group bindchange="selectNotifyCharacteristics" class="radio_group">
<label class="radio-label" wx:for="{{notifyCharacteristicList}}">
<radio value="{{item.uuid}}" checked="{{notifyCharacteristicUUID==item.uuid?true:false}}"></radio>
<view class='radio-text'>{{item.uuid}}</view>
</label>
</radio-group>
</view>
</view>
</view>
</view>
.radio_group{
display: flex;
flex-direction: column;
}
.radio-label{
display: flex;
padding: 5px 0px;
}
.radio-text{
flex: 1;
font-size: 12px;
margin-top: 5px;
color: #7a7a7a;
}
下一篇 将继续介绍 微信小程序启用蓝牙设备特征值变化时的notify功能