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

时间:2019-04-20 07:19:42

标签: arduino-ide arduino-esp8266 esp32

我正在尝试使用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);

2 个答案:

答案 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个连接。