首页 > 编程语言 >C#开发ESP32E(3)Wifi配置使用

C#开发ESP32E(3)Wifi配置使用

时间:2023-07-10 20:26:12浏览次数:54  
标签:C# Wifi ESP32E AvailableNetworksChanged WriteLine Debug net WifiAdapter

1.安装Wifi配置库(nanoFramework.System.Device.Wifi)

1.1 nanoFramework.System.Device.Wifi介绍

API预览--地址:https://docs.nanoframework.net/api/System.Device.Wifi.html

该库可配置ESP32使用Wifi模块进行通信
与Wifi建立连接有如下步骤:

  1. 创建Wifi适配器
  2. 扫描Wifi列表
  3. 建立连接

1.2 核心API介绍

查找适配器列表(静态)
WifiAdapter.FindAllAdapters()

扫描Wifi完成事件
WifiAdapter.AvailableNetworksChanged

异步扫描Wifi列表(实例)
WifiAdapter.ScanAsync()

连接与断开连接(实例)
WifiAdapter.Connect()&&WifiAdapter.Disconnect()

1.3 完整代码

public class Program
    {
        const string _wifiId = "you_WifiName";
        const string _wifiPassword = "you_WifiPassword";
        public static void Main()
        {
            Debug.WriteLine("Hello from nanoFramework!");

            try
            {
                //Wifi适配器
                WifiAdapter wifi = WifiAdapter.FindAllAdapters()[0];

                //注册扫描Wifi列表完成事件
                wifi.AvailableNetworksChanged += Wifi_AvailableNetworksChanged;

                //Wait,等待初始化完成
                Thread.Sleep(10_000);

                //30s扫描一次
                while (true)
                {

                    try
                    {
                        Debug.WriteLine("starting Wi-Fi scan");
                        //异步扫描WiFi列表
                        //触发WifiAdapter.AvailableNetworksChanged事件。
                        //AvailableNetworksChanged事件中,使用WifiAdapter.NetworkReport检索可用的Wi-Fi网络列表。
                        wifi.ScanAsync();
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine($"Failure starting a scan operation: {ex}");
                    }

                    Thread.Sleep(30000);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("message:" + ex.Message);
                Debug.WriteLine("stack:" + ex.StackTrace);
            }
            Thread.Sleep(Timeout.Infinite);

        }

        private static void Wifi_AvailableNetworksChanged(WifiAdapter sender, object e)
        {
            Debug.WriteLine("Wifi_AvailableNetworksChanged - get report");

            // 获取所有Wifi报告
            WifiNetworkReport report = sender.NetworkReport;

            // 遍历所有网络
            foreach (WifiAvailableNetwork net in report.AvailableNetworks)
            {
                //SSID:Wifi名称
                //BSSID:设备Mac地址 
                //Rssi:信号强度
                //Signal:表示信号强度的条数
                Debug.WriteLine($"Net SSID :{net.Ssid},  BSSID : {net.Bsid},  Rssi : {net.NetworkRssiInDecibelMilliwatts.ToString()},  Signal : {net.SignalBars.ToString()}");

                // Wifi名一致,尝试连接
                if (net.Ssid == _wifiId)
                {
                    // 如果连接则断开
                    sender.Disconnect();

                    //尝试连接
                    WifiConnectionResult result = sender.Connect(net, WifiReconnectionKind.Automatic, _wifiPassword);

                    // 显示连接状态
                    if (result.ConnectionStatus == WifiConnectionStatus.Success)
                    {
                        Debug.WriteLine("Connected to Wifi network");
                    }
                    else
                    {
                        Debug.WriteLine($"Error {result.ConnectionStatus.ToString()} connecting o Wifi network");
                    }
                }
            }

        }
    }

参考文档:https://github.com/nanoframework/Samples/blob/main/samples/Wifi/ScanWiFi/Program.cs

标签:C#,Wifi,ESP32E,AvailableNetworksChanged,WriteLine,Debug,net,WifiAdapter
From: https://www.cnblogs.com/hngyElectronic/p/17542192.html

相关文章

  • Windows计算机如何在线打开Sketch文件?
    自Sketch诞生以来,只有Mac版本。Windows计算机如何在线打开Sketch文件?即时设计已经解决了你遇到的大部分问题,不占用内存也是免费的。您可以使用此软件直接在线打开Sketch文件,完整预览并导出CSS、SVG、PNG等,还具有编辑功能! 如何导入Sketch文件?如果需要切换设计工具,能够......
  • 【DS】P9062 [Ynoi2002] Adaptive Hsearch&Lsearch(区间最近点对)
    ProblemLink给定平面上\(n\)个点,\(Q\)次询问编号在\([l,r]\)内的点的最近点对。\(n,Q\le2.5\times10^5\)。技巧:平面网格化乱搞都是错的。看见欧几里德距离,想到平面网格化。考虑一个平面最近点对的网格化做法:随机点的顺序,按顺序依次考虑,考虑到第\(i\)个点时,设当前最......
  • CSS
    .css/*author:weiyupengdate:2023/7/810:09*/#para2{font-size:xxx-large;}/*背景样式*/body{/*背景色*/background-color:mintcream;/*背景图*/background-image:url("../image/img1.png");/*背景图是否重复*/background-repeat:rep......
  • Oracle中varchar2(20)和varchar2(20 byte)区别 建议 使用统一的格式如:varchar2(20)
    Oracle中varchar2(20)和varchar2(20byte)区别建议使用统一的格式如:varchar2(20)原文链接:https://blog.csdn.net/u010033674/article/details/8736791   开发环境中:有的表中字段类型定义为varchar2(20)有的表中字段类型定义为varchar2(20byte)varchar2(20)和varchar2(......
  • springcloud -sentinel 用户自定义限流错误处理(仅限限流异常,其他异常请使用fallback属
    pom依赖<!--SpringCloudailibabanacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>......
  • Atcoder ABC308H Make Q
    考虑枚举唯一一个度数为\(3\)的点\(u\),即既在环上又与非环上一点相连的那个点。接下来考虑先处理环,那可以先把\(u\)从图上删掉,环的最短距离便是与\(u\)有连边的\(2\)个点在图上最短路长度加上\(2\)个点与\(u\)连边的长度,即\(\min\{w_{u,i}+w_{u,j}+\operator......
  • vue.config.js
    const{defineConfig}=require("@vue/cli-service");module.exports=defineConfig({//默认:'/',部署应用包时的基本URL,VueCLI会假设你的应用是被部署在一个域名的根路径上,如果是部署在一个子路径上,比如在https://www.my-app.com/my-app/,则设置publicPath:/my-app/......
  • CodeForces 1508C Complete the MST
    洛谷传送门AtCoder传送门比较需要观察的题。设\(v\)为所有边权异或和。直觉是设一条未确定权值的边边权为\(v\),其他的为\(0\)最优。证明大概就是讨论MST是否全部使用未确定权值的边。若全使用了,那么根据\(\oplusw\le\sumw\)可知\(\min\sumw=\oplusw\),并且......
  • [TM4]TM4C123G使用笔记(一)
    [TM4]TM4C123G使用笔记(一)TI的板子真让人头大......
  • 如何使用C++11 STD::THREAD设置堆栈大小?
    本教程将介绍如何使用C++11std::thread设置线程的堆栈大小。C++11std::thread是一种轻量级的多线程实现,它的灵活性使得它成为一个流行的选择。但是,在某些情况下,您可能需要设置线程的堆栈大小来满足您的需求。在开始本教程之前,我们假设您已经熟悉了C++11std::thread的基础知识......