ImprovWifi.Transport.Linux
1.1.0
dotnet add package ImprovWifi.Transport.Linux --version 1.1.0
NuGet\Install-Package ImprovWifi.Transport.Linux -Version 1.1.0
<PackageReference Include="ImprovWifi.Transport.Linux" Version="1.1.0" />
<PackageVersion Include="ImprovWifi.Transport.Linux" Version="1.1.0" />
<PackageReference Include="ImprovWifi.Transport.Linux" />
paket add ImprovWifi.Transport.Linux --version 1.1.0
#r "nuget: ImprovWifi.Transport.Linux, 1.1.0"
#:package ImprovWifi.Transport.Linux@1.1.0
#addin nuget:?package=ImprovWifi.Transport.Linux&version=1.1.0
#tool nuget:?package=ImprovWifi.Transport.Linux&version=1.1.0
Sang.ImprovWifi
Sang.ImprovWifi 是一个基于 .NET 的 Improv Wi-Fi 配网项目,包含:
- 纯协议层实现
WindowsBLE 外设宿主实现Linux / BlueZBLE 外设宿主实现- 对应的最小演示程序
当前仓库的目标是:
- 接收并解析
Improv的 Wi‑Fi 配网命令 - 提供授权状态、错误状态、能力值读取
- 在配网成功后生成并发送
URL类型的RPC Result - 将协议层与平台 BLE 实现分离,便于后续集成到真实设备或系统服务中
功能概览
已实现:
Improv协议解析与状态管理Wi-Fi配网命令接收Identify命令处理- 授权状态切换
CurrentState / ErrorState / Capabilities / RpcResult数据提供Windows平台真实 BLEGATT ServerLinux平台基于BlueZ的 BLEGATT ServerWindows/Linux最小控制台示例
当前演示程序默认只做:
- 接收
SSID/Password - 输出收到的配网信息
- 调用
CompleteProvisioning(url)返回跳转地址
也就是说,Demo 默认不直接替你执行系统层面的联网操作。如果需要在收到配网信息后真正连接系统 Wi‑Fi,请在 ProvisioningRequested 事件中接入你自己的联网逻辑。
项目结构
ImprovWifi.Protocol- 纯协议层
- 包含协议常量、编解码、状态机、事件、通用传输抽象
ImprovWifi.Transport.WindowsWindowsBLE 宿主实现- 使用系统
Bluetooth / GATTAPI
ImprovWifi.Transport.LinuxLinuxBLE 宿主实现- 使用
BlueZ+Linux.Bluetooth
ImprovWifi.Demo.WindowsWindows控制台演示程序
ImprovWifi.Demo.LinuxLinux控制台演示程序
命名空间结构
ImprovWifi.ProtocolImprovWifi.Protocol.EventsImprovWifi.Protocol.TransportImprovWifi.Transport.WindowsImprovWifi.Transport.Linux
Target Framework
ImprovWifi.Protocol.NET 8.NET Standard 2.1
ImprovWifi.Transport.Windows.NET 8 Windows
ImprovWifi.Transport.Linux.NET 8.NET 10
ImprovWifi.Demo.Windows.NET 8 Windows
ImprovWifi.Demo.Linux.NET 8.NET 10
Improv UUID
Improv 服务及特征 UUID 已定义在 ImprovWifi.Protocol/Protocol/ImprovProtocol.cs:
- Service:
00467768-6228-2272-4663-277478268000 - Current State:
00467768-6228-2272-4663-277478268001 - Error State:
00467768-6228-2272-4663-277478268002 - RPC Command:
00467768-6228-2272-4663-277478268003 - RPC Result:
00467768-6228-2272-4663-277478268004 - Capabilities:
00467768-6228-2272-4663-277478268005
主要 API
协议层核心类型:
ImprovServiceImprovPacketCodecImprovTransportServerImprovTransportOptions
ImprovService 主要方法:
Authorize(bool)ProcessRpcCommand(...)CompleteProvisioning(string url)FailProvisioning(...)GetCurrentStatePayload()GetErrorStatePayload()GetCapabilitiesPayload()
事件:
ProvisioningRequestedIdentifyRequestedRpcResultReadyCurrentStateChangedErrorStateChanged
构建
在仓库根目录执行:
dotnet build
Usage
可使用以下方式完成配网:
- 微信小程序:
Improv 蓝牙配网 - 官方网站:
improv-wifi.com
Improv Wi-Fi 官方将该协议定义为一个基于 Bluetooth LE 或 Serial 的开放标准,用于把设备连接到 Wi‑Fi,并在连接成功后返回一个可继续配置设备的 URL。
官方参考:
- 官网首页:
https://www.improv-wifi.com/ BLE文档入口:https://www.improv-wifi.com/ble/
配网微信小程序:
Windows 运行方式
运行演示程序:
dotnet run --project ImprovWifi.Demo.Windows/ImprovWifi.Demo.Windows.csproj
运行要求:
- 已启用蓝牙
- 蓝牙适配器支持
Peripheral Role - 允许应用注册本地
GATT Service
运行流程:
- 启动程序
- 输入一个
Redirect URL - 用支持
Improv的配网工具扫描设备 - 点击
Identify - Demo 自动执行授权
- 发送
Wi-Fi信息 - Demo 返回
RPC Result URL
Linux 运行方式
运行演示程序:
dotnet run --project ImprovWifi.Demo.Linux/ImprovWifi.Demo.Linux.csproj -f net8.0
运行要求:
- 系统已安装并启动
BlueZ bluetoothd正常运行- 可通过
bluetoothctl看到目标适配器,例如hci0 - 当前用户具备访问蓝牙相关服务的权限
当前 Linux 传输层采用原生 BlueZ D-Bus 实现,底层使用:
Tmds.DBus
运行流程与 Windows 版一致:
- 启动程序
- 输入一个
Redirect URL - 用支持
Improv的配网工具扫描设备 - 点击
Identify - Demo 自动执行授权
- 发送
Wi-Fi信息 - Demo 返回
RPC Result URL
WSL2 说明
如果你在 WSL2 中运行 Linux Demo,需要确认:
BlueZ已正确安装并启动- 蓝牙设备已正确透传到
WSL2 bluetoothctl可以看到适配器,例如hci0
如果 WSL2 只能看到 bluetoothd,但无法真正完成外围设备广播或 GATT Server 注册,请优先检查宿主机蓝牙透传能力和 WSL2 对蓝牙外设模式的支持情况。
Demo 默认行为
Windows 和 Linux 的 Demo 当前都采用最小实现:
- 收到
Identify后自动授权 - 收到配网信息后输出
SSID和Password - 若已配置
Redirect URL,则立即调用CompleteProvisioning(url) - 若未配置
Redirect URL,则调用FailProvisioning()
如果你要接入真实业务,建议改造以下位置:
ImprovWifi.Demo.Windows/Program.csImprovWifi.Demo.Linux/Program.cs
通常做法是:
- 在
ProvisioningRequested中处理真实联网逻辑 - 联网成功后调用
CompleteProvisioning(url) - 联网失败时调用
FailProvisioning(error)
适用场景
这个仓库适合以下场景:
- 自定义
IoT设备蓝牙配网 - 基于
Improv Wi-Fi的主机侧服务集成 Windows或Linux下的 BLE 配网实验项目- 将协议层挂接到你自己的
GATT宿主实现中
其他
<p align="center"> 更多文章和相关介绍,请关注我的微信公众号:桑榆肖物 <br/> <img src="https://open.weixin.qq.com/qr/code?username=gh_c874018d0317" width="200" height="200"/> </p>
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- ImprovWifi.Protocol (>= 1.0.0)
- Tmds.DBus (>= 0.21.2)
-
net8.0
- ImprovWifi.Protocol (>= 1.0.0)
- Tmds.DBus (>= 0.21.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.