You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP8266连接AP时能否请求指定IP或设置可被发现的主机名?

ESP8266固定IP/自定义域名访问解决方案

1. 实现固定IP分配

你可以通过两种客户端侧代码修改的方式实现,不需要繁琐的路由器静态绑定操作:

1.1 完全静态IP配置

直接在代码中写死IP参数,跳过DHCP自动分配流程,只要所选IP未被局域网内其他设备占用即可正常使用:

  • 需提前确认你路由器的网关、子网掩码参数,通常家用路由器网关为192.168.1.1,子网掩码为255.255.255.0
  • 建议选择的固定IP在路由器DHCP自动分配地址池之外,避免IP冲突,比如大部分路由器DHCP池默认是192.168.1.100~192.168.1.200,你可以选192.168.1.10这类池外地址
  • 修改代码,在WiFi.begin()前添加静态IP配置:
#include <ESP8266WiFi.h>

const char* ssid     = "SSID";
const char* password = "PASSWORD";

// 配置固定IP参数
IPAddress staticIP(192, 168, 1, 10); // 你要设置的固定IP
IPAddress gateway(192, 168, 1, 1);   // 路由器网关地址
IPAddress subnet(255, 255, 255, 0);  // 子网掩码
IPAddress dns(192, 168, 1, 1);       // DNS服务器,通常和网关一致

void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println('\n');

  // 应用静态IP配置
  WiFi.config(staticIP, gateway, subnet, dns);
  WiFi.begin(ssid, password);

  Serial.print("Connecting to ");
  Serial.print(ssid); Serial.println(" ...");

  int i = 0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(++i); Serial.print(' ');
  }

  Serial.println('\n');
  Serial.println("Connection established!");
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP());
}

void loop() {}

1.2 DHCP主动请求指定IP

如果不想完全写死IP,可让ESP8266在DHCP请求阶段主动向路由器申请指定IP,只要该IP未被占用,绝大多数家用路由器都会同意分配,若IP已被占用会自动 fallback 到普通DHCP分配,不会断网。该方式和上述静态IP配置代码一致,只需保证路由器DHCP功能开启即可。

2. 实现自定义域名访问(无需记IP)

可以通过mDNS协议实现用自定义名称访问ESP8266服务,不需要修改路由器任何配置,仅需添加少量代码:

  • mDNS是局域网设备发现协议,支持该协议的设备可以通过[自定义名称].local的格式直接访问
  • Windows系统默认需要安装Bonjour服务支持mDNS,Mac、Linux、iOS、绝大多数安卓系统自带该功能
  • 整合mDNS功能的完整代码如下:
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h> // 引入mDNS库

const char* ssid     = "SSID";
const char* password = "PASSWORD";
const char* hostName = "myserver1"; // 自定义访问名称,访问时用http://myserver1.local

// 可选:搭配上述固定IP配置使用
IPAddress staticIP(192, 168, 1, 10);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, 1, 1);

void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println('\n');

  WiFi.config(staticIP, gateway, subnet, dns);
  WiFi.begin(ssid, password);

  Serial.print("Connecting to ");
  Serial.print(ssid); Serial.println(" ...");

  int i = 0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(++i); Serial.print(' ');
  }

  Serial.println('\n');
  Serial.println("Connection established!");
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP());

  // 启动mDNS服务
  if (!MDNS.begin(hostName)) {
    Serial.println("mDNS服务启动失败");
  } else {
    Serial.print("可通过以下地址访问:http://");
    Serial.print(hostName);
    Serial.println(".local");
  }
}

void loop() {
  MDNS.update(); // 循环中需添加mDNS更新,保证服务正常运行
}

内容的提问来源于stack exchange,提问作者Damn Vegetables

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:18:04