前面我们演示了使用.Net nanoFramework为ESP32进行蓝牙配网的简单演示,这个功能在实际项目中是非常有用的。当然,使用中我们还需要考虑一些其他的问题,比如如何将这个功能集成到我们的项目中,本文将详细介绍如何在正式项目中使用Improv配网及小程序配网工具。
1. 引言
在前面的文章中我们介绍了如何使用 .Net nanoFramework 连接 wifi,通过 Improv 协议进行蓝牙配网。在实际的使用中我们要考虑安全性、用户体验、设备识别等问题。本文将详细介绍如何在正式项目中使用 Improv 配网及小程序配网工具,以帮助大家更好地使用 Improv 配网功能。
2. 正式使用
在正式的项目中,我们需要考虑很多问题,比如安全性、用户体验、设备识别等。下面我们将详细介绍如何在正式项目中使用 Improv 配网及小程序配网工具。这里我们也采用了之前文章介绍的《处理ESP32板载灯光反色问题及工作状态灯的使用》 文章中的工作状态灯的使用,以便更好的展示配网的过程。
2.1 便利性
在演示中,我们为了方便的演示蓝牙配网的过程,每次设备启动都会进入配网模式。但在实际项目中,我们需要考虑用户体验,用户不会每次都需要配网,所以我们需要在设备启动时判断是否需要配网,如果需要配网,再进入配网模式。
这里的实现也非常简单,我们在启用 Improv 服务之前,先判断设备是否需要配网,如果需要配网,再启用 Improv 服务。通过检查 wifi 的配置信息,我们就可以简单的判断设备是否需要配网。
如下是一个简单的示例代码,我们通过判断是否存在配置信息来决定代码的执行逻辑:
// 读取配置文件
var configuration = Wireless80211Configuration.GetAllWireless80211Configurations();
if (configuration.Length == 0)
{
Console.WriteLine("没有找到wifi配置文件");
// 进入配网模式
}
else
{
Console.WriteLine($"SSID: {configuration[0].Ssid}, Password: {configuration[0].Password}");
// 执行连接wifi的代码
}
关于这一部分,更多的相关知识可以看这一篇文章《使用.Net nanoFramework为ESP32连接Wi-Fi网络》。
2.2 配网的安全性
接下来,我们来谈谈配网的安全性。配网过程中,设备需要进行授权确认,这样可以防止未经授权的设备访问。在我们的项目中,我们通过点击设备用户交互按钮来实现设备的授权确认。这种方式既简单又便捷,能够有效防止未经授权的设备访问。
以下是一个简单的示例代码,我们通过判断按钮的状态来决定是否进行授权:
/// <summary>
/// 用户按键事件
/// </summary>
private static void Userbtn_ValueChanged(object sender, PinValueChangedEventArgs e)
{
// 配网结束或者未开始请求授权,则不处理
if (_imp is null || _imp.CurrentState != Improv.ImprovState.authorizationRequired)
{
return;
}
if (e.ChangeType == PinEventTypes.Rising)
{
Console.WriteLine("User button pressed");
_imp.Authorise(true);
// 验证成功,改变灯光状态
_led.DeviceStatus = RunStatus.AuthSuccess;
}
}
关于用户交互按钮的使用,更多的相关知识可以看这一篇文章《使用.Net nanoFramework获取ESP32板载按键的点击事件》。
2.3 配置重置功能
在实际项目中,我们还需要考虑到用户可能需要重置设备的网络配置的情况。为了方便用户重置设备的配置,我们在项目中添加了配置重置功能。这样,用户就可以方便地重置设备的配置,重新进行配网。这个功能的实现也非常简单,我们只需要在用户交互按钮按下时,实现按下时长的判断即可。
以下是一个简单的示例代码,我们通过判断按钮的状态来决定是否进行配置重置:
// 记录上一次按键按下时间
static DateTime lastClickTime = DateTime.UtcNow;
/// <summary>
/// 用户按键事件
/// </summary>
private static void Userbtn_ValueChanged(object sender, PinValueChangedEventArgs e)
{
// 记录按键按下时间
if (e.ChangeType == PinEventTypes.Falling)
{
lastClickTime = DateTime.UtcNow;
}
// 按键松开
if(e.ChangeType == PinEventTypes.Rising)
{
// 按键按下时间大于 5s,重置wifi配置
if ((DateTime.UtcNow - lastClickTime).TotalSeconds > 5)
{
// 重置wifi配置
Console.WriteLine("Reset wifi configuration");
var wificonfig = new Wireless80211Configuration(0);
wificonfig.Ssid = "";
wificonfig.Password = "";
wificonfig.SaveConfiguration();
_led.DeviceStatus = RunStatus.ClearConfig;
}
}
}
2.4 添加设备识别功能
在存在多个待配网设备时,特别是名称还一样的情况下,设备识别就显得尤为重要。在Improv
类中有一个OnIdentify
事件,我们可以通过响应这个识别事件来实现设备识别功能。这样,用户就可以方便地识别出自己需要配网的设备,大大提高了配网的效率和用户体验。
响应的方式可以是通过改变设备的状态灯颜色,或者通过针对有扬声器的设备,播放特定的声音等。这里我们通过改变设备的状态灯来实现设备识别功能。
以下是一个简单的示例代码,我们通过响应OnIdentify
事件来实现设备识别功能:
// 初始化蓝牙配网
_imp = new Improv();
// 被请求识别
_imp.OnIdentify += Imp_OnIdentify;
/// <summary>
/// 被请求识别
/// </summary>
private static void Imp_OnIdentify(object sender, EventArgs e)
{
Console.WriteLine("Identify requested");
if (_imp.CurrentState != Improv.ImprovState.authorizationRequired)
{
return;
}
_led.DeviceStatus = RunStatus.OnIdentify;
}
2.5 配网成功后返回设备IP地址
最后,在配网成功后,我们需要会返回设备的IP地址。这样,用户可以直接通过IP地址访问设备,或者进行网页端的更详细的使用配置。这不仅方便了用户的使用,也为设备的进一步配置提供了便利。
以下是一个简单的示例代码,我们通过配网成功后的事件来返回设备的IP信息:
// 配网成功
_imp.OnProvisioningComplete += Imp_OnProvisioningComplete;
/// <summary>
/// 配网完成
/// </summary>
private static void Imp_OnProvisioningComplete(object sender, EventArgs e)
{
_imp.RedirectUrl = "http://" + _imp.GetCurrentIPAddress() + "/start.htm";
}
3. 微信小程序配网工具
为了方便大家使用 Improv 的配网协议,除了可以通过浏览器使用官方的网页工具外,我开发了一个微信小程序的配网工具 “Improv 蓝牙配网”。这个小程序使用原生的微信小程序开发,开发起来也很快,主要是蓝牙的相关操作,整体项目一天就搞定了。虽然小程序的备案、审核和微信认证过程有些许繁琐,但总的来说,两三个工作日就可以全部完成,这个工具的开发还是相当顺利的。
这个小程序的使用非常简单,只需要打开小程序,点击“开始搜索”按钮,然后按照提示操作即可。
连接成功后会展示设备的IP地址,方便用户直接访问设备,或者进行网页端的更详细的使用配置。可以长按复制IP地址,然后在浏览器中打开,就可以直接访问设备了。
4. 结语
通过本文的介绍,我相信你已经对如何在正式项目中使用 Improv 配网及微信小程序配网工具有了一定的了解。配网是设备网络化的第一步,也是非常重要的一步。项目案例已经开源在 ESP32_S3_Samples
项目:https://github.com/sangyuxiaowu/ESP32_S3_Samples/tree/main/ProjectImprovWifi?wt.mc_id=DT-MVP-5005195 希望,通过这个项目,能够帮助你更好的实现在 .Net nanoFramework 项目进行网络接入,让配网过程变得更加简单、快速和安全。