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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值