更新记录

1.0.0(2026-09-13)

  • 新增 HarmonyOS 支持:EspTouch V1 / V2(含 AES 加密)、SoftAP、getCurrentWifi
  • 兼容传统 uni-app(vue2 / vue3,Android / iOS / HarmonyOS)。
  • API 变更getCurrentWifi 改为通过回调返回 WifiInfo | null
  • EspTouch V2 默认超时改为 90 秒;显式传入 timeoutMs 时以传入值为准。
  • 修复 iOS 配网在部分网络环境下持续超时、终态不回调的问题。
  • 修复停止配网后旧回调仍可能触发的问题;修复日志开关不生效的问题。
  • 日志不再输出 WiFi 密码。
  • 示例页改为手动发起配网。

平台兼容性

uni-app(5.24)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

uni-app x(5.24)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - -

hans-esp-provision

为用乐鑫芯片(ESP32 / ESP32-C3 / ESP8266 等)做智能硬件、用 uni-app x 或传统 uni-app(vue2 / vue3)写配套 App 的开发者提供 WiFi 配网能力。

  • EspTouch V1(一键配网 / SmartConfig,UDP 包长编码,广播模式)
  • EspTouch V2(可选 AES 加密 + 自定义附加数据)
  • SoftAP 热点配网(检测设备热点连接 → TCP 下发凭据 → 回包确认)
  • 当前 WiFi 信息读取getCurrentWifi,供配网表单预填)

平台支持

平台 EspTouch V1 EspTouch V2 SoftAP getCurrentWifi
Android 5.0+
iOS 14+ ✔(需 entitlement + 定位权限)
HarmonyOS NEXT(API 13+,6.1 真机验证)
Web / 小程序 - - - -

框架支持:uni-app x 与传统 uni-app(vue2 / vue3)均可用 App 平台(Android/iOS/HarmonyOS)。

插件自带全部原生依赖,无需手工配置;鸿蒙端无三方原生依赖。iOS 广播模式 EspTouch 需要开通组播网络能力的 provisioning profile(见下方「安装与配置」),若证书不含组播权限,优先使用 SoftAP。

安装与配置

  1. HBuilderX 4.61+(HarmonyOS 目标建议 5.24+);插件导入后 Android 权限、iOS Info.plist/entitlements、鸿蒙 module.json5 权限会随云打包/自定义基座自动合并,无需手工拷贝(鸿蒙端权限均为系统授权,无弹窗)。
  2. 必须打自定义基座(含原生 jar/framework),标准调试基座无法运行本插件。
  3. iOS 侧需要:
    • 定位权限(读 SSID)——插件已声明用途描述;
    • 本地网络权限(iOS 14+ 弹窗);
    • Access WiFi Information entitlement(插件已声明 com.apple.developer.networking.wifi-info,需在证书/profile 中同步勾选);
    • 广播模式 EspTouch 需要含组播网络权限的 profile。
  4. Android 侧权限:INTERNET、ACCESS_NETWORK_STATE、ACCESS_WIFI_STATE、CHANGE_WIFI_STATE、CHANGE_WIFI_MULTICAST_STATE、ACCESS_FINE_LOCATION、NEARBY_WIFI_DEVICES(12+)。

快速上手(uni-app x)

import { startProvisioning, stopProvisioning, getCurrentWifi } from '@/uni_modules/hans-esp-provision'
import { EspProvisionEvent, EspProvisionOptions, ProvisionMode, WifiInfo } from '@/uni_modules/hans-esp-provision'

// 异步预填当前 WiFi(三端 API 一致)
getCurrentWifi((wifi: WifiInfo | null) => {
  if (wifi != null) console.log('当前 WiFi: ' + wifi!.ssid)
})

// options 显式声明类型,mode 字面量用 as 标注(uni-app x 编译器对内联对象字面量
// 和字面量联合的推导不稳,统一用声明式写法,三端编译一致)
const options: EspProvisionOptions = {
  mode: 'esptouch_v1' as ProvisionMode,
  ssid: 'MyRouter',
  password: 'pwd12345',
  timeoutMs: 60000
}

startProvisioning(options, (event: EspProvisionEvent) => {
  if (event.state == 'success') {
    console.log('设备 IP: ' + (event.result?.ip ?? ''))
  } else if (event.state == 'fail') {
    console.log('失败 ' + event.errCode + ': ' + (event.errMsg ?? ''))
  } else {
    console.log('进度: ' + event.state) // scanning | provisioning
  }
})

// 用户取消
stopProvisioning()

