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提供了大量能使我们快速便捷地处理数据的函数和方法。