## 项目37 WiFi 测试

**1. 实验简介：**

在本实验中，我们先使用ESP32的WiFi Station模式读取WiFi的IP地址，然后通过APP连接WiFi来读取APP上各功能按钮发送的字符。

**2. 实验元件：**

|![Img](./media/afc52f6616725ba37e3b12a2e01685ad.png)|![Img](./media/b4421594adeb4676d63581a1047c6935.png)|![Img](./media/4d0be04892e2038c372f82caba521f64.png)|
| :--: | :--: | :--: |
| ESP32*1 | USB 线*1 |智能手机/平板电脑(<span style="color: rgb(255, 76, 65);">自备</span>)*1|

**3. 实验接线：**

使用USB线将ESP32主板连接到电脑上的USB口。

![Img](./media/46cf3a8a1c79e456ac0f02da5ef38aec.png)

**4. 安装APP:**

⚠️ **特别提醒：如果已经在手机/平板上安装好了APP，则这一步骤可以直接跳过；否则，需要参照以下步骤在手机/平板上来安装APP。**

![Img](./media/e15c916fc960d7abbba15a3c2a95b325.png)

**步骤1：** 在手机/平板浏览器的搜索框中输入官网链接：www.keyes-robot.com

![Img](./media/wyx1.png)

**步骤2：** 找到 “**资料中心**”，并且点击它。

![Img](./media/wyx2.png)

**步骤3：** 在页面找到 “**APP下载**” 选项，并且点击它。

![Img](./media/wyx3.png)

**步骤4：** 在 “**APP下载**” 页面，找到 “**keyes wifi**”。

![Img](./media/wyx4.png)

**步骤5：** 根据自己的手机/平板系统选择对应的APP下载安装。选择如下：

![Img](./media/wyx7.png)

**安卓系统(Android)**

a. 点击 "**点击下载**" 按钮，下载对应的 "**keyes wifi.apk**" 文件。

![Img](./media/wyx5.png)

b. 按照安装提示进行下载安装。

![Img](./media/e15c916fc960d7abbba15a3c2a95b3251.png)

![Img](./media/c4df6d064c1819cf0ab703bd6917bc54.png)

![Img](./media/d7034b3177f4ff96779641bf2a278248.png)

![Img](./media/89d8312749d5fc0aa584f4542aeb132b.png)

![Img](./media/2da4df243f0b9c2425681625d77f7f52.png)

c. 下载安装后，打开 **keyes wifi** APP，出现如下图界面。

![Img](./media/7cddf433df535865414cddbb52c2d672.png)

**苹果系统(IOS)**

a. 点击 "**跳转APP Store**" 按钮，跳转到 APP Store

![Img](./media/wyx6.png)

b. 在 APP Store 上的搜索框输入 **keyes link**，点击搜索，出现下载界面，点击 “![Img](./media/a9c7179df093d9f6eb1d39906cc2b90d.png)”，就可以下载安装 **keyes link** 的APP。接下来的操作和安卓系统类似的，可以参考上面安卓系统的步骤进行操作。

**5. 项目代码：**

<span style="background: rgb(255, 251, 0);"><span style="color: rgb(255, 76, 0);">**特别注意：**<span style="color: rgb(255, 76, 0);"></span>确保计算机网络，手机/平板的网络，ESP32主板，路由器，代码中输入你自己的WiFi名称和密码都必须是在同一个局域网（WiFi）下。</span></span>

![Img](./media/img-202411180844190.png)

```C
//**********************************************************************************
/*
 * 文件名   : WIFI 测试
 * 描述 : Wifi模块测试Wifi ip
*/

#include <Arduino.h>
#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiClient.h>

String item = "0";
const char* ssid = "ChinaNet-2.4G-0DF0";
const char* password = "ChinaNet@233";
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
  Serial.println("TCP server started");
  MDNS.addService("http", "tcp", 80);
}

void loop() {
  WiFiClient client = server.available();
  if (!client) {
      return;
  }
  while(client.connected() && !client.available()){
      delay(1);
  }
  String req = client.readStringUntil('\r');
  int addr_start = req.indexOf(' ');
  int addr_end = req.indexOf(' ', addr_start + 1);
  if (addr_start == -1 || addr_end == -1) {
      Serial.print("Invalid request: ");
      Serial.println(req);
      return;
  }
  req = req.substring(addr_start + 1, addr_end);
  item=req;
  Serial.println(item);
  String s;
  if (req == "/")
  {
      IPAddress ip = WiFi.localIP();
      String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
      s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>Hello from ESP32 at ";
      s += ipStr;
      s += "</html>\r\n\r\n";
      Serial.println("Sending 200");
      client.println(s);
  }
  //client.print(s);
  client.stop();
}
//**********************************************************************************
```
<span style="color: rgb(255, 76, 65);">特别注意：</span>需要先将实验代码 ![Img](./media/e738c0e72f68d100db4f47b8772c9a4a.png) 中的用户Wifi名称和用户Wifi密码改成你们自己的Wifi名称和Wifi密码。

**6. 实验现象**

<span style="background: rgb(255, 251, 0);"><span style="color: rgb(255, 76, 0);">**特别注意：**<span style="color: rgb(255, 76, 0);"></span>确保计算机网络，手机/平板的网络，ESP32主板，路由器，代码中输入你自己的WiFi名称和密码都必须是在同一个局域网（WiFi）下。</span></span>

![Img](./media/img-202411180844190.png)

确认程序代码中的Wifi名称和Wifi密码修改正确后，编译并上传代码到ESP32主板上。

打开串口监视器，设置波特率为 <span style="color: rgb(255, 76, 65);">115200</span>，这样，串口监视器打印检测到的WiFi IP地址，然后打开WiFi APP。 在WIFI按钮前面的文本框中输入检测到的WIFI IP地址（<span style="color: rgb(255, 76, 65);">例如，下上面串口监视器检测到的IP地址：192.168.1.136</span>），再点击WIFI按钮，“403 Forbidden” 或 “网页无法打开” 就会变成 “192.168.1.136”。这样，就说明APP已经连接上了WIFI。

![Img](./media/b42be62a79b4b9639584699eb6bd1e06.png)

用手分别点击APP上的各个功能按钮，然后串口监视器会打印接收到的对应字符。

![Img](./media/e2844e48850242aa0b5bcf191d5ef28a.png)

**注意：** 如果打开串口监视器且设置波特率为115200之后，串口监视器窗口没有显示如下信息，可以按下ESP32的复位键 ![Img](./media/515a31c10d414cae43980905e7df1879.jpg)





