可喜可贺新板子终于到了,啥也不说,赶紧搞起来。
ESP32的主要功能就是WIFI,有了WIFI ,就可以直接连接家里的WIFI路由器啥的,直接连接到外网了,这个时候,它就相当于是一个小型的电脑或手机,这个时候,连外网就很方便了。
ESP32的WIFI主要有三种模式
1. 是AP模式(WIFI,路由器模式),就是让它自己成为路由器或者外地,对外提供WIFI服务,其他设备可以连接。
2. 是STA模式(就是电脑或者手机的模式),连了家里的WIFI即可。
3. 混合模式
但是,对于 NanoFramework的Wifi, STA 还没调通,在看。但是,AP模式是没啥子问题,先搞AP模式。
搞一个 扫描全部WIFI的功能和一个WIFI 连接功能 和一个获取网页信息的功能 httprequest 。
主要是具有针对性,不迷路。
WifiScan
记得先Nuget包
Install-Package nanoFramework.System.Device.Wifi -Version 1.4.0.22
代码比较简单,直接看代码
public class Program{public static void Main(){try{//获取WIFI 适配器WifiAdapter wifi = WifiAdapter.FindAllAdapters()[0];// 设置网络改变事件wifi.AvailableNetworksChanged += Wifi_AvailableNetworksChanged;// 循环扫描 WIFI列表while (true){Debug.WriteLine("开始扫描WIFI");wifi.ScanAsync();Thread.Sleep(30000);}}catch (Exception ex){Debug.WriteLine("message:" + ex.Message);Debug.WriteLine("stack:" + ex.StackTrace);}Thread.Sleep(Timeout.Infinite);}/// <summary>/// 扫描完成遍历/// </summary>private static void Wifi_AvailableNetworksChanged(WifiAdapter sender, object e){Debug.WriteLine("获取WIFI有效信息");WifiNetworkReport report = sender.NetworkReport;foreach (WifiAvailableNetwork net in report.AvailableNetworks){Debug.WriteLine($"WIFI 名称(SSID):{net.Ssid}, MAC地址(BSSID) : {net.Bsid}, 信号强度(rssi) : {net.NetworkRssiInDecibelMilliwatts.ToString()}, 信号强度(signal) : {net.SignalBars.ToString()}");}}}
查看输出的结果
可以看到直接获取我们想要的信息。
WIFI 连接功能
直接看代码
public class Program{const string MYSSID = "Myhome";const string MYPASSWORD = "1213141516";public static void Main(){try{var success = WifiNetworkHelper.ConnectDhcp(MYSSID, MYPASSWORD, requiresDateTime: true, token: new CancellationTokenSource(60000).Token);if (success){Debug.WriteLine($"连接状态 {success}");Debug.WriteLine($"我们获取到的最新时间: {DateTime.UtcNow.AddHours(8)}");}else{Debug.WriteLine($"发生了异常");}}catch (Exception e){Debug.WriteLine($"{e.Message}");}Thread.Sleep(Timeout.Infinite);}}
已经连接上了,也获取了最新的时间,但是,这个时间,其实是有时区的,我们要增加8个小时才对。
效果如下:
Wifi HttpRequest
public class Program{const string MYSSID = "Myhome";const string MYPASSWORD = "1213141516";public static void Main(){try{var success = WifiNetworkHelper.ConnectDhcp(MYSSID, MYPASSWORD, requiresDateTime: true, token: new CancellationTokenSource(60000).Token);if (success){Debug.WriteLine($"连接状态 {success}");Debug.WriteLine($"我们获取到的最新时间: {DateTime.UtcNow.AddHours(8)}");}else{Debug.WriteLine($"发生了异常");}X509Certificate rootCACert = new X509Certificate(Resource.GetBytes(Resource.BinaryResources.digicertglobalrootca));//请求地址,并获取信息var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://kesshei.github.io/esp32.html");httpWebRequest.Method = "GET";httpWebRequest.SslProtocols = System.Net.Security.SslProtocols.Tls12;httpWebRequest.HttpsAuthentCert = rootCACert;using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()){StreamReader sr = new StreamReader(httpWebResponse.GetResponseStream());var data = sr.ReadToEnd();Debug.WriteLine(">>>>>>>>>>>>>");Debug.WriteLine("获取请求完毕");Debug.WriteLine($"获取到: {data} 数据长度:{data.Length}");}}catch (Exception e){Debug.WriteLine($"{e.Message}");}Thread.Sleep(Timeout.Infinite);}}
这里面要注意的有一点,就是http与https的区别。
如果 不需要以下两行
httpWebRequest.SslProtocols = System.Net.Security.SslProtocols.Tls12;
httpWebRequest.HttpsAuthentCert = rootCACert;
那么,只能http,我这里是这样子的。
要想https,那么,只有 增加SSL的支持和增加一个证书。
运行结果
总结
终于把ESP32 WIFI这个最重要的环节搞了。这个不搞,那就没法玩了。现在应该算是入门了。
大佬们,好好玩。
代码地址
https://github.com/kesshei/NanoFreamworkWifiDemo.git
gitee(500 异常,后期补发)
阅
一键三连呦!,感谢大佬的支持,您的支持就是我的动力!