ESP32 是一款低成本,低功耗的系统级芯片,集成了 Wi-Fi 和蓝牙功能,非常适用于智能家居、可穿戴设备等物联网应用。其中,联网能力是物联网设备的基础,而 Wi-Fi 和蓝牙是两种常用的无线连接方式。本文将介绍如何使用 .NET nanoFramework 为 ESP32 设备连接 Wi-Fi 网络。
通过之前系列文章的介绍,相信大家已经基本入门了 .NET nanoFramework ,以及如何在 ESP32 上使用 .NET nanoFramework。对于.NET开发者来说,.NET nanoFramework 是一个非常好的选择,可以使用 C# 语言开发嵌入式应用程序,而不需要额外的学习成本。
物联网只有联网才能发挥出其更大的价值,本文将介绍如何使用 .NET nanoFramework 为 ESP32 设备连接 Wi-Fi 网络。
使用 .NET nanoFramework 连接 Wi-Fi 网络的过程相对简单。首先,你需要在你的项目中安装 nanoFramework.System.Device.Wifi
包,这个包里包含了 WifiNetworkHelper
类,它提供了一些方法来帮助你连接 Wi-Fi 网络。
以下是一个简单的示例代码,演示了如何使用 .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设备。
在上面的示例中,我们使用了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");
}
前面只是一个简单的示例,使用了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 地址不冲突。
当然,网络信息直接写在代码中是不安全的,我们可以将网络信息保存在配置中,然后在代码中读取配置信息,这样就可以避免将网络信息写死在代码中了。
我们可以通过在 .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}");
到这里,我们已经成功地使用 .Net nanoFramework 为 ESP32 连接到了 Wi-Fi 网络。这只是 .Net nanoFramework 的冰山一角,它还有更多的功能等待你去探索。
如果你在实践中遇到任何问题,或者有任何疑问,欢迎留言,我会尽快回复你。如果你觉得这篇文章对你有帮助,也欢迎分享给你的朋友。