开发一款通过蓝牙连接控制水电表的微信小程序

增强软硬件交互

为了更好的解决师生生活中的实际问题,开发蓝牙小程序加强了和校区硬件的交互。

比如通过蓝牙连接控制水电表,减少实体卡片的使用。添加人脸活体检测功能,提高本人认证效率,减少师生等待时间。

蓝牙水电控展示

动图封面

蓝牙水电控展示

微信小程序实现蓝牙BLE:
步骤:
1、wx.openBluetoothAdapter//蓝牙初始化
2、 wx.onBluetoothDeviceFound //监听寻找到新设备的事件
3、 wx.startBluetoothDevicesDiscovery //开始搜寻附近的蓝牙外围设备
4、 wx.getBluetoothDevices//获取在蓝牙模块生效期间所有已发现的蓝牙设备。包括已经和本机处于连接状态的设备。
5、wx.stopBluetoothDevicesDiscovery//停止搜寻附近的蓝牙外围设备。搜索到需要设备时或者连接时候停止搜索
6、wx.createBLEConnection //连接设备
7、 wx.getBLEDeviceServices //获取所有服务列表
8、wx.getBLEDeviceCharacteristics//获取蓝牙设备某个服务中的所有特征值
9、wx.onBLEConnectionStateChange //监听设备连接状态(本人用小米2手环测试经常断)
10、 wx.notifyBLECharacteristicValueChange // 启用低功耗蓝牙设备特征值变化是的notify功能
11、 wx.onBLECharacteristicValueChange//开始监听特征值的变化
12、 wx.writeBLECharacteristicValue//写入特征值
13、wx.readBLECharacteristicValue//读取特征值

基本使用流程:

1、 初始化蓝牙模块

在使用蓝牙接口前,必须首先调用 wx.openBluetoothAdapter 初始化蓝牙适配器模块,其他接口必须在初始化后成功方可调用。

当蓝牙开关未开启或手机不支持蓝牙时,会返回错误 (errCode=10001)。此时小程序蓝牙模块已经初始化完成,可通过 wx.onBluetoothAdapterStateChange 监听手机蓝牙状态的改变,也可以调用蓝牙模块的所有API。开发者在开发中应该考虑兼容用户在使用小程序过程中打开/关闭蓝牙开关的情况,并给出必要的提示,提高可用性。

2、 扫描并发现蓝牙外围设备

蓝牙模块初始化成功后,一般需要通过 wx.startBluetoothDevicesDiscovery 扫描外围设备。当蓝牙外围设备被扫描到时,会回调 wx.onBluetoothDeviceFound 事件,返回扫描到的设备。扫描设备比较耗费系统资源,请在搜索到需要的设备后及时调用 wx.stopBluetoothDevicesDiscovery 停止搜索。

