当前位置: 首页 > news >正文

ESP32 WIFI

文章目录

  • 前言
  • 一、WIFI AP模式(服务器)
      • 1.创建一个热点,每5S查询一次连接上热点的设备数量
      • 代码如下(示例):
    • 2.HTTP服务器
      • 按下按键显示网络延时
      • 代码如下(示例):
  • 二、WIFI STA模式(客户端)
    • 1、每5S扫描一次附近WIFI
      • 代码如下(示例):
    • 2、HTTP客户端
      • 代码如下(示例):
  • 三、AP+STA模式
  • 四、连接CSDN
  • 总结


前言


一、WIFI AP模式(服务器)

应用:1、配置网关;2、物联网(IoT)设备控制中心:3嵌入式Web服务器;…

1.创建一个热点,每5S查询一次连接上热点的设备数量

代码如下(示例):

#include <WiFi.h>

// 设置AP模式的SSID和密码
const char* ssid = "New_ESP32_wifi";
const char* password = "123456789";

void setup() {
  // 开始串口通信
  Serial.begin(115200);

  // 设置ESP32工作在AP模式下
  WiFi.softAP(ssid, password);

  // 打印本地IP地址(AP模式)
  Serial.println();
  Serial.print("AP IP address: ");
  Serial.println(WiFi.softAPIP());
}

void loop() {
  // 获取并打印已连接客户端的数量
  int numberOfClients = WiFi.softAPgetStationNum();
  Serial.print("Number of connected clients: ");
  Serial.println(numberOfClients);

  // 等待5秒后再次检查
  delay(5000);
}

2.HTTP服务器

按下按键显示网络延时

代码如下(示例):

#include <WiFi.h>
#include <ESPAsyncWebServer.h>

// 替换为您的 Wi-Fi SSID 和密码
const char* ssid = "TP-LINK_406门口";
const char* password = "yjt090909406";

AsyncWebServer server(80);
String message = "Hello, ESP32!";
long latency = 0; // 存储延时

void setup() {
  Serial.begin(115200);
  
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // 处理根目录请求
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    String html = "<html><body>";
    html += "<h1>" + message + "</h1>";
    html += "<p>Network Latency: " + String(latency) + " ms</p>"; // 显示延时
    html += "<button id='clickButton'>Click Me!</button>";
    html += "<script>";
    html += "let clickCount = 0;";
    html += "function updateText() {";
    html += "  let startTime = Date.now();"; // 记录开始时间
    html += "  fetch('/updateText').then(response => response.text()).then(data => {";
    html += "    let endTime = Date.now();"; // 记录结束时间
    html += "    let latency = endTime - startTime;"; // 计算延时
    html += "    document.querySelector('p').innerText = 'Network Latency: ' + latency + ' ms';"; // 更新页面上的延时信息
    html += "    if (++clickCount % 2 === 0) {"; // 如果点击次数是偶数次,则刷新页面
    html += "      location.reload(true);"; // 强制刷新页面以显示更新
    html += "    } else {";
    html += "      document.querySelector('h1').innerText = 'Button Clicked!';"; // 更新消息文本
    html += "    }";
    html += "  });";
    html += "}";
    html += "document.getElementById('clickButton').addEventListener('click', updateText);";
    html += "</script>";
    html += "</body></html>";
    request->send(200, "text/html", html);
  });

  server.on("/about", HTTP_GET, [](AsyncWebServerRequest *request){
    String aboutMessage = "<h1>About this ESP32 Server</h1>";
    aboutMessage += "<p>This server is built using ESP32 and ESPAsyncWebServer library.</p>";
    request->send(200, "text/html", aboutMessage);
  });

  server.on("/data", HTTP_GET, [](AsyncWebServerRequest *request){
    String jsonData = "{\"temperature\": 25, \"humidity\": 60}";
    request->send(200, "application/json", jsonData);
  });

  // 处理更新文本的请求
  server.on("/updateText", HTTP_GET, [](AsyncWebServerRequest *request){
    message = "Button Clicked!"; // 更新消息
    request->send(200, "text/plain", "Text updated");
  });

  server.begin();
}

void loop() {
  // 空的loop,不需要任何内容
}

实验现象:输入IP地址,访问http服务器
在这里插入图片描述

二、WIFI STA模式(客户端)

应用:1.Web服务接口;2.数据采集与上报;3物联网(IoT)设备…

1、每5S扫描一次附近WIFI

代码如下(示例):

#include <WiFi.h>

// 定义一个结构体来存储Wi-Fi信息
struct WiFiNetwork {
  String ssid;
  int rssi;
};

// 比较函数,用于qsort排序
int compareRSSI(const void* a, const void* b) {
  WiFiNetwork* wa = (WiFiNetwork*)a;
  WiFiNetwork* wb = (WiFiNetwork*)b;
  return wb->rssi - wa->rssi; // 按RSSI降序排列
}

void setup() {
  Serial.begin(115200);
  delay(1000); // 等待串口监视器启动
}

