藍牙app開發(fā)編程(藍牙程序編寫)
今天給各位分享藍牙app開發(fā)編程的知識,其中也會對藍牙程序編寫進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧!
手機藍牙軟件開發(fā),要用到什么編程語言及開發(fā)環(huán)境,本人很想學習這方面的知識 ,有酬謝 !
據(jù)我所知的,你可以用C語言的。它很簡單很容易上手而且只要有ped等的語言編輯軟件在的話,你就是用手機也可以編程。你想學編程的話不妨從C語言開始試試吧。
微信小程序藍牙模塊開發(fā)
//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: [], //藍牙設備數(shù)組
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.length0){
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;
//監(jiān)聽掃描
wx.onBluetoothDeviceFound(function (res) {
// res電腦模擬器返回的為數(shù)組;手機返回的為藍牙設備對象
console.log('監(jiān)聽搜索新設備:', 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;
// 監(jiān)聽藍牙連接
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;
}
});
//監(jiān)聽通知
wx.onBLECharacteristicValueChange(function (res) {
// callback
console.log('value change', res)
const hex = bletool.buf2char(res.value)
console.log('返回的數(shù)據(jù):', 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();
}
},
//更新數(shù)據(jù) devices為數(shù)組類型
updateBleList: function (devices) {
console.log('設備數(shù)據(jù):',devices);
var newData = this.data.bleList
var that = this
var tempDevice = null;
for (var i = 0; i devices.length; i++) {
//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('數(shù)據(jù):');
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 = 0; i tempData.length; i++) {
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=cara=getDeviceInfoopen_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
}
});
},
})
如何使用Android藍牙開發(fā)
Android平臺支持藍牙網(wǎng)絡協(xié)議棧,實現(xiàn)藍牙設備之間數(shù)據(jù)的無線傳輸。本文檔描述了怎樣利用android平臺提供的藍牙API去實現(xiàn)藍壓設備之間的通信。藍牙具有point-to-point 和 multipoint兩種連接功能。
使用藍牙API,可以做到:
* 搜索藍牙設備
* 從本地的Bluetooth adapter中查詢已經(jīng)配對的設備
* 建立RFCOMM通道
* 通過service discovery連接到其它設備
* 在設備之間傳輸數(shù)據(jù)
* 管理多個連接
基礎知識
本文檔介紹了如何使用Android的藍牙API來完成的四個必要的主要任務,使用藍牙進行設備通信,主要包含四個部分:藍牙設置、搜索設備(配對的或可見的)、連接、傳輸數(shù)據(jù)。
所有的藍牙API在android.bluetooth包中。實現(xiàn)這些功能主要需要下面這幾個類和接口:
BluetoothAdapter
代表本地藍牙適配器(藍牙發(fā)射器),是所有藍牙交互的入口。通過它可以搜索其它藍牙設備,查詢已經(jīng)配對的設備列表,通過已知的MAC地址創(chuàng)建BluetoothDevice,創(chuàng)建BluetoothServerSocket監(jiān)聽來自其它設備的通信。
BluetoothDevice
代表了一個遠端的藍牙設備, 使用它請求遠端藍牙設備連接或者獲取 遠端藍牙設備的名稱、地址、種類和綁定狀態(tài)。 (其信息是封裝在 bluetoothsocket 中) 。
BluetoothSocket
代表了一個藍牙套接字的接口(類似于 tcp 中的套接字) ,他是應用程 序通過輸入、輸出流與其他藍牙設備通信的連接點。
BluetoothServerSocket
代表打開服務連接來監(jiān)聽可能到來的連接請求 (屬于 server 端) , 為了連接兩個藍牙設備必須有一個設備作為服務器打開一個服務套接字。 當遠端設備發(fā)起連 接連接請求的時候,并且已經(jīng)連接到了的時候,Blueboothserversocket 類將會返回一個 bluetoothsocket。
BluetoothClass
描述了一個設備的特性(profile)或該設備上的藍牙大致可以提供哪些服務(service),但不可信。比如,設備是一個電話、計算機或手持設備;設備可以提供audio/telephony服務等??梢杂盟鼇磉M行一些UI上的提示。
BluetoothProfile
BluetoothHeadset
提供手機使用藍牙耳機的支持。這既包括藍牙耳機和免提(V1.5)模式。
BluetoothA2dp
定義高品質的音頻,可以從一個設備傳輸?shù)搅硪粋€藍牙連接。 “A2DP的”代表高級音頻分配模式。
BluetoothHealth
代表了醫(yī)療設備配置代理控制的藍牙服務
BluetoothHealthCallback
一個抽象類,使用實現(xiàn)BluetoothHealth回調。你必須擴展這個類并實現(xiàn)回調方法接收更新應用程序的注冊狀態(tài)和藍牙通道狀態(tài)的變化。
求教如何制作一個安卓手機藍牙制作的app程序,用于和單片機上的藍牙模塊,實現(xiàn)數(shù)據(jù)的傳送
下位機,用串口和藍牙模塊連接,通信
上位機,安卓app開發(fā)用eclipse或者是android studio,藍牙有相關的函數(shù),,連接,斷開,接受,網(wǎng)上大部分代碼套著用就行了,,如果需要修改也修改的不多,,主ui界面的時候,不能有進程的占用和其他的一些的線程的操作,所以就得到子線程里面去執(zhí)行了,還是先學學基礎吧,之后再看這些的話,就容易的多了
關于藍牙app開發(fā)編程和藍牙程序編寫的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。