当前位置: 首页 > news >正文

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);            // 初始化串口通信,波特率为 115200WiFi.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);

实现结果

注意

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

http://www.lryc.cn/news/459212.html

相关文章:

  • 基于Python的自然语言处理系列(32):spaCy属性扩展
  • STM32 输入捕获模式详解:PWM 输入捕获与 PWI 模式(续篇)
  • 【C++】set/map(重点解析)
  • 【算法篇】动态规划类(1)(笔记)
  • mysql学习教程,从入门到精通,SQL 约束(Constraints)(41)
  • 使用CSS3与JavaScript实现炫酷的3D旋转魔方及九宫格交换动效
  • springboot项目通过maven的profile功能实现通过不同文件夹的方式来组织不同环境配置文件
  • GAN(Generative Adversarial Nets)
  • linux下使用mpi求自然数和
  • WebGl学习使用attribute变量绘制一个水平移动的点
  • 机器学习四大框架详解及实战应用:PyTorch、TensorFlow、Keras、Scikit-learn
  • linux源码安装slurm以及mung和openssl
  • 分享蓝牙耳机A2DP音频卡顿原因及解决思路
  • Mac 下编译 libaom 源码教程
  • 【成品设计】基于Arduino平台的物联网智能灯
  • 安装和配置k8s可视化UI界面dashboard-1.20.6
  • VLAN:虚拟局域网
  • 利用可解释性技术增强制造质量预测模型
  • FlexMatch: Boosting Semi-Supervised Learning with Curriculum Pseudo Labeling
  • Spring Cloud 3.x 集成eureka快速入门Demo
  • 线性代数 矩阵
  • 【C语言】使用结构体实现位段
  • univer实现excel协同
  • JavaScript进阶笔记--深入对象-内置构造函数及案例
  • 网络爬虫自动化Selenium模拟用户操作
  • 尚硅谷rabbitmq 2024 流式队列2024指定偏移量 第55节答疑
  • NSSCTF-WEB-pklovecloud
  • 深入Postman- 自动化篇
  • react-JSX
  • 深度对比:IPguard与Ping32在企业网络管理中的应用