C# NanoFramework WIFI扫描、连接和HttpWebRequest 之 ESP32

可喜可贺新板子终于到了,啥也不说,赶紧搞起来。

ESP32的主要功能就是WIFI,有了WIFI ,就可以直接连接家里的WIFI路由器啥的,直接连接到外网了,这个时候,它就相当于是一个小型的电脑或手机,这个时候,连外网就很方便了。

ESP32的WIFI主要有三种模式

  1. 1. 是AP模式(WIFI,路由器模式),就是让它自己成为路由器或者外地,对外提供WIFI服务,其他设备可以连接。

  2. 2. 是STA模式(就是电脑或者手机的模式),连了家里的WIFI即可。

  3. 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()}");
            }
        }
    }

查看输出的结果

可以看到直接获取我们想要的信息。

930677b61684614094e152c5009955af.png

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个小时才对。

效果如下:

544b40b842c1ce54f535855baedc86d1.png

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的支持和增加一个证书。

运行结果

b4d10e20b4935e595782a1da601b58f1.png

总结

终于把ESP32 WIFI这个最重要的环节搞了。这个不搞,那就没法玩了。现在应该算是入门了。

大佬们,好好玩。

代码地址

https://github.com/kesshei/NanoFreamworkWifiDemo.git

gitee(500 异常,后期补发)

一键三连呦!,感谢大佬的支持,您的支持就是我的动力!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值