在实现一个WIFI无线连接设置中需要注意的问题

1 首先,要实现一个简单的WIFI连接设置,我们需要掌握和WIFI功能相关的一些类,比如WIfiManager,WifiInfo,ScanResult,WifiConfiguration等,提供了WIFI连接相关的基本的API.

比如:

打开关闭网关:wifiManager.setWifiEnabled(true/false);

扫描周边网络:wifiManager.getScanResults();

连接指定网络:wifiManager.enableNetwork(networkId,true);

添加网络:wifiManager.addNetwork(wcg);

移除网络:wifiManager.removeNetwork(netId);

获取网卡状态:wifiManager.getWifiState()

……

2 扫描的网络将会被保存在一个List<ScanResult>中,同时WifiManager会为我们维护一个List<WifiConfiguration>,这个List中保存了我们已经连接过的配置好的网络连接.

当我们选择一个网络时,判断它是否存在于这个List中,存在即可直接连接,否则需要用户输入密码创建一个新的WifiConfiguration.

3 获得的ScanResult中将会保存有该无线连接的相关信息,包括SSID,BSSID,capabilities,level等属性,其中SSID号是该连接的一个标识符,比如我们经常看到的TP_LINKXXX.

capabilities中保存了相关加密信息,比如WEB和WPA等.level则表示信号度.

4 在获取连接状态时,即调用wifiManager.getWifiState()或者wifiInfo.getSupplicantState()时,通常在用户已经授权成功后,我们获得的状态值就为COMPLETED,此时不管网络是否已经连接成功,我们都无法获得新的状态. 所以要判断WIFI网络是否已经真的连接成功需要用到如下方法判断:

 
 ConnectivityManager connManager = (ConnectivityManager) WifiConnection.this
             .getSystemService(CONNECTIVITY_SERVICE);
// 获取代表联网状态的NetWorkInfo对象
NetworkInfo networkInfo = connManager.getActiveNetworkInfo();

if(networkInfo != null && networkInfo.getType() == 1
&& wifiAdmin.getWifiInfo().getSSID()!=null)
{

//WIFI网络连接成功

}

5 获取本地IP地址的方法:

public String getLocalIpAddress() {     
       try {     
           for (Enumeration<NetworkInterface> en = NetworkInterface     
                   .getNetworkInterfaces(); en.hasMoreElements();) {     
               NetworkInterface intf = en.nextElement();     
               for (Enumeration<InetAddress> enumIpAddr = intf     
                       .getInetAddresses(); enumIpAddr.hasMoreElements();) {     
                   InetAddress inetAddress = enumIpAddr.nextElement();     
                   if (!inetAddress.isLoopbackAddress()) {     
                       return inetAddress.getHostAddress().toString();     
                   }     
               }     
           }     
       } catch (SocketException ex) {     
           Log.e("WifiPreference IpAddress", ex.toString());     
       }     
       return null;     
   }     

6 在创建一个新的WifiConfiguration时,切记SSID和preSharedKey必须添加双引号,否则必将会导致连接失败.正确写法如下:
//创建一个新的WifiConfiguration
WifiConfiguration wcg = new WifiConfiguration();
wcg.BSSID = mBSSID;
//SSID和preSharedKey必须添加双引号,否则将会导致连接失败
wcg.SSID = "\"" + mSSID + "\"";
wcg.hiddenSSID = false;
wcg.status = WifiConfiguration.Status.ENABLED;
wcg.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
wcg.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
wcg.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wcg.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wcg.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wcg.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
//如果加密模式为WEP
if(mSecurity.equals("WEP"))
{
   wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
   wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
   wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
   wcg.wepKeys[0] ="\"" + editText.getText().toString() + "\""; //This is the WEP Password
   wcg.wepTxKeyIndex = 0;
}
//如果加密模式为WPA EPA
else if(mSecurity.equals("WPA EAP"))
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wcg.preSharedKey = "\"" + editText.getText().toString() + "\"";
}
//如果加密模式为WPA PSK
else if(mSecurity.equals("WPA PSK"))
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wcg.preSharedKey = "\"" + editText.getText().toString() + "\"";
}
//无加密
else
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
}


其他问题将会即使进行补充.



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现ESP32与MCU串口之间的通信,并通过无线WiFi与计算机连接,你可以按照以下步骤进行: 1. 硬件连接:将ESP32的一个串口引脚(如GPIO1和GPIO3)连接到MCU的对应串口引脚(如TX和RX)。确保连接的线路正确,以便实现双向通信。 2. 设置ESP32与MCU串口通信:在ESP32的代码,使用Serial.begin()函数初始化ESP32与MCU之间的串口通信。指定合适的波特率(如9600)和相应的引脚(如GPIO1为TX,GPIO3为RX)。例如,以下代码初始化了ESP32与MCU的串口通信: ```cpp void setup() { Serial.begin(9600); // 初始化ESP32与MCU的串口通信,波特率为9600 } void loop() { // 在这里编写你的代码 } ``` 3. 设置ESP32与计算机的无线WiFi连接:使用WiFi库在ESP32上连接到WiFi网络。在代码,你需要提供WiFi网络的名称(SSID)和密码。例如,以下代码连接到名为"myWiFi"的WiFi网络: ```cpp #include <WiFi.h> const char* ssid = "myWiFi"; const char* password = "password"; void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); } void loop() { // 在这里编写你的代码 } ``` 4. 实现数据交互:通过串口通信,在ESP32和MCU之间传输数据。你可以使用Serial.print()和Serial.println()函数在ESP32和MCU之间发送和接收数据。例如: 在ESP32发送数据到MCU: ```cpp void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); } void loop() { Serial.println("Hello MCU!"); // 发送数据到MCU delay(1000); } ``` 在MCU接收来自ESP32的数据: ```cpp void setup() { Serial.begin(9600); // 初始化与ESP32的串口通信 } void loop() { if (Serial.available()) { // 检查是否有可读取的数据 char data = Serial.read(); // 读取数据 // 在这里处理接收到的数据 Serial.println(data); // 将接收到的数据发送回ESP32 } } ``` 5. 实现ESP32与计算机之间的无线通信:通过WiFi连接,使ESP32能够与计算机进行无线通信。你可以使用WiFiClient和WiFiServer库在ESP32上实现与计算机之间的数据传输。例如,在ESP32上创建一个简单的Web服务器,以便通过计算机的Web浏览器访问ESP32上的数据: ```cpp #include <WiFi.h> WiFiServer server(80); void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); server.begin(); } void loop() { WiFiClient client = server.available(); if (client) { String request = client.readStringUntil('\r'); client.flush(); // 在这里处理来自计算机的请求 // 并向计算机发送响应 client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.println("<html><body><h1>Hello from ESP32!</h1></body></html>"); client.stop(); } } ``` 通过以上步骤,你可以实现ESP32与MCU之间的串口通信,并通过无线WiFi与计算机进行通信。 请注意,确保ESP32和MCU之间的串口设置正确,并且ESP32可以成功连接到WiFi网络。如果遇到连接问题,可以检查硬件连接、波特率设置WiFi网络设置和代码逻辑。 希望这些步骤能帮助你实现ESP32与MCU串口通信,并通过无线WiFi与计算机进行通信!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值