esp32为热点且每次新建IP一致,实现MCU串口与PC无线WiFi互相通信,且保持连接,数据格式是hex的例程
时间: 2024-04-16 13:29:36 浏览: 195
基于STM32单片机与wifi模块串口结合进行PC端或手机端无线通信esp8266
以下是一个使用ESP32作为热点,每次新建IP保持一致,实现MCU串口与PC无线WiFi互相通信,并保持连接的例程,同时数据格式为十六进制:
```cpp
#include <WiFi.h>
const char* ssid = "ESP32_Hotspot"; // 热点名称
const char* password = "12345678"; // 热点的密码
WiFiServer(80); // 创建WiFi服务器对象,监听端口80
WiFiClient client; // WiFi客户端对象
void setup() {
Serial.begin(115200); // 初始化串口波特率为115200
WiFi.softAP(ssid, password); // 设置ESP32为热点模式
IPAddress IP(192, 168, 1, 1); // 设置静态IP地址
IPAddress gateway(192, 168, 1, 1); // 设置网关
IPAddress subnet(255, 255, 255, 0); // 设置子网掩码
WiFi.softAPConfig(IP, gateway, subnet); // 设置ESP32的静态IP地址、网关和子网掩码
IPAddress hotspotIP = WiFi.softAPIP(); // 获取ESP32的IP地址
Serial.print("Hotspot IP address: ");
Serial.println(hotspotIP);
server.begin(); // 启动WiFi服务器
Serial.println("Server started");
}
void loop() {
if (!client.connected()) { // 如果客户端连接断开
client = server.available(); // 等待客户端连接
if (client) {
Serial.println("New client connected");
}
}
if (client && client.available()) { // 检查客户端是否发送了数据
String data = client.readStringUntil('\n'); // 读取客户端发送的数据
// 在这里进行处理收到的数据,例如打印到串口终端或执行相应操作
Serial.print("Received data: ");
for (int i = 0; i < data.length(); i += 2) {
String hexByte = data.substring(i, i + 2);
byte byteData = strtol(hexByte.c_str(), NULL, 16);
Serial.print(byteData, HEX);
Serial.print(" ");
}
Serial.println();
// 将接收到的数据发送到串口
Serial.write(data.c_str(), data.length());
}
if (Serial.available()) { // 检查串口是否有数据发送
String data;
while (Serial.available()) {
byte byteData = Serial.read();
data += String(byteData, HEX);
}
// 在这里进行处理发送的数据,例如发送给WiFi客户端或执行相应操作
if (client && client.connected()) { // 如果WiFi客户端连接正常
// 将数据发送给WiFi客户端
client.println(data);
}
}
}
```
在这个例程中,我们将ESP32设置为热点模式,热点的名称为"ESP32_Hotspot",密码为"12345678"。我们使用`WiFi.softAPConfig()`函数设置了一个静态IP地址、网关和子网掩码,保证每次新建热点时IP地址保持一致。在`setup()`函数中,我们通过`WiFi.softAP()`函数设置ESP32为热点模式,并获取ESP32的IP地址。然后,我们创建了一个WiFi服务器对象,并通过`server.begin()`函数启动WiFi服务器。
在`loop()`函数中,我们首先检查WiFi客户端连接是否断开。如果客户端连接断开,我们使用`server.available()`函数等待客户端连接,并将连接保存在`client`对象中。一旦有客户端连接成功,我们打印提示信息。
然后,我们检查客户端是否发送了数据。如果客户端发送了数据,我们使用`client.readStringUntil('\n')`函数读取数据,并进行相应处理。在这个例程中,我们将接收到的数据打印到串口终端,并将数据发送到MCU的串口(Serial)。同时,我们将接收到的数据按照十六进制格式进行打印。
同时,我们也检查串口是否有数据发送。如果串口有数据发送,我们使用`Serial.read()`函数读取数据,并转换为十六进制格式的字符串。然后,我们将发送的数据发送给WiFi客户端。
这样,MCU串口和PC通过无线WiFi热点建立了双向通信,并保持连接不断开。同时,数据格式为十六进制。
请注意,在这种模式下,ESP32将作为热点运行,PC需要连接到ESP32创建的热点网络,并通过串口终端向ESP32发送数据。ESP32将接收串口数据并发送到连接的WiFi客户端,同时接收WiFi客户端发送的数据并发送到串口。
这只是一个简单的例程,你可以根据自己的需求进行扩展和修改。希望对你有帮助!
阅读全文