ESP8266搭建带DHCP功能WiFi热点的编译问题及解决
ESP8266 SoftAP DHCP函数失效问题及解决方法
问题背景
原本可稳定连接安卓设备、Win10台式机及Win11笔记本的ESP8266 WiFi热点初始化代码,在开发新应用时出现编译错误:提示未找到wifi_softap_set_dhcps_offer_option(OFFER_ROUTER, &mode)的引用。
排查发现:
user_interface.h头文件中,lwip库已移除该DHCP相关函数- 找不到
ESP8266WiFiAP-DhcpServer.cpp源文件及该函数的实现代码
直接移除该函数调用后,设备无法正常连接热点,DHCP服务工作随机异常。
解决方法
调整初始化流程,改用ESP8266 Arduino库中提供的DHCP服务器实例接口替代原废弃函数,同时优化AP配置顺序。
最终可用初始化代码
Serial.begin(UART_BaudRate); // 初始化串口 wifi_set_phy_mode(PHY_MODE_11G); // 设置WiFi物理模式为11G // WiFi.mode(WIFI_AP_STA); // 注释掉AP+STA模式 WiFi.mode(WIFI_AP); // 设置为纯AP模式 // 设置设备主机名 WiFi.hostname(newHostname.c_str()); // 配置AP的IP地址、网关和子网掩码 WiFi.softAPConfig(AP_IP, gateway, subnet); // 停止当前DHCP服务 wifi_softap_dhcps_stop(); // 获取SoftAP的DHCP服务器实例 auto& server = WiFi.softAPDhcpServer(); // 配置DHCP不提供路由信息 server.setRouter(false); // 重新启动DHCP服务 if (wifi_softap_dhcps_start()) { Serial.println("DHCP服务启动成功"); }; // 配置SoftAP使用WPA2 AES加密 struct softap_config config; wifi_softap_get_config(&config); // 获取当前AP配置 config.authmode = AUTH_WPA2_PSK; // 强制使用WPA2 AES加密模式 if (wifi_softap_set_config(&config)) { Serial.println("AP加密配置完成"); }; // 启动SoftAP if (WiFi.softAP(ssid, pass, chan)) { Serial.println("SoftAP启动成功"); }; // NMEA相关初始化 NMEA_IN_ready = false; NMEA_IN = ""; // 初始化UDP服务 Udp.begin(Port_NMEA); // 初始化TCP服务器 server_TCP.begin(Port_NMEA); // 启用TCP无延迟模式 server_TCP.setNoDelay(true); // 启动DNS服务器,将所有域名解析到AP的IP地址 dnsServer.start(DNS_PORT, "*", AP_IP);
内容的提问来源于stack exchange,提问作者jptrol
相关产品推荐
相关产品推荐

