使用微信开发者工具编写蓝牙与MCU 8个字数组通讯的程序要求有发送及接收功能分别编写出indexjs、indexwxml、appjs、appwxml等文件
index.js:
const app = getApp()
Page({
data: {
devices: [],
connected: false,
chs: []
},
openBluetoothAdapter() {
wx.openBluetoothAdapter({
success: (res) => {
this.startBluetoothDevicesDiscovery()
},
fail: (res) => {
console.error(res)
}
})
},
startBluetoothDevicesDiscovery() {
if (this._discoveryStarted) {
return
}
this._discoveryStarted = true
wx.startBluetoothDevicesDiscovery({
success: (res) => {
this.onBluetoothDeviceFound()
},
fail: (res) => {
console.error(res)
}
})
},
onBluetoothDeviceFound() {
wx.onBluetoothDeviceFound((res) => {
res.devices.forEach(device => {
if (!device.name && !device.localName) {
return
}
const foundDevices = this.data.devices
const idx = inArray(foundDevices, 'deviceId', device.deviceId)
const data = {}
if (idx === -1) {
data[`devices[${foundDevices.length}]`] = device
} else {
data[`devices[${idx}]`] = device
}
this.setData(data)
})
})
},
createBLEConnection(e) {
const ds = e.currentTarget.dataset
const deviceId = ds.deviceId
const name = ds.name
wx.createBLEConnection({
deviceId,
success: (res) => {
this.setData({
connected: true,
name,
deviceId,
})
this.getBLEDeviceServices(deviceId)
},
fail: (res) => {
console.error(res)
}
})
this.stopBluetoothDevicesDiscovery()
},
getBLEDeviceServices(deviceId) {
wx.getBLEDeviceServices({
deviceId,
success: (res) => {
this.getBLEDeviceCharacteristics(deviceId, res.services)
},
fail: (res) => {
console.error(res)
}
})
},
getBLEDeviceCharacteristics(deviceId, services) {
services.forEach(service => {
if (service.isPrimary) {
wx.getBLEDeviceCharacteristics({
deviceId,
serviceId: service.uuid,
success: (res) => {
res.characteristics.forEach(characteristic => {
if (characteristic.properties.write) {
this.setData({
canWrite: true
})
this._deviceId = deviceId
this._serviceId = service.uuid
this._characteristicId = characteristic.uuid
}
if (characteristic.properties.read) {
wx.readBLECharacteristicValue({
deviceId,
serviceId: service.uuid,
characteristicId: characteristic.uuid,
})
}
wx.notifyBLECharacteristicValueChange({
deviceId,
serviceId: service.uuid,
characteristicId: characteristic.uuid,
state: true,
})
})
},
fail: (res) => {
console.error(res)
}
})
}
})
},
closeBLEConnection() {
wx.closeBLEConnection({
deviceId: this.data.deviceId
})
this.setData({
connected: false,
chs: [],
canWrite: false
})
},
stopBluetoothDevicesDiscovery() {
wx.stopBluetoothDevicesDiscovery()
},
onUnload() {
this.stopBluetoothDevicesDiscovery()
},
sendCommand() {
const buffer = new ArrayBuffer(8)
const dataView = new DataView(buffer)
dataView.setInt8(0, 1)
dataView.setInt8(1, 2)
dataView.setInt8(2, 3)
dataView.setInt8(3, 4)
dataView.setInt8(4, 5)
dataView.setInt8(5, 6)
dataView.setInt8(6, 7)
dataView.setInt8(7, 8)
wx.writeBLECharacteristicValue({
deviceId: this._deviceId,
serviceId: this._serviceId,
characteristicId: this._characteristicId,
value: buffer,
success: (res) => {
console.log(res)
},
fail: (res) => {
console.error(res)
}
})
},
bindReceiveEvent() {
wx.onBLECharacteristicValueChange((res) => {
const value = new Uint8Array(res.value)
console.log(value)
})
}
})
function inArray(arr, key, val) {
for (let i = 0, len = arr.length; i < len; i++) {
if (arr[i][key] === val) {
return i
}
}
return -1
}
index.wxml:
<view class="container">
<view class="devices">
<view class="device" wx:for="{{devices}}" wx:key="deviceId">
<view class="device-info">
<text class="device-name">{{item.name || item.localName}}</text>
<text class="device-id">{{item.deviceId}}</text>
</view>
<button class="connect-btn" wx:if="{{!connected}}" bindtap="createBLEConnection" data-device-id="{{item.deviceId}}" data-name="{{item.name || item.localName}}">连接</button>
<button class="disconnect-btn" wx:if="{{connected}}" bindtap="closeBLEConnection">断开</button>
</view>
</view>
<view class="send">
<button class="send-btn" wx:if="{{canWrite}}" bindtap="sendCommand">发送数据</button>
</view>
</view>
app.js:
App({
onLaunch: function () {
wx.openBluetoothAdapter({
success: (res) => {
console.log(res)
},
fail: (res) => {
console.error(res)
}
})
}
})
app.json:
{
"pages": [
"pages/index/index"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle": "black"
}
}
app.wxss:
.container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
}
.device {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 10px;
margin-bottom: 10px;
border: 1px solid #ccc;
}
.device-info {
display: flex;
flex-direction: column;
}
.device-name {
font-size: 16px;
font-weight: bold;
}
.device-id {
font-size: 12px;
color: #999;
}
.connect-btn,
.disconnect-btn {
padding: 5px 10px;
background-color: #009688;
color: #fff;
border: none;
border-radius: 4px;
}
.send {
margin-top: 20px;
}
.send-btn {
padding: 5px 10px;
background-color: #009688;
color: #fff;
border: none;
border-radius: 4px;
}
``
原文地址: http://www.cveoy.top/t/topic/iPeb 著作权归作者所有。请勿转载和采集!