void loop() {
  Serial.println("正在启动Wi-Fi扫描...");

  // 执行Wi-Fi扫描
  int networksFound = WiFi.scanNetworks();

  if (networksFound == 0) {
    Serial.println("未找到任何Wi-Fi网络");
  } else {
    Serial.printf("找到了 %d 个Wi-Fi网络\n", networksFound);

    // 创建一个数组来保存所有找到的Wi-Fi网络信息
    WiFiNetwork wifiNetworks[networksFound];

    for (int i = 0; i < networksFound; ++i) {
      wifiNetworks[i].ssid = WiFi.SSID(i);
      wifiNetworks[i].rssi = WiFi.RSSI(i);
    }

    // 对Wi-Fi网络按RSSI值进行排序
    qsort(wifiNetworks, networksFound, sizeof(WiFiNetwork), compareRSSI);

    // 打印排序后的Wi-Fi网络列表
    Serial.println("按信号强度排序的Wi-Fi网络列表:");
    for (int i = 0; i < networksFound; ++i) {
      Serial.printf("%d. SSID: %-32s RSSI: %ddBm\n", i + 1, wifiNetworks[i].ssid.c_str(), wifiNetworks[i].rssi);
    }
  }

  // 等待5秒再进行下一次扫描
  delay(5000);
}

2、HTTP客户端

代码如下(示例):

#include <WiFi.h>        // 包含WiFi库,用于连接WiFi网络
#include <HTTPClient.h>  // 包含HTTPClient库,用于发起HTTP请求

// 定义WiFi网络的SSID和密码
const char* ssid = "your_SSID";        // 替换为你的WiFi网络的SSID
const char* password = "your_PASSWORD"; // 替换为你的WiFi网络的密码

// 定义要请求的URL
const char* url = "http://example.com"; // 替换为你想要请求的URL

void setup() {
  // 初始化串口通信,波特率为115200
  Serial.begin(115200);

  // 开始连接WiFi
  WiFi.begin(ssid, password);

  // 等待WiFi连接成功
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000); // 等待1秒
    Serial.println("Connecting to WiFi..."); // 打印连接状态
  }

  // WiFi连接成功后,打印连接成功信息
  Serial.println("Connected to WiFi");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP()); // 打印ESP32的IP地址

  // 创建HTTPClient对象
  HTTPClient http;

  // 开始HTTP请求,设置请求的URL
  http.begin(url);

  // 发起GET请求,并获取响应代码
  int httpCode = http.GET();

  // 检查HTTP请求是否成功
  if (httpCode > 0) {
    // HTTP请求成功
    Serial.println("HTTP GET Request succeeded");

    // 获取响应的字符串内容
    String payload = http.getString();

    // 打印响应内容
    Serial.println(payload);
  } else {
    // HTTP请求失败,打印错误信息
    Serial.printf("HTTP GET Request failed, error: %s\n", http.errorToString(httpCode).c_str());
  }

  // 结束HTTP请求,释放资源
  http.end();
}

void loop() {
  // loop函数中不需要执行任何操作
  // 在这里可以添加其他逻辑,比如定期发送请求等
}

实验现象:串口打印 HTTP响应的实际内容 (文本格式)
在这里插入图片描述

三、AP+STA模式

应用:1、智能网关;2、中继器/扩展器…

四、连接CSDN


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

相关文章:

  • 封装一个sqlite3动态库
  • C#两个集合多属性组合关联得到新的组合
  • 机器学习算法 - 随机森林之决策树初探(1)
  • 哪些专业跟FPGA有关?
  • 计算机等级考试——计算机三级——网络技术部分
  • 多态、虚函数、动态绑定、虚指针加虚表是同一件事情。
  • 【Oracle】层次查询步骤,理解 where 条件执行顺序
  • DeepSeek帮助解决Oracle死锁问题
  • LeetCode刷题---字符串---859
  • 2768. 黑格子的数目|2175
  • AI时代前端开发:创造力的新引擎?
  • SQLMesh系列教程-3:SQLMesh模型属性详解
  • 探索边缘计算网关在优化交通信号控制中的关键角色
  • 行业视野 | 数字化赋能:作战体系仿真推演可视化与效能评估
  • [LeetCode] 二叉树 III — 110#平衡二叉树 | 257#二叉树的所有路径 | 404#左叶子之和 | 222#完全二叉树的节点个数
  • 【LeetCode Hot100 子串】和为 k 的子数组、滑动窗口最大值、最小覆盖子串
  • 5、《Spring Boot自动配置黑魔法:原理深度剖析》
  • 力反馈设备在工厂生产中遥操作机器人的应用优势
  • Filter过滤器
  • HashMap安全性
  • 侧记|青年为何来沪创新创业?从这一天寻找答案
  • 碧桂园:砸锅卖铁保交房、持续推进保主体,尽快让公司恢复正常经营
  • 冯德莱恩:欧美贸易谈判前不会前往美国会见特朗普
  • 工行回应两售出金条疑似有杂质:情况不属实,疑似杂质应为金条售出后的外部附着物
  • 长三角地区中华老字号品牌景气指数发布,哪些牌子是你熟悉的?
  • 港理大研究揭示:塑胶废物潜藏微生物群落或引发生态危机