当前位置: 欣欣网 > 码农

在正式项目中使用Improv配网及小程序配网工具

2024-02-29码农

前面我们演示了使用.Net nanoFramework为ESP32进行蓝牙配网的简单演示,这个功能在实际项目中是非常有用的。当然,使用中我们还需要考虑一些其他的问题,比如如何将这个功能集成到我们的项目中,本文将详细介绍如何在正式项目中使用Improv配网及小程序配网工具。

1. 引言

在前面的文章中我们介绍了如何使用 .Net nanoFramework 连接 wifi,通过 Improv 协议进行蓝牙配网。在实际的使用中我们要考虑安全性、用户体验、设备识别等问题。本文将详细介绍如何在正式项目中使用 Improv 配网及小程序配网工具,以帮助大家更好地使用 Improv 配网功能。

2. 正式使用

在正式的项目中,我们需要考虑很多问题,比如安全性、用户体验、设备识别等。下面我们将详细介绍如何在正式项目中使用 Improv 配网及小程序配网工具。这里我们也采用了之前文章介绍的 文章中的工作状态灯的使用,以便更好的展示配网的过程。

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的代码}

关于这一部分,更多的相关知识可以看这一篇文章 。

2.2 配网的安全性

接下来,我们来谈谈配网的安全性。配网过程中,设备需要进行授权确认,这样可以防止未经授权的设备访问。在我们的项目中,我们通过点击设备用户交互按钮来实现设备的授权确认。这种方式既简单又便捷,能够有效防止未经授权的设备访问。

以下是一个简单的示例代码,我们通过判断按钮的状态来决定是否进行授权:

/// <summary>/// 用户按键事件/// </summary>privatestaticvoidUserbtn_ValueChanged(object sender, PinValueChangedEventArgs e){// 配网结束或者未开始请求授权,则不处理if (_imp isnull || _imp.CurrentState != Improv.ImprovState.authorizationRequired) {return; }if (e.ChangeType == PinEventTypes.Rising) {Console.WriteLine("User button pressed"); _imp.Authorise(true);// 验证成功,改变灯光状态 _led.DeviceStatus = RunStatus.AuthSuccess; }}

关于用户交互按钮的使用,更多的相关知识可以看这一篇文章 。

2.3 配置重置功能

在实际项目中,我们还需要考虑到用户可能需要重置设备的网络配置的情况。为了方便用户重置设备的配置,我们在项目中添加了配置重置功能。这样,用户就可以方便地重置设备的配置,重新进行配网。这个功能的实现也非常简单,我们只需要在用户交互按钮按下时,实现按下时长的判断即可。

以下是一个简单的示例代码,我们通过判断按钮的状态来决定是否进行配置重置:

// 记录上一次按键按下时间staticDateTime lastClickTime = DateTime.UtcNow;/// <summary>/// 用户按键事件/// </summary>privatestaticvoidUserbtn_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 = newWireless80211Configuration(0); wificonfig.Ssid = ""; wificonfig.Password = ""; wificonfig.SaveConfiguration(); _led.DeviceStatus = RunStatus.ClearConfig; } }}

2.4 添加设备识别功能

在存在多个待配网设备时,特别是名称还一样的情况下,设备识别就显得尤为重要。在 Improv 类中有一个 OnIdentify 事件,我们可以通过响应这个识别事件来实现设备识别功能。这样,用户就可以方便地识别出自己需要配网的设备,大大提高了配网的效率和用户体验。

响应的方式可以是通过改变设备的状态灯颜色,或者通过针对有扬声器的设备,播放特定的声音等。这里我们通过改变设备的状态灯来实现设备识别功能。

以下是一个简单的示例代码,我们通过响应 OnIdentify 事件来实现设备识别功能:

// 初始化蓝牙配网_imp = newImprov();// 被请求识别_imp.OnIdentify += Imp_OnIdentify;/// <summary>/// 被请求识别/// </summary>privatestaticvoidImp_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>privatestaticvoidImp_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 项目进行网络接入,让配网过程变得更加简单、快速和安全。