uni-app 微信小程序端-AirKiss一键配网

文章介绍了如何在HBuilderX中使用uni-app配合AirKiss插件进行微信小程序的Wi-Fi设备一键配网,详细阐述了AirKiss技术的工作原理,并提供了在uni-app中配置和编写配网页面代码的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

uni-app 微信小程序端-AirKiss一键配网

发现网上很多关于微信小程序配网的文章都是微信小程序原生开发,uni-app少之又少。这篇文章就介绍一下怎么在HBuilder X使用airkiss配网插件。

一.AirKiss介绍

​ AirKiss是微信硬件平台为Wi-Fi设备提供的微信配网、局域网发现和局域网通讯的技术。开发者若要实现通过微信客户端对Wi-Fi设备配网、通过微信客户端在局域网发现Wi-Fi设备,或者把微信客户端内的音乐、图片、文件等消息通过局域网发送至Wi-Fi设备。

​ 设备进入 Wi-Fi 混杂模式(promiscuous mode)以监听捕获周围的 Wi-Fi 报文。由于设备暂未联网,且 Wi-Fi 网络的数据帧已通过加密,设备无法获取 payload 的内容,但可以获取报文的某些特征数据,例如每个报文的长度,同时对于某些数据帧;例如 UDP 的广播包或多播包,其报文的帧头结构比较固定,较容易识别。

​ 此时在手机 App 或者小程序侧,即可通过发送 UDP 的广播包或多播包,并利用报文的特征,例如长度变化进行编码。

​ 将目标 Wi-Fi 路由器的 SSID/PSW 字符以约定的编码方式发送出去,设备端在捕获到 UDP 报文后,按约定的方式进行解码,即可得到目标 Wi-Fi 路由器的相关信息并进行联网。

二.对项目进行配置

在微信开发者工具中需要使用到配网功能时🍊

新建项目之后,在app.js文件中添加下面代码

  "plugins": {
    "airkiss": {
      "version": "1.1.0",
      "provider": "wx610ea582556c983e"
    }
  }

​ 而在uni-app开发中,如果我们在微信开发者工具中进行了配置,那本次配置的内容会在HBuilder X重新编译之后消失。

​ 所以我们需要在HBuilder X中进行相关配置。

​ 在进入项目之后,打开项目的manifest.json文件,在小程序特有相关中添加下面代码

  "plugins": {
    "airkiss": {
      "version": "1.1.0",
      "provider": "wx610ea582556c983e"
    }
  }

在运行到微信开发者工具后,在控制台会提示你添加插件,然后按提示添加即可。

在这里插入图片描述

进行配网的代码就很简单,建议在小程序的条件编译中编写代码

三.配网页面代码常规流程

有关WIFI功能都需要用户打开GPS😆

注意:请自行处理是否为2.4G频段路由器

  1. 打开WIFI模块

    			// #ifdef MP-WEIXIN
    			wx.startWifi({
    				success(res) {
    					console.log(res)
    				},
    				fail(res) {
    					console.log(res)
    					uni.showToast({
    						title: '请打开WIFI',
    						icon: 'none',
    						duration: 1000
    					});
    
    				},
    			})
    			// #endif
    
  2. 进入页面,获取当前所连接的WIFI

    				// #ifdef MP-WEIXIN
    				var that = this
    				wx.getConnectedWifi({
    					success(res) {
    						console.log(res)
    						that.BSSID = res.wifi.BSSID
    						that.WIFIName = res.wifi.SSID
    					},
    					fail(res) {
    						console.log(res)
    						//报错的相关处理
    					},
    				})
    				// #endif
    
  3. 点击某个按钮获取WIFI列表

    				// #ifdef MP-WEIXIN
    				var that = this
    				wx.getWifiList({
    					success(res) {
    						console.log(res)
    						wx.onGetWifiList(function(res) {
    							console.log("获取wifi列表");
    							console.log(res.wifiList); //在这里提取列表数据
                                //通过遍历将WIFI名字存入集合,以便下卡框等组件使用
    							for (var i = 0; i < res.wifiList.length; i++) {
    								that.wifiList.push(res.wifiList[i].SSID)
    							}
    						})
    					},
    					fail(res) {
    						console.log(res)
    						//报错的相关处理
    					},
    				})
    				// #endif
    
  4. 开始配网,将WIFI名字和WIFI密码传输给硬件

    				// #ifdef MP-WEIXIN
    				const airkiss = requirePlugin('airkiss');
    				if (this.wifiList.length == 0) {
    					this.SSID = this.WIFIName
    				} else {
    					this.SSID = this.wifiList[this.value]
    				}
    				if (this.SSID != '' && this.password != '') {
    					console.log(airkiss)
    					uni.showLoading({
    						title: '配网中请稍后..'
    					});
    					airkiss.startAirkiss(this.SSID, this.password, function(res) {
    						console.log(res)
    						switch (res.code) {
    							case 0:
    								uni.hideLoading();
    								uni.showModal({
    									title: '初始化失败',
    									content: res.result,
    									showCancel: false,
    									confirmText: '收到',
    								})
    								break;
    							case 1:
    								uni.hideLoading();
    								uni.showModal({
    									title: '配网成功',
    									content: '设备IP:' + res.ip + '\r\n 设备Mac:' + res.bssid,
    									showCancel: false,
    									confirmText: '好的',
    								})
    								break;
    							case 2:
    								uni.hideLoading();
    								uni.showModal({
    									title: '配网失败',
    									content: '请检查密码是否正确',
    									showCancel: false,
    									confirmText: '收到',
    								})
    								break;
    
    							default:
    								uni.hideLoading();
    								break;
    						}
    
    					})
    				} else {
    					uni.showToast({
    						title: '请选择WIFI并输入密码',
    						icon: 'none',
    						duration: 1000
    					});
    				}
    				// #endif
    

    🍎大功告成

    偷偷地说:有问题都是硬件开发的问题,哈哈哈

UniApp 中实现萤石设备的置,主要涉及与硬件设备的通信、协议的支持以及用户界面的设计。萤石设备通常基于 Wi-Fi 或其他物联通信方式连接到络,因此需要通过特定的流程将设备接入用户的无线络环境。 ### 1. 方式选择 萤石设备常见的方式包括 **AP 模式** 和 **SmartConfig(一键配网)**,具体如下: - **AP 模式**:设备进入热点模式,允许手机连接该热点并发送 Wi-Fi 名称和密码给设备,从而完成- **SmartConfig**:通过 UDP 广播方式将 Wi-Fi 置信息发送至设备,设备接收到后自动连接指定络,无需手动切换热点[^1]。 ### 2. 实现步骤概述 #### (1) 用户输入 Wi-Fi 信息 在 UniApp 中设计一个表单页面,让用户输入当前家庭或办公络的 SSID 和密码,作为参数: ```html <template> <view class="container"> <input v-model="ssid" placeholder="请输入Wi-Fi名称" /> <input v-model="password" placeholder="请输入Wi-Fi密码" type="password" /> <button @click="startConfig">开始</button> </view> </template> ``` #### (2) 启动 SmartConfig 流程 使用 UniApp 的 `uni.startWifi()` 和 `uni.setWifiList()` 等 API 实现 SmartConfig 功能: ```javascript methods: { startConfig() { uni.startWifi({ success: () => { uni.setWifiList({ wifiList: [{ ssid: this.ssid, password: this.password }], success: () => { uni.connectWifi({ ssid: this.ssid, password: this.password, success: () => { console.log('Wi-Fi 连接成功'); // 触发 SmartConfig 发送置信息 this.sendSmartConfig(); } }); } }); }, fail: err => { console.error('启动Wi-Fi失败', err); } }); }, sendSmartConfig() { // 调用底层 SDK 或插件进行 SmartConfig 发送 // 示例伪代码 nativeSDK.sendSmartConfig(this.ssid, this.password); } } ``` #### (3) 使用 AP 模式进行(可选) 若设备不支持 SmartConfig,则需引导用户连接设备热点,然后通过 TCP/IP 协议发送 Wi-Fi 置信息: ```javascript uni.connectWifi({ ssid: '设备热点名称', password: '设备默认密码', success: () => { const socket = uni.connectSocket({ url: 'ws://192.168.4.1:8080', success: () => { console.log('连接设备热点成功'); } }); socket.onOpen(() => { socket.send({ data: JSON.stringify({ ssid: this.ssid, password: this.password }) }); }); } }); ``` ### 3. 与萤石云平台集成 萤石设备通常会接入萤石云平台进行视频流传输与设备管理。在完成后,可以通过调用萤石开放平台提供的 SDK 实现设备绑定与状态监控: - 初始化 SDK 并登录用户账号; - 扫描局域中已的设备; - 将设备添加到用户账户中; - 获取设备实时状态与视频流数据。 示例初始化代码(Android 环境): ```java Camera camera = CameraFactory.getCamera(deviceSerial); camera.setVideoLevel(1); // 设置清晰度 ``` ### 4. 插件与兼容性处理 UniApp 支持通过原生插件扩展功能,建议使用以下方式提升兼容性: - 使用 [uni.createBLEConnection](https://uniapp.dcloud.io/vue3-uni-createBLEConnection) 处理蓝牙场景; - 引入第三方插件如 `esptouch` 或 `airkiss` 实现通用型智能- 针对不同平台(微信小程序、H5、App)做适处理,确保各行为一致。 ###
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃橘子的季节呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值