可喜可賀新板子終于到了,啥也不說,趕緊搞起來。
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 異常,后期補發)
閱
一鍵三連呦!,感謝大佬的支持,您的支持就是我的動力!