ESP32-C3实现热点并在浏览器中输入域名访问网页

源代码

#include <WiFi.h>            // 引入 WiFi 库,用于处理网络连接
#include <WebServer.h>       // 引入 WebServer 库,用于创建 HTTP 服务器
#include <DNSServer.h>       // 引入 DNSServer 库,用于处理 DNS 请求

const char* ssid = "ESP32-C3-AP";  // 定义热点名称
const char* password = "12345678";  // 定义热点密码
const byte DNS_PORT = 53;          // 定义 DNS 服务的端口号,标准端口号为 53
IPAddress apIP(192, 168, 4, 1);    // 定义 ESP32-C3 作为热点时的 IP 地址
DNSServer dnsServer;               // 创建 DNSServer 实例
WebServer server(80);              // 创建 WebServer 实例,监听 80 端口

void setup() {
  Serial.begin(115200);            // 初始化串口通信,波特率为 115200
  WiFi.softAP(ssid, password);     // 启动 ESP32-C3 的软 AP 模式,创建热点
  WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); // 配置 ESP32-C3 的软 AP 网络参数

  // 启动 DNS 服务器,将所有以 "ESP1212.com" 结尾的域名解析到 ESP32-C3 的 IP 地址
  dnsServer.start(DNS_PORT, "ESP1212.com", apIP);

  server.on("/", handleRoot);      // 当接收到根目录的 HTTP 请求时,调用 handleRoot 函数
  server.begin();                  // 启动 Web 服务器

  Serial.println();                // 打印换行
  Serial.print("IP address: ");    // 打印 IP 地址信息
  Serial.println(WiFi.softAPIP()); // 打印 ESP32-C3 作为热点时的 IP 地址
}

void loop() {
  dnsServer.processNextRequest();  // 处理 DNS 请求
  server.handleClient();           // 处理来自客户端的 HTTP 请求
}

// 处理根目录请求的函数
void handleRoot() {
  String html = "<html><body><h1>Hello World!</h1></body></html>"; // 定义要发送的 HTML 内容
  server.send(200, "text/html", html); // 发送 HTTP 响应,状态码为 200,内容类型为 text/html
}

重点解释

在 ESP32-C3 的编程环境中,dnsServer.start(DNS_PORT, "*", apIP); 这行代码是用来启动一个 DNS 服务器的,并且设置它来响应 DNS 请求。让我们分解这行代码的各个部分:

  • dnsServer: 这是一个 DNSServer 类的实例,用于处理 DNS 请求。

  • .start(): 这是 DNSServer 类的一个方法,用于启动 DNS 服务器。

  • DNS_PORT: 这通常被定义为 53,因为 DNS 服务的标准端口是 53。

  • "*": 这是一个字符串,代表 DNS 服务器应该响应的所有 DNS 请求。在这里使用 "*" 表示无论请求哪个域名,DNS 服务器都会返回同一个 IP 地址。这是一个通配符,意味着不区分域名,对于所有的 DNS 请求都会返回指定的 IP 地址。

  • apIP: 这是 IPAddress 类型的变量,它存储了 ESP32-C3 作为热点(Soft AP)时分配的 IP 地址。在这个例子中,它被设置为 IPAddress(192, 168, 4, 1)

你可以修改 dnsServer.start(DNS_PORT, "*", apIP); 这行代码来改变 DNS 服务器的行为。例如,如果你想要 DNS 服务器只响应特定域名的请求,你可以将 "*" 替换为特定的域名。

// 假设 apIP 已经被定义为 ESP32-C3 的 IP 地址
IPAddress apIP(192, 168, 4, 1);

// 启动 DNS 服务器,只响应特定域名 "myesp32.local" 的请求
dnsServer.start(DNS_PORT, "myesp32.local", apIP);

实现结果

注意

定义域名时不可和网络上的一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值