Arduino 为什么ESP32可以';t路由IP';s

Arduino 为什么ESP32可以';t路由IP';s,arduino,esp8266,esp32,arduino-esp32,Arduino,Esp8266,Esp32,Arduino Esp32,我正在做一个项目,我需要设置一个esp32作为接入点,一些esp8266-01作为客户端 然后,我在每个esp822芯片上运行一个web服务器,以获取json格式的传感器数据。现在我已经这样做了,当我用手机连接到这个网络并输入其中一个esp8266的IP时,我得到了响应,但有两个特殊的esp8266 其他的esp8266有从接入点获取ip的功能,但是web服务器没有发送任何响应,并且超时。我甚至试过7种esp8266型号,但都不起作用,但当我用家庭调制解调器代替esp32替换接入点时。所有esp

我正在做一个项目,我需要设置一个esp32作为接入点,一些esp8266-01作为客户端

然后,我在每个esp822芯片上运行一个web服务器,以获取json格式的传感器数据。现在我已经这样做了,当我用手机连接到这个网络并输入其中一个esp8266的IP时,我得到了响应,但有两个特殊的esp8266

其他的esp8266有从接入点获取ip的功能,但是web服务器没有发送任何响应,并且超时。我甚至试过7种esp8266型号,但都不起作用,但当我用家庭调制解调器代替esp32替换接入点时。所有esp8266都能完美工作

我认为esp32无法处理和路由IP。但这里有一个矛盾,为什么esp8266的这两个型号工作得很好,而其他型号则不行

这是ESP32的接入点代码

#include <WiFi.h>

const char* ssid = "esprouter";
const char* password = "9167997734";

void setup() {
Serial.begin(115200);

Serial.print("Setting AP (Access Point)…");
WiFi.softAP(ssid, password);
}

void loop(){

}
#包括
const char*ssid=“esprouter”;
const char*password=“9167997734”;
无效设置(){
序列号开始(115200);
串行打印(“设置AP(接入点)…”;
WiFi.softAP(ssid,密码);
}
void循环(){
}
这是ESP8266的客户端代码

#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DHT.h>
#include <WiFiUdp.h>

#define DHTPin 2
#define DHTTYPE DHT11
DHT dht(DHTPin, DHTTYPE);

const char* ssid = "esprouter";
const char* password = "9167997734";

ESP8266WebServer server(80);

void handle_OnConnect();
void handle_OnConnect2();
void handle_NotFound();

float Temperature;
float Humidity;

void setup() {
Serial.begin(115200);
dht.begin();

Serial.println("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected to WiFi");
Serial.print("IP: "); Serial.println(WiFi.localIP());

server.on("/info", handle_OnConnect);
server.on("/get", handle_OnConnect2);

server.onNotFound(handle_NotFound);
server.begin();
dht.begin();
}
void loop() {

server.handleClient();

}

void handle_OnConnect() {
DynamicJsonDocument doc(1024);
doc["type"] = "dht-sensor" ;
doc["id"] = 128;
doc["ip"] = WiFi.localIP().toString();
String response;
serializeJson(doc, response);
server.send(200, "content/json", response);
}

void handle_OnConnect2() {

Temperature = dht.readTemperature();
Humidity = dht.readHumidity();
DynamicJsonDocument doc(1024);
doc["temp"] = Temperature;
doc["hum"] = Humidity;
String response;
serializeJson(doc, response);
server.send(200, "content/json", response);

}

void handle_NotFound(){
server.send(404, "text/plain", "Not found");
}
#包括
#包括
#包括
#包括
#包括
#定义DHTPin 2
#定义DHT类型DHT11
DHT-DHT(DHTPin,DHTTYPE);
const char*ssid=“esprouter”;
const char*password=“9167997734”;
ESP8266Web服务器(80);
void handle_OnConnect();
无效句柄_OnConnect2();
无效句柄_NotFound();
浮子温度;
浮子湿度;
无效设置(){
序列号开始(115200);
dht.begin();
Serial.println(“连接到”);
序列号println(ssid);
WiFi.begin(ssid,密码);
while(WiFi.status()!=WL_已连接){
延迟(1000);
连续打印(“.”);
}
Serial.println(“”);
Serial.println(“连接到WiFi”);
Serial.print(“IP:”;Serial.println(WiFi.localIP());
server.on(“/info”,handle\u OnConnect);
服务器上(“/get”,handle\u OnConnect2);
onNotFound(handle\u NotFound);
server.begin();
dht.begin();
}
void循环(){
server.handleClient();
}
无效句柄\u OnConnect(){
动态文档文档(1024);
文件[“类型”]=“dht传感器”;
单据[“id”]=128;
doc[“ip”]=WiFi.localIP().toString();
字符串响应;
序列化JSON(文档、响应);
send(200,“内容/json”,响应);
}
连接2()上的无效句柄{
温度=dht.readTemperature();
湿度=dht.read湿度();
动态文档文档(1024);
doc[“temp”]=温度;
doc[“hum”]=湿度;
字符串响应;
序列化JSON(文档、响应);
send(200,“内容/json”,响应);
}
无效句柄\u未找到(){
send(404,“文本/普通”,“未找到”);
}

如果有人能为我提供指导,我将不胜感激。

我以前从未创建过如此复杂的ESP32网络,但我已将其用作客户端和AP。如果你发布你的代码和可能的接线图,或者更好,一个最小的可重复的例子,你更有可能得到帮助。你似乎在没有任何诊断的情况下就得出了结论。你没有提供任何有意义的信息让人们帮助你。我向您提出的问题是,假设两个esp8266按照您的预期工作,那么另一个esp8266连接到什么?如果无法与AP建立连接,是否有错误消息?还可以在ESP32上记录网络活动。做一些诊断…。。@deaton.dg好的,我添加了devices@hcheung好的,我添加了设备代码,请检查iTunes,我没有发现任何问题,但我对arduino IDE或ESP32 arduino API没有太多经验。这可能没有多大帮助,但在使用ESP32 idf编码时,我从未遇到过将ESP32用作AP的问题。您可以尝试以下示例:。否则,我们将需要这些设备故障的详细日志。