如何在WiFi softAP()中设置DHCP IP地址租用的范围?

问题描述 投票:0回答:1

我正在尝试使用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);
arduino-ide arduino-esp8266 esp32
1个回答
0
投票

经过试验和错误的方法,我设法找到答案更改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模块的地址)

© www.soinside.com 2019 - 2024. All rights reserved.