若之前已连接过某个设备,获取到了 deviceId,可跳过扫描步骤。
// 监听扫描到新设备事件
wx.onBluetoothDeviceFound((res) => {res.devices.forEach((device) => {// 这里可以做一些过滤console.log('Device Found', device)})// 找到要搜索的设备后,及时停止扫描wx.stopBluetoothDevicesDiscovery()
})// 初始化蓝牙模块
wx.openBluetoothAdapter({mode: 'central',success: (res) => {// 开始搜索附近的蓝牙外围设备wx.startBluetoothDevicesDiscovery({allowDuplicatesKey: false,})},fail: (res) => {if (res.errCode !== 10001) returnwx.onBluetoothAdapterStateChange((res) => {if (!res.available) return// 开始搜寻附近的蓝牙外围设备wx.startBluetoothDevicesDiscovery({allowDuplicatesKey: false,})})}
})

3、 连接设备

蓝牙低功耗设备间要进行通信,必须首先建立连接。

wx.createBLEConnection({deviceId, // 搜索到设备的 deviceIdsuccess: () => {// 连接成功,获取服务wx.getBLEDeviceServices({deviceId,})}
})

4、 获取蓝牙外围设备的服务

wx.getBLEDeviceServices({deviceId, // 搜索到设备的 deviceIdsuccess: (res) => {for (let i = 0; i < res.services.length; i++) {if (res.services[i].isPrimary) {// 可根据具体业务需要,选择一个主服务进行通信}}}
})

5、 读写服务的特征值

wx.getBLEDeviceCharacteristics({deviceId, // 搜索到设备的 deviceIdserviceId, // 上一步中找到的某个服务success: (res) => {for (let i = 0; i < res.characteristics.length; i++) {let item = res.characteristics[i]if (item.properties.write) { // 该特征值可写// 本示例是向蓝牙设备发送一个 0x00 的 16 进制数据// 实际使用时,应根据具体设备协议发送数据let buffer = new ArrayBuffer(1)let dataView = new DataView(buffer)dataView.setUint8(0, 0)wx.writeBLECharacteristicValue({deviceId,serviceId,characteristicId: item.uuid,value: buffer,})}if (item.properties.read) { // 该特征值可读wx.readBLECharacteristicValue({deviceId,serviceId,characteristicId: item.uuid,})}if (item.properties.notify || item.properties.indicate) {// 必须先启用 wx.notifyBLECharacteristicValueChange 才能监听到设备 onBLECharacteristicValueChange 事件wx.notifyBLECharacteristicValueChange({deviceId,serviceId,characteristicId: item.uuid,state: true,})}}}
})
// 操作之前先监听,保证第一时间获取数据
wx.onBLECharacteristicValueChange((result) => {// 使用完成后在合适的时机断开连接和关闭蓝牙适配器wx.closeBLEConnection({deviceId,})wx.closeBluetoothAdapter({})
})

6、 断开连接和关闭蓝牙适配器

使用完成后,应该在合适的时机断开连接,并关闭蓝牙适配器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/53982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HashMap常用方法及底层原理

目录 一、什么是HashMap二、HashMap的链表与红黑树1、数据结构2、链表转为红黑树3、红黑树退化为链表 三、存储&#xff08;put&#xff09;操作四、读取&#xff08;get&#xff09;操作五、扩容&#xff08;resize&#xff09;操作六、HashMap的线程安全与顺序1、线程安全2、…

【LeetCode每日一题】2024年9月第二周(上)

2024.9.9 中等 难度评分 1333 链接&#xff1a;2181. 合并零之间的节点 &#xff08;1&#xff09;题目描述&#xff1a; &#xff08;2&#xff09;示例 &#xff08;3&#xff09;分析 整体来说&#xff0c;描述还算清晰的题目&#xff0c;找到0节点所框定的区域&#xff0c…

Pandas读取某列、某行数据——loc、iloc区别

loc&#xff1a;通过行、列的名称或标签来索引 iloc&#xff1a;通过行、列的索引位置来寻找数据 首先&#xff0c;我们先创建一个DataFrame生成数据 import pandas as pddata {a:[1,2,3,4,5],b:[6,7,8,9,10],c:[11,12,13,14,15] } data pd.DataFrame(data) print(data) 运行…

工具、环境等其他小问题归纳

此篇文章内容会不定期更新&#xff0c;仅作为学习过程中的笔记记录 一、查询Windows 10环境下python版本与安装路径 若电脑成功安装了python环境&#xff0c;不小心忘了版本。 I、查询版本 1、cmd窗口快捷查询 Win R 输入cmd 进入窗口&#xff1b; 直接输入 python --version …

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2757 标注数量(xml文件个数)&#xff1a;2757 标注数量(txt文件个数)&#xff1a;2757 标注…

关于武汉芯景科技有限公司的IIC电平转换芯片XJ9517开发指南(兼容PCF9517)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.电平转换 2.芯片使能/失能 EN 引脚为高电平有效&#xff0c;内部上拉至 VCC&#xff08;B&#xff09;&#xff0c;允许用户选择中继器何时有效。这可用于在上电时隔离行为不良的从机&#xff0c;直到…

4052A/4052B/4052C/4052D/4052E/4052F/4052G /4052H信号/频谱分析仪

4052A/4052B/4052C/4052D/4052E/4052F/4052G /4052H信号/频谱分析仪 苏州新利通 Ceyear 4052具备出色的测试动态范围、相位噪声、幅度精度和测试速度&#xff0c;具备频谱分析、I/Q分析、实时频谱分析、瞬态分析、矢量信号分析、脉冲分析、音频分析等丰富的测试功能。 Ceyear…

OpenAI发布o1预览模型:推理能力更强可达理科博士生水准

近日OpenAI宣布推出了新一代 AI 模型系列 OpenAI o1&#xff0c;按照官方技术博客说法&#xff0c;o1 在推理能力上代表了人工智能最强的水平。 那究竟是怎么一回事呢&#xff1f; OpenAI CEO Sam Altman 表示&#xff1a;o1 系列的推出代表了 AI 能力的新起点&#xff0c;能…

240909-ChuanhuChatGPT集成Ollama的环境配置

A. 最终效果 B. 需求文件 requirements.txt (至少需要安装这个&#xff0c;具体参见官网)requirements_advanced.txt &#xff08;如果安装了Ollama&#xff0c;并且可以进行对话&#xff0c;可以不需要安装&#xff0c;具体参见官网&#xff09;requirements_succcess.txt&am…

gin配置swagger文档

一、基本准备工作 1、安装依赖包 go get -u github.com/swaggo/swag/cmd/swag go get -u github.com/swaggo/gin-swagger go get -u github.com/swaggo/files2、在根目录上配置swagger的路由文件 //2.初始化路由router : initialize.Routers()// 配置swaggerdocs.SwaggerInfo…

微服务杂谈

几个概念 还是第一次听说Spring Cloud Alibaba &#xff0c;真是孤陋寡闻了&#xff0c;以前只知道 SpringCloud 是为了搭建微服务的&#xff0c;spring boot 则是快速创建一个项目&#xff0c;也可以是一个微服务 。那么SpringCloud 和 Spring boot 有什么区别呢&#xff1f;S…

Unity for Android使用蓝牙低功耗Bluetooth LE

Unity2021.3.35f1 插件&#xff1a;Bluetooth LE for iOS and Android v2.3.unitypackage 1、将插件资源包导入unity中 2.修改插件中的AndroidManifest文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schem…

系统优化工具 | PC Cleaner v9.7.0.3 绿色版

PC Cleaner是一款功能强大的电脑清理和优化工具&#xff0c;旨在通过清理系统垃圾文件、解除恶意软件和优化系统性能来提高计算机的运行效率。该软件提供了多种功能&#xff0c;可以帮助用户维护和提升计算机的整体表现。 PC Cleaner 支持 Windows 7 及以上操作系统&#xff0…

Qt使用绿色pdf阅读器打开文件

1.下载SumatraPDF 2.设置 3.代码 void MainWindow::on_pushButton_clicked() {QProcess *process new QProcess();QString filePath "C:\\Users\\jude\\Desktop\\su\\11.pdf";QString sumatraPath "C:\\Users\\jude\\Desktop\\su\\SumatraPDF-3.5.2-64.exe&q…

电瓶车火灾频发背后的隐忧

近年来&#xff0c;电瓶车火灾事件频发&#xff0c;不仅严重威胁着人民群众的生命财产安全&#xff0c;也给社会带来了极大的安全隐患。从城市街道到居民小区&#xff0c;电瓶车火灾的阴影无处不在&#xff0c;如何有效防范与自救成为了全社会关注的焦点。 一、电瓶车火灾频发…

linux_L1_linux重启服务器

使用putty登录到linux服务器切换到管理员账号 sudo -s重启命令 reboot

钾盐矿开采与加工过程中的机电设备选型及管理指南

创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; 在钾盐矿的开采和加工过程中&#xff0c;需要使用多种机电设备以确保生产的顺利进行。这些设备主要用于矿石开采、破碎、运输、选矿以及矿物产品的深加工等过程。以下是钾盐矿常用的一些机…

Leetcode 字母异位词分组

这道题目的意思就是&#xff1a;把包含字母字符相同的单词分到同一组。 算法思路&#xff1a; 使用哈希表来解决。 首先将每个字符串进行排序&#xff0c;将排序之后的字符串作为 key&#xff0c;然后将用 key 所对应的异位词组 作为value。然后我们使用 std::pair 来遍历 键…

AI prompt(提示词)

# 好用的用于学习的AI提示词 ## 费曼学习法 请使用费曼学习法&#xff0c;用简单的语言解释&#xff08;量子力学&#xff09;是什么&#xff0c;并提供一个简单的例子来说明它如何应用 ## 帕累托法则&#xff08;80/20原则&#xff09; 将&#xff08;量子力学&#xff09;最…

基于SSM的大学生心理健康服务平台的设计与实现---附源码75713

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 相关技术介绍 2.1 SSM框架 2.2 Java语言 2.3 MySQL数据库 3系统分析 3.1 可行性分析 3.2 系统功能分析 3.3 系统用例分析 3.4系统流程分析 3.4.1 用户登录流程 3.4.2 数据删除流程 4 系…