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

ESP32 是一款低成本,低功耗的系统级芯片,集成了 Wi-Fi 和蓝牙功能,非常适用于智能家居、可穿戴设备等物联网应用。其中,联网能力是物联网设备的基础,而 Wi-Fi 和蓝牙是两种常用的无线连接方式。本文将介绍如何使用 .NET nanoFramework 为 ESP32 设备连接 Wi-Fi 网络。

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设备。

请添加图片描述

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” 按钮来打开配置窗口,如下图所示:

请添加图片描述

一般我们只需要填写 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 的冰山一角,它还有更多的功能等待你去探索。

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

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-06 13:24:03       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-06 13:24:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-06 13:24:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-06 13:24:03       18 阅读

热门阅读

  1. 全志F1C100s Linux 系统编译出错:不能连接 github

    2024-01-06 13:24:03       48 阅读
  2. BAM文件数据结构详解

    2024-01-06 13:24:03       36 阅读
  3. leetcode 93. 复原 IP 地址

    2024-01-06 13:24:03       46 阅读
  4. python中使用socket服务发送接收图像

    2024-01-06 13:24:03       32 阅读
  5. Jtti:为什么建议企业使用存储型服务器?

    2024-01-06 13:24:03       35 阅读
  6. A Tour of Go部分练习

    2024-01-06 13:24:03       40 阅读
  7. 设置模式:适配器模式

    2024-01-06 13:24:03       34 阅读
  8. Linux平台下gcc安装升级

    2024-01-06 13:24:03       44 阅读
  9. Kendo UI for Angular 学习笔记

    2024-01-06 13:24:03       42 阅读
  10. Redhat(liunx)连接虚拟机

    2024-01-06 13:24:03       23 阅读
  11. 阿里的通义灵码在android studio上的使用方法

    2024-01-06 13:24:03       52 阅读