uniapp蓝牙使用读写数据

1 篇文章 0 订阅
<template>
	<view class='u-form'>
		<u-no-network></u-no-network>
		<u-button :ripple="true" @click="openBluetoothAdapter">开启蓝牙并检索设备</u-button>
		<u-button :ripple="true" @click="stopBluetoothDevicesDiscovery">关闭检索蓝牙设备</u-button>

		<u-button :ripple="true" @click="dklj">断开当前连接</u-button>
		<u-button :ripple="true" @click="sd">关闭蓝牙模块断开所有已建立的连接</u-button>
		<view>
			<u-input v-model="fa" border="border" />
			<u-button :ripple="true" @click="writesss">发送数据</u-button>
		</view>
		<view>接收数据{{shou}}</view>
		<view>{{serviceId}}</view>
		<view v-for=" itemid in deviceIdlsit" style="background-color: #C0C0C0;margin: 10rpx;padding: 10rpx;">
			<u-row gutter="16">
				<u-col span="8">
					设备ID{{itemid.deviceId}}<br />
					设备名<span style="color: red;">{{itemid.name?itemid.name:itemid.localName}}</span></u-col>
				<u-col span="4">
					<u-button :ripple="true" @click="createBLEConnection(itemid.deviceId)">连接</u-button>
				</u-col>
			</u-row>

		</view>
	</view>

</template>

<script>
	export default {
		data() {
			return {
				fa: '',
				shou: '',
				serviceId: '', //蓝牙服务 uuid
				connectionid: '', //设备的 id
				characteristicid: '', //特征
				sheb: "",
				deviceIdlsit: []
			};
		},
		mounted() {
			uni.onBluetoothAdapterStateChange(function(res) {
				console.log('adapterState changed, now is', res)
			})
			uni.onBluetoothDeviceFound(devices => {
				var rssi = (devices.devices[0].RSSI + 100) / 10
				console.log(devices.devices[0])
				if (rssi > 0 && this.deviceIdlsit.indexOf(devices.devices[0].deviceId) == -1) {
					this.deviceIdlsit.push(devices.devices[0])
				}
			})
			this.onBLEConnectionStateChange()
			this.onBLECharacteristicValueChange()
		},
		methods: {
			onBLECharacteristicValueChange() {
				uni.onBLECharacteristicValueChange(function(res) {
					console.log(`监听低功耗蓝牙设备的特征值变化事件 ${res.characteristicId} has changed, now is ${res.value}`)
				})
			},

			onBLEConnectionStateChange() {
				uni.onBLEConnectionStateChange(res => {
					// 该方法回调中可以用于处理连接意外断开等异常情况
					console.log(`device ${res.deviceId} state has changed, connected: ${res.connected}`)
					if (res.connected == false) {
						// this.dklj();                                                                                                            
						// this.createBLEConnection()
					}
				})
			},
			dklj() {
				uni.closeBLEConnection({
					deviceId: this.connectionid,
					success(res) {
						console.log("关闭当前连接", res)
					}
				})
			},
			sd() {
				uni.closeBluetoothAdapter({
					success(res) {
						console.log(res)
					}
				})
			},
			writesss() {
				// 向蓝牙设备发送一个0x00的16进制数据
				const buffer = new ArrayBuffer(1)
				const dataView = new DataView(buffer)
				dataView.setUint8(0, 0)
				uni.writeBLECharacteristicValue({
					// 这里的 deviceId 需要在 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取
					deviceId: this.connectionid,
					// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取
					serviceId: this.serviceId,
					// 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取
					characteristicId: this.characteristicid,
					// 这里的value是ArrayBuffer类型
					value: buffer,
					success(res) {
						console.log('writeBLECharacteristicValue success', res.errMsg)
					}
				})
			},
			// 两字母:AB,AC,AD;BC,BD,CD
			// 三字母:ABC,ABD,ACD;BCD

			getBLEDeviceCharacteristics(did, sid) {
				uni.getBLEDeviceCharacteristics({
					// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
					deviceId: did,
					// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取
					serviceId: sid,
					success: res => {
						console.log('传入服务id:', sid)
						console.log('device getBLEDeviceCharacteristics:', res.characteristics)

						for (let i = 0; i < res.characteristics.length; i++) {
							if (res.characteristics[i].properties.read) {
								console.log('可读')
							}
							if (res.characteristics[i].properties.write) {
								this.connectionid = did
								this.serviceId = sid
								this.characteristicid = res.characteristics[i].uuid
							}
							if (res.characteristics[i].properties.notify || res.characteristics[i].properties.indicate) {
								uni.notifyBLECharacteristicValueChange({
									state: true, // 启用 notify 功能
									// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
									deviceId: did,
									// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取
									serviceId: sid,
									// 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取
									characteristicId: res.characteristics[i].uuid,
									success(res) {
										console.log('notifyBLECharacteristicValueChange success', res.errMsg)
									}
								})
							}
						}
					},
					fail: err => {
						console.log('获取特征失败')
					}
				})
			},

			getBLEDeviceServices(id) {
				uni.getBLEDeviceServices({
					// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
					deviceId: id,
					success: (res) => {
						// console.log("成功",res)
						console.log('device services:', res)
						//这里会获取到好多个services  uuid  我们只存储我们需要用到的就行,这个uuid一般硬件厂家会给我们提供
						this.serviceId = res
						for (let i = 0; i < res.services.length; i++) {
							if (res.services[i].isPrimary) {
								this.getBLEDeviceCharacteristics(id, res.services[i + 2].uuid)
								return
							}
						}
						// res.services.forEach((item) => {
						// 	if (item.uuid.indexOf("AE00") != -1) {
						// 		this.serviceId = item.uuid;
						// 		//进入特征
						// 		// this.getBLEDeviceCharacteristics()
						// 	}
						// })
					}
				})

			},
			createBLEConnection(id) {
				this.connectionid = id
				uni.createBLEConnection({
					deviceId: id,
					success: res => {
						console.log(id, this.connectionid)
						console.log("创建蓝牙连接", res)
						uni.stopBluetoothDevicesDiscovery({
							success(resds) {
								console.log("创建蓝牙连接关闭蓝牙搜素", resds)
							}
						})
						setTimeout(() => {
							this.getBLEDeviceServices(id)
						}, 1000)

					},
					fail: err => {
						console.log(err)
					}
				})
			},


			startBluetoothDeviceDiscovery() {
				uni.startBluetoothDevicesDiscovery({
					// services: ['FEE7'],
					// allowDuplicatesKey:true,
					success: resd => {
						console.log(resd)
					},
					fail: errd => {
						console.log(errd)
					}
				})
			},
			dddd() {

			},
			// 10000	not init	未初始化蓝牙适配器
			// 10001	not available	当前蓝牙适配器不可用
			// 10002	no device	没有找到指定设备
			// 10003	connection fail	连接失败
			// 10004	no service	没有找到指定服务
			// 10005	no characteristic	没有找到指定特征值
			// 10006	no connection	当前连接已断开
			// 10007	property not support	当前特征值不支持此操作
			// 10008	system error	其余所有系统上报的异常
			// 10009	system not support	Android 系统特有,系统版本低于 4.3 不支持 BLE
			stopBluetoothDevicesDiscovery() {
				uni.stopBluetoothDevicesDiscovery({
					success(resds) {
						console.log("关闭蓝牙搜素", resds)
					}
				})
			},
			openBluetoothAdapter() {
				this.deviceIdlsit.length = 0
				uni.openBluetoothAdapter({
					success: res => {
						setTimeout(() => {
							this.startBluetoothDeviceDiscovery()
						}, 1000)
					},
					fail: err => {
						if (err.code == 10001) {
							console.log('请检查蓝牙是否开启,是否支持蓝牙模式')
						}

					}
				})
			}
		}
	};
