完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在慢慢学习 ESP8266 ESP-01 和 ESP32 网络的来龙去脉。我正在尝试将 ESP32 作为从两个 ESP8266 ESP-01 客户端读取的服务器运行。当我将 ESP-01 作为服务器时,一切正常。但是,当我改用 ESP32 时,它只会在每个客户端的前几次尝试中读取数据。之后,它无法与客户端通信。当 ESP-01 是服务器时,这是我的代码。我对 ESP32 所做的唯一更改是将库更改为#include 。我想知道从 Arduino IDE 加载代码时是否选择了错误的板。有什么想法吗?
代码:全选#include #include //------- WI-FI details ----------// char ssid[] = "*********"; //SSID here char pass[] = "*********"; // Passowrd here //-----------------------------// #define MAX_CLIENTS 2 WiFiServer server(80); WiFiClient *clients[MAX_CLIENTS] = { NULL }; IPAddress ip(192, 168, 1, 137); // IP address of the server IPAddress gateway(192,168,1,1); // gateway of your network IPAddress subnet(255,255,255,0); // subnet mask of your network String request = ""; void setup() { Serial.begin(115200); internetServer(); } void loop() { WiFiClient newClient = server.available(); if (newClient) { Serial.println("New client."); if (newClient.connected()) { Serial.println("Sever connected."); for (int i=0 ; iavailable() ) { clients = new WiFiClient(newClient); request = newClient.readStringUntil('\r'); Serial.print("From client: "); Serial.println(request); newClient.println("Data received!\r"); // } } Serial.println("flushing"); newClient.flush(); newClient.stop(); request = ""; } } void internetServer() { if (WiFi.status() != WL_CONNECTED) { while (WiFi.status() != WL_CONNECTED) { Serial.print("."); WiFi.config(ip, gateway, subnet); WiFi.begin(ssid, pass); delay(5000); } server.begin(); Serial.println("Connected to wifi"); Serial.print("Status: "); Serial.println(WiFi.status()); Serial.print("IP: "); Serial.println(WiFi.localIP()); Serial.print("Subnet: "); Serial.println(WiFi.subnetMask()); Serial.print("Gateway: "); Serial.println(WiFi.gatewayIP()); Serial.print("SSID: "); Serial.println(WiFi.SSID()); Serial.print("Signal: "); Serial.println(WiFi.RSSI()); Serial.print("Networks: "); Serial.println(WiFi.scanNetworks()); } } |
|
相关推荐
1个回答
|
|
对于将 ESP32 作为服务器运行以接收来自多个客户端的数据,您可以尝试以下步骤:
1.将 ESP32 设置为接收客户端请求的服务器,并在启动时将监听端口设置为所需值: WiFiServer server(80); // Set up ESP32 as web server void setup() { WiFi.begin(ssid, password); // Connect to Wi-Fi network server.begin(); // Start the server } 2.使用 WiFiServer.accept() 函数来接受客户端连接,并使用 WiFiClient.available() 函数检查是否接收到新数据。如果有,则使用 WiFiClient.read() 函数读取数据并在控制台上输出: void loop() { // Check for new client connections WiFiClient client = server.available(); if (client) { Serial.println("New client connection"); // Read incoming data while (client.available()) { char c = client.read(); Serial.write(c); } } } 3.要接收来自多个客户端的数据,请将上述代码放置在循环中,并使用一个数组来存储每个客户端的 WiFiClient 对象。您可以使用数组循环来检查每个客户端是否有新数据,或使用 select() 函数来处理所有客户端的数据。这需要一些复杂的编程技巧,建议您先尝试处理单个客户端。 注意,如果您要在同一端口上运行多个服务器,可能需要使用不同的端口号来避免端口冲突问题。此外,您需要确保每个客户端都正在与正确的服务器端口进行通信。 |
|
|
|
只有小组成员才能发言,加入小组>>
1149 浏览 1 评论
582浏览 6评论
480浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
465浏览 5评论
466浏览 4评论
441浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 01:44 , Processed in 1.229252 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号