注意:给51单片机烧写程序时不要先连接超声波模块。烧写完程序后再接线。
2、学习单片机与蓝牙模块通信,实质上是学习单片机串口通信编程,手机将数据发送给蓝牙,蓝牙通过串口发给单片机。
3、蓝牙模块程序编写步骤:先不接蓝牙模块,编写程序,用电脑串口工具测试,如果测试成功再接蓝牙模块。
用STC-ISP软件的串口助手设置蓝牙模块AT参数:
1、将开发板上的单片机取下来,然后蓝牙模块的RXD和开发板上USB转TTL电路的TXD(P3.0)相接,蓝牙模块TXD与开发板上USB转TTL电路的RXD(P3.1)相接,然后再接GND和3.3V。
2、接好线,蓝牙模块蓝灯和绿灯闪烁,则位AT模式。
3、将STC-ISP软件中串口助手发送接收改为文本模式,然后发送AT,接受区会收到OK,即进入成功。
开启蓝牙设备和设置可见时间:
private void search() {BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter()
if (!adapter.isEnabled()) {
adapter.enable()
}
Intent enable = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE)
enable.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 3600) //3600为蓝牙设备可见时间
startActivity(enable)
Intent searchIntent = new Intent(this, ComminuteActivity.class)
startActivity(searchIntent)
}
首先,需要获得一个BluetoothAdapter,可以通过getDefaultAdapter()获得系统默认的蓝牙适配器,当然我们也可以自己指定,但这个真心没有必要,至少我是不需要的。然后我们检查手机的蓝牙是否打开,如果没有,通过enable()方法打开。接着我们再设置手机蓝牙设备的可见,可见时间可以自定义。
http://www.cnblogs.com/wenjiang/p/3200138.html
//index.js//获取应用实例
const app = getApp()
const util = require('../../utils/util.js')
const bletool = require('../../utils/bletool.js')
Page({
data: {
// lists: [{ 'order_no': '1111', 'car_no': '321', 'car_type': '尚好捷', 'order_date': '2018-01-02 08:00', 'order_money': '16.00', 'order_time': '4' }],
car_no: '',
order_no: '',
lists: [],
bleList: [], //蓝牙设备数组
serviceId: '',//592B3370-3900-9A71-4535-35D4212D2837
serviceMac: '',//C9:9B:4C:E7:DE:10
service_psd: '',//855525B837253705595800000329
service_uuid: '',
deviceId:'',
characteristics:[] //特征值
},
onLoad: function (options) {
this.initBle()
},
onReady: function () {
// 页面渲染完成
},
onShow: function () {
if (app.globalData.car_no.length>0){
this.getDeviceInfo()
}
},
onHide: function () {
// 页面隐藏
},
onUnload: function () {
// 页面关闭
app.globalData.car_no=''
},
//蓝牙相关
//初始化蓝牙
initBle: function () {
var that = this
wx.onBluetoothAdapterStateChange(function (res) {
console.log('adapterState changed, now is', res)
app.globalData.ble_state = res.available
if (res.available) {
that.initBle()
} else {
util.showToast('手机蓝牙已关闭')
app.globalData.ble_isonnectting = false
}
})
//打开蓝牙适配器
wx.openBluetoothAdapter({
success: function (res) {
console.log('打开蓝牙适配器成功')
that.getBluetoothAdapterState()
app.globalData.ble_state = true
that.onBluetoothDeviceFound()
},
fail: function (res) {
// fail
console.log(res)
util.showToast('请打开手机蓝牙')
},
complete: function (res) {
// complete
}
})
},
onBluetoothDeviceFound:function(){
var that = this
//监听扫描
wx.onBluetoothDeviceFound(function (res) {
// res电脑模拟器返回的为数组;手机返回的为蓝牙设备对象
console.log('监听搜索新设备:', res)
that.updateBleList([res])
})
},
getBluetoothAdapterState: function () {
var that = this
wx.getBluetoothAdapterState({
success: function (res) {
var available = res.available
var discovering = res.discovering
if (!available) {
util.showToast('蓝牙不可用')
} else {
if (!discovering) {
// that.startBluetoothDevicesDiscovery()
}
}
}
})
},
startBluetoothDevicesDiscovery: function () {
var that = this
var services = []
services.push(this.data.serviceId)
wx.showLoading({
title: '设备搜索中'
})
setTimeout(function () {
wx.hideLoading()
if (app.globalData.deviceId.length==0){
util.showModal('设备搜索失败,请重试')
}
}, 10000)
if(bletool.isIOS()){
wx.startBluetoothDevicesDiscovery({
services: services,
allowDuplicatesKey: true,
success: function (res) {
console.log('ios搜索成功')
console.log(res)
},
fail: function (err) {
console.log(err)
}
})
}else{
wx.startBluetoothDevicesDiscovery({
// services: services,
allowDuplicatesKey: true,
success: function (res) {
console.log('Android搜索成功')
console.log(res)
},
fail: function (err) {
console.log(err)
wx.hideLoading()
that.startBluetoothDevicesDiscovery()
// that.getBluetoothAdapterState()
util.showToast('搜索失败')
}
})
}
},
startConnectDevices: function (ltype, array) {
var that = this
clearTimeout(that.getConnectedTimer)
that.getConnectedTimer = null
wx.stopBluetoothDevicesDiscovery({
success: function (res) {
// success
}
})
app.globalData.ble_isonnectting = true
console.log('连接前:'+that.deviceId)
wx.createBLEConnection({
deviceId: that.deviceId,
success: function (res) {
if (res.errCode == 0) {
console.log('连接成功:')
that.getService(that.deviceId)
}
},
fail: function (err) {
console.log('连接失败:', err)
wx.hideLoading()
util.showModal('设备连接失败,请重试')
// if (ltype == 'loop') {
// that.connectDeviceIndex += 1
// that.loopConnect(array)
// } else {
// that.startBluetoothDevicesDiscovery()
// that.getConnectedBluetoothDevices()
// }
app.globalData.ble_isonnectting = false
},
complete: function () {
}
})
},
getService: function (deviceId) {
var that = this
// 监听蓝牙连接
wx.onBLEConnectionStateChange(function (res) {
console.log(res)
app.globalData.ble_isonnectting = res.connected
if (!res.connected) {
util.showToast('连接断开')
}
})
// 获取蓝牙设备service值
wx.getBLEDeviceServices({
deviceId: deviceId,
success: function (res) {
console.log('获取蓝牙设备service值')
console.log(res)
that.getCharacter(deviceId, res.services)
}
})
},
getCharacter: function (deviceId, services) {
var that = this
services.forEach(function (value, index, array) {
if (value.isPrimary) {
that.setData({
service_uuid: value.uuid,
deviceId: deviceId
})
app.globalData.service_uuid= value.uuid
app.globalData.deviceId=deviceId
}
})
//监听通知
wx.onBLECharacteristicValueChange(function (res) {
// callback
console.log('value change', res)
const hex = bletool.buf2char(res.value)
console.log('返回的数据:', hex)
//配对密码
if (hex.indexOf('855800000106') != -1) {
wx.hideLoading()
var charact_write = that.data.characteristics[1]
bletool.writeDataToDevice(that.data.deviceId, that.data.service_uuid, charact_write, that.data.service_psd)
wx.showToast({
title: '设备已连接',
icon: 'success',
duration: 3000
})
setTimeout(function () {
bletool.writeDataToDevice(that.data.deviceId, that.data.service_uuid, charact_write, '235525B837253705590400000273')
}, 2000)
} else if (hex.indexOf('23040000') != -1) {
//启动成功
that.starRenting()
}
})
wx.getBLEDeviceCharacteristics({
deviceId: deviceId,
serviceId: that.getServiceUUID(),
success: function (res) {
wx.getBLEDeviceCharacteristics({
deviceId: deviceId,
serviceId: that.getServiceUUID(),
success: function (res) {
console.log('特征', res)
that.setData({
characteristics:res.characteristics
})
app.globalData.characteristics = res.characteristics
var charact_read = res.characteristics[0]
},
loopConnect: function (devicesId) {
var that = this
var listLen = devicesId.length
if (devicesId[this.connectDeviceIndex]) {
this.deviceId = devicesId[this.connectDeviceIndex]
this.startConnectDevices('loop', devicesId)
} else {
console.log('已配对的设备小程序蓝牙连接失败')
that.startBluetoothDevicesDiscovery()
that.getConnectedBluetoothDevices()
}
},
//更新数据 devices为数组类型
updateBleList: function (devices) {
console.log('设备数据:',devices)
var newData = this.data.bleList
var that = this
var tempDevice = null
for (var i = 0i <devices.lengthi++) {
//ios设备
if (devices[i].devices != null) {
if (devices[i].devices.length >0) {
tempDevice = devices[i].devices[0]
}
else {
continue
}
}
//安卓
else {
tempDevice = devices[i]
}
if (!this.isExist(tempDevice)) {
newData.push(tempDevice)
}
}
console.log('数据:')
console.log(newData)
this.setData({
bleList: newData
})
if (!app.globalData.ble_isonnectting) {
var that = this
this.data.bleList.forEach(function (value, index, array) {
//找到对应id的设备,ios判断服务id安卓判断mac地址
var deviceId = value['deviceId']
if(bletool.isIOS()){
let advertisServiceUUID = value['advertisServiceUUIDs'][0]
if (advertisServiceUUID == that.data.serviceId.toUpperCase()){
that.deviceId = deviceId
console.log(that.deviceId)
that.startConnectDevices()
}
}else{
if (deviceId == that.data.serviceMac) {
that.deviceId = deviceId
console.log(that.deviceId)
that.startConnectDevices()
}
}
})
}
},
//是否已存在 存在返回true 否则false
isExist: function (device) {
var tempData = this.data.bleList
for (var i = 0i <tempData.lengthi++) {
if (tempData[i].deviceId == device.deviceId) {
return true
}
}
return false
},
//服务uuid
getServiceUUID: function () {
return bletool.stringTransition(this.data.service_uuid)
},
getDeviceInfo: function () {
let car_no = app.globalData.car_no
var that = this
wx.request({
url: app.globalData.serverURL + '?c=car&a=getDeviceInfo&open_id=' + app.globalData.open_id + '&car_no=' + car_no,
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: { 'content-type': 'application/json' }, // 设置请求的 header
success: function (res) {
// success
var data = res.data
console.log(data)
if (data.result == 1) {
app.globalData.serviceId = data.data.service_id
app.globalData.serviceMac = data.data.service_mac,
app.globalData.service_psd = '85' + data.data.service_psd + '5800000329'
that.setData({
serviceId: data.data.service_id,
serviceMac: data.data.service_mac,
service_psd: '85' + data.data.service_psd+'5800000329',
})
app.startBluetoothDevicesDiscovery()
// that.onBLECharacteristicValueChange()
} else {
util.showModal(data.msg)
}
},
fail: function () {
},
complete: function () {
// complete
}
})
},
})
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)