我正在尝试使用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.1,第二个设备提供IP 192.168.1.2,当我断开第一个设备并重新连接它并且它提供IP 192.168.1.3(每个连接使用不同的物理地址)时,这个进程继续进行
编辑:在挖掘之后,我想我发现代码负责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);
经过试验和错误的方法,我设法找到答案更改WiFiAP.cpp文件中的代码(我已经分叉并请求拉取替换11与10,因为ESP32可能的最大连接数为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模块的地址)