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 蓝牙配网”。这个小程序使用原生的微信小程序开发,开发起来也很快,主要是蓝牙的相关操作,整体项目一天就搞定了。虽然小程序的备案、审核和微信认证过程有些许繁琐,但总的来说,两三个工作日就可以全部完成,这个工具的开发还是相当顺利的。

这个小程序的使用非常简单,只需要打开小程序,点击“开始搜索”按钮,然后按照提示操作即可。

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

连接成功后会展示设备的IP地址,方便用户直接访问设备,或者进行网页端的更详细的使用配置。可以长按复制IP地址,然后在浏览器中打开,就可以直接访问设备了。

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

4. 结语

通过本文的介绍,我相信你已经对如何在正式项目中使用 Improv 配网及微信小程序配网工具有了一定的了解。配网是设备网络化的第一步,也是非常重要的一步。项目案例已经开源在 ESP32_S3_Samples 项目:https://github.com/sangyuxiaowu/ESP32_S3_Samples/tree/main/ProjectImprovWifi?wt.mc_id=DT-MVP-5005195 希望,通过这个项目,能够帮助你更好的实现在 .Net nanoFramework 项目进行网络接入,让配网过程变得更加简单、快速和安全。

02-29 08:41