我正在尝试使用ESP32模块建立网状网络。 WiFi.h softAPConfig()可以用于设置租赁的起始地址,但是它可以向上扩展,而无需重新使用不再使用的已租用地址。所以我想限制两个地址之间的租赁范围。
I found this piece of code from dhcpserver.h
/* Defined in esp_misc.h */
typedef struct {
bool enable;
ip4_addr_t start_ip;
ip4_addr_t end_ip;
} dhcps_lease_t;
这是我编译并上传到ESP32模块中的代码
#include "WiFi.h"
char *ssid = "AirMesh";
IPAddress local_IP(192,168,1,0);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
void setup()
{
Serial.begin(9600);
Serial.println();
Serial.print("Setting soft-AP configuration ... ");
Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");
Serial.print("Setting soft-AP ... ");
Serial.println(WiFi.softAP("ESPsoftAP_01") ? "Ready" : "Failed!");
Serial.print("Soft-AP IP address = ");
Serial.println(WiFi.softAPIP());
WiFi.softAP(ssid);
}
void loop() {}
当我连接第一个设备并重新连接它并给出IP 192.168.1.3时,连接的第一个设备给出IP 192.168.1.1,第二个设备给出IP 192.168.1.2(每个连接使用不同的物理地址) 这种进步一直在继续
编辑: 仔细研究之后,我认为我找到了负责IP租赁范围的代码,但无法弄清楚它的含义。
lease.start_ip.addr = static_cast<uint32_t>(local_ip) + (1 << 24);
lease.end_ip.addr = static_cast<uint32_t>(local_ip) + (11 << 24);
答案 0 :(得分:0)
经过反复尝试,我设法找到了答案 更改WiFiAP.cpp文件中的代码(由于ESP32可能的最大连接数为10,因此我已叉出并请求将11替换为10)
lease.start_ip.addr = static_cast<uint32_t>(local_ip) + (1 << 24);
lease.end_ip.addr = static_cast<uint32_t>(local_ip) + (n << 24);
其中n是必须分配给外部设备的IP地址的数量。 例如:-
lease.end_ip.addr = static_cast<uint32_t>(local_ip) + (20 << 24);
表示如果起始IP为192.168.1.0,则DHCP将分配从192.168.1.1到192.168.1.20的地址,而192.168.1.0(起始IP将为ESP32模块的地址)
答案 1 :(得分:0)
接入点不使用192.168.1.1的第一个IP而不是1.0吗? 因此2-11是10个连接。