</script>
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
uniapp中,可以通过以下步骤来实现蓝牙传输数据: 1. 初始化蓝牙模块:使用uni.openBluetoothAdapter API来初始化蓝牙模块。这个API必须在其他蓝牙相关API之前调用,否则会返回错误。\[2\] 2. 搜索蓝牙设备:使用uni.startBluetoothDevicesDiscovery API来搜索附近的蓝牙设备。 3. 获取设备列表:使用uni.getBluetoothDevices API来获取搜索到的蓝牙设备列表。 4. 连接设备:使用uni.createBLEConnection API来连接指定的蓝牙设备。 5. 获取设备服务列表:使用uni.getBLEDeviceServices API来获取已连接设备的服务列表。 6. 获取蓝牙特征:使用uni.getBLEDeviceCharacteristics API来获取指定服务的特征列表。 7. 接收设备数据使用uni.onBLECharacteristicValueChange API来监听蓝牙设备发送的数据。 8. 向设备发送数据使用uni.writeBLECharacteristicValue API来向蓝牙设备发送数据。\[3\] 通过以上步骤,你可以在uniapp中实现蓝牙设备的连接、数据接收和数据发送功能。 #### 引用[.reference_title] - *1* [uniapp 调用蓝牙接收数据、发送指令后接收返回结果](https://blog.csdn.net/weixin_45581505/article/details/123565761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [『uni-app、小程序』蓝牙连接、读写数据全过程](https://blog.csdn.net/weixin_39415598/article/details/124553790)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值