传统 uni-app(vue2 / vue3)用法一致:导入路径相同,页面 JS 里去掉类型标注与 as 断言即可(options 与回调事件是同结构的普通对象;页面用 ts 则可保留标注)。

EspTouch V2(AES 可选):

const options: EspProvisionOptions = {
  mode: 'esptouch_v2' as ProvisionMode,
  ssid: 'MyRouter',
  password: 'pwd12345',
  aesKey: '0123456789abcdef',
  reservedData: ''
}
startProvisioning(options, (event: EspProvisionEvent) => {
  // 同上
})

SoftAP:提示用户连接设备热点后调用;插件按 deviceApPrefix(默认 esp32,contains 忽略大小写)校验当前 SSID,并向 192.168.4.1:8266 下发凭据。

SoftAP 固件契约

设备热点网关 192.168.4.1 TCP 8266

  • App → 设备:一行 JSON {"ssid":"...","password":"..."}\n
  • 设备 → App:一行 JSON {"ok":true,"ip":"192.168.x.x"}\nip 可选;拒绝时 ok:false

API

函数 说明
startProvisioning(options, callback) 启动配网;同一时刻仅允许一个会话,重复调用立即 ERR_SESSION_BUSY
stopProvisioning() 停止当前会话(fail/9021011 终态回调)
getCurrentWifi(callback) 通过 callback 返回一次 WifiInfo \| null;异步读取当前 SSID/BSSID,不可读时回调 null(iOS 超过 5 秒返回 null)
setLogEnabled(enabled) 日志开关(原生日志进 HBuilderX 控制台;Android 亦可 adb logcat 过滤 hans-esp-provision

EspProvisionOptionsmode'esptouch_v1' | 'esptouch_v2' | 'softap' | 'ble')、ssidpasswordbssid?deviceApPrefix?deviceApPassword?timeoutMs?(V2 默认 90000,其它模式默认 60000)、taskCount?(默认 1)、aesKey?(16 字节 UTF-8,仅 v2)、reservedData?(≤64 字节,仅 v2)。

EspProvisionEventstate'scanning' | 'provisioning' | 'success' | 'fail')+ 终态附带 resultip/bssid/elapsedMs)或 errCode/errMsg

错误码

含义
9021001 模式/平台不支持(ble 预留)
9021002 参数非法(缺 SSID、BSSID 格式、aesKey 长度等)
9021003 定位/本地网络权限被拒
9021004 已有会话在运行
9021005 手机未连接 WiFi
9021006 当前 WiFi 为 5G 频段(v1 需 2.4G;Android/鸿蒙可检,iOS 不暴露频段)
9021007 WiFi 信息不可读
9021010 / 9021011 超时未发现设备 / 用户停止
9021020 / 9021021 未连设备热点 / 设备未确认凭据
9021099 未知错误

已知边界与排障

  • EspTouch V1/V2 只能配 2.4G 网络;WPA3-only 路由器大概率失败(v1 协议边界),建议路由器开 WPA2 兼容。
  • iOS 读不到 SSID:检查定位权限(设置里为"使用期间")、profile 是否含 Access WiFi Information、是否真机(模拟器无 WiFi 信息)。
  • V1/V2 超时:确认设备已进入配网模式、手机与设备在同一 2.4G 路由器、路由器未开 AP 隔离。
  • 鸿蒙端:App 切后台期间配网定时器被系统挂起,回前台恢复(表现为配网耗时变长);手机重启或刚安装后约 3 分钟内 UDP bind 可能失败(返回 9021099 并附原因,数分钟后自愈)。
  • 蓝牙(BLE)辅助配网为 v1.x 规划能力,当前调用返回 9021001。

异步读取与会话取消

getCurrentWifi(callback) 使用回调返回结果,兼容传统 uni-app iOS 真机异步桥接。iOS 侧读取不阻塞主线程;需要允许使用期间定位、开启精确位置,并在签名中包含 Access WiFi Information。

配网会等待 WiFi 查询再启动任务,iOS 的 timeoutMs 包括这段等待时间。WiFi 信息不可读返回 9021007;只有确认当前 SSID 不匹配设备热点时才返回 SoftAP 9021020。stopProvisioning() 会使待返回的查询和旧会话事件失效;终态回调内可以立即启动下一轮。一次调用的进度与终态通过同一个持续回调交付。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

定位(读 SSID/频段)、本地网络(iOS)、WiFi 状态/组播(Android)、网络与 WiFi 信息(HarmonyOS,system_grant 免弹窗),详见 readme

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。