1. 引言

通过之前系列文章的介绍,相信大家已经基本入门了 .NET nanoFramework ,以及如何在 ESP32 上使用 .NET nanoFramework。对于.NET开发者来说,.NET nanoFramework 是一个非常好的选择,可以使用 C# 语言开发嵌入式应用程序,而不需要额外的学习成本。

物联网只有联网才能发挥出其更大的价值,本文将介绍如何使用 .NET nanoFramework 为 ESP32 设备连接 Wi-Fi 网络。

2. 连接示例

使用 .NET nanoFramework 连接 Wi-Fi 网络的过程相对简单。首先,你需要在你的项目中安装 nanoFramework.System.Device.Wifi 包,这个包里包含了 WifiNetworkHelper 类,它提供了一些方法来帮助你连接 Wi-Fi 网络。

2.1 简单示例

以下是一个简单的示例代码,演示了如何使用 .NET nanoFramework 连接 Wi-Fi 网络:

private static string Ssid = "xxxx";
private static string Password = "xxxxx";

public static void Main()
{

    try
    {
        Debug.WriteLine("等待网络连接...");
        bool success;
        CancellationTokenSource cs = new(60000);
        success = WifiNetworkHelper.ConnectDhcp(Ssid, Password, requiresDateTime: true, token: cs.Token);
        if (!success)
        {
            Debug.WriteLine($"连接失败: {WifiNetworkHelper.Status}.");
            if (WifiNetworkHelper.HelperException != null)
            {
                Debug.WriteLine($"Exception: {WifiNetworkHelper.HelperException}");
            }
            return;
        }

    }
    catch(Exception ex)
    {
        Debug.WriteLine($"{ex}");
    }
    // 连接成功,可以创建网络服务了
}

连接成功后我们就可以在路由器管理后台看到设备的情况,这里的nanodevice_MAC后缀即是连接成功的ESP32设备。

使用.Net nanoFramework为ESP32连接Wi-Fi网络-LMLPHP

2.2 获取分配的IP

在上面的示例中,我们使用了ConnectDhcp方法来连接 Wi-Fi 网络,这个方法会自动获取分配的 IP 地址。如果你想获取分配的 IP 地址,可以使用下面的方法:

private static string GetIP(NetworkInterfaceType interfaceType)
{
    foreach (var networkInterface in NetworkInterface.GetAllNetworkInterfaces())
    {
        if (networkInterface.NetworkInterfaceType == interfaceType)
        {
            return networkInterface.IPv4Address;
        }
    }

    return null;
}

在连接成功后调用即可:

string ip = GetIP(NetworkInterfaceType.Wireless80211);
if (ip != null)
{
    Debug.WriteLine($"IP: {ip}");
}
else
{
    Debug.WriteLine("没有找到IP");
}

2.3 指定网络信息

前面只是一个简单的示例,使用了DHCP自动获取分配的IP,我们也可以使用ConnectFixAddress方法自行指定IP:

CancellationTokenSource cs = new(10000);
var success = WifiNetworkHelper.ConnectFixAddress(
    Ssid,
    Password,
    new IPConfiguration(
        "192.168.31.10",
        "255.255.255.0",
        "192.168.31.1",
        new[] { "192.168.31.1" }),
    requiresDateTime: true,
    token: cs.Token);

这里的 IPConfiguration 类包含了 IP 地址、子网掩码、网关和 DNS 服务器的信息。使用指定的静态 IP 时,需要确保 IP 地址与已使用的 IP 地址不冲突。

3. 网络配置信息

当然,网络信息直接写在代码中是不安全的,我们可以将网络信息保存在配置中,然后在代码中读取配置信息,这样就可以避免将网络信息写死在代码中了。

我们可以通过在 .NET nanoFramework VS 插件窗口中的 “Edit Network Configuration” 按钮来打开配置窗口,如下图所示:

使用.Net nanoFramework为ESP32连接Wi-Fi网络-LMLPHP

一般我们只需要填写 SSID 和密码即可,这里也提供了静态网络信息和安全证书的配置。填写完成后,点击 “OK” 按钮保存配置信息。

然后我们就可以在代码中读取配置信息了,代码如下:

// 读取配置文件
var configuration = Wireless80211Configuration.GetAllWireless80211Configurations();
if (configuration.Length == 0)
{
    Debug.WriteLine("没有找到wifi配置文件");
    return;
}
Debug.WriteLine($"SSID: {configuration[0].Ssid}, Password: {configuration[0].Password}");

4. 最后

到这里,我们已经成功地使用 .Net nanoFramework 为 ESP32 连接到了 Wi-Fi 网络。这只是 .Net nanoFramework 的冰山一角,它还有更多的功能等待你去探索。

如果你在实践中遇到任何问题,或者有任何疑问,欢迎留言,我会尽快回复你。如果你觉得这篇文章对你有帮助,也欢迎分享给你的朋友。

01-04 06:34