littlebot
Published on 2025-04-11 / 0 Visits
0

【源码】基于Arduino和ESP32的异步DNS服务器库

项目简介

本项目的异步DNS服务器库名为AsyncDNSServer_ESP32_Ethernet,基于Arduino和ESP32开发。该库专为ESP32/S2/S3/C3系列开发板设计,能配合LwIP W5500、W6100或ENC28J60以太网模块使用,可在多连接网络环境中提供稳定可靠的异步DNS服务。

项目的主要特性和功能

  1. 异步处理能力:采用异步网络编程,可同时处理多个连接,无需在loop()函数中频繁检查DNS请求数据包,提升处理效率。
  2. 多开发板支持:支持ESP32、ESP32_S3、ESP32 - S2、ESP32 - C3等多种开发板,适配LwIP W5500、W6100或ENC28J60以太网模块。
  3. 可配置性:允许修改与域名关联的TTL(生存时间),并可设置其他域名的返回代码。
  4. 调试功能:提供基于串口的调试日志,可通过调整日志级别控制调试信息输出量。

安装使用步骤

安装依赖

  1. 安装Arduino IDE 1.8.19及以上版本。
  2. 安装ESP32 Core 2.0.6及以上版本。
  3. 根据使用的开发板和以太网模块,安装对应的依赖库:
    • 对于ESP32:
      • WebServer_ESP32_W5500 library 1.5.2+
      • WebServer_ESP32_W6100 library 1.5.2+
      • WebServer_ESP32_ENC library 1.5.1+
      • AsyncUDP_ESP32_W5500 library 2.0.0+
      • AsyncUDP_ESP32_W6100 library 2.0.0+
      • AsyncUdp_ESP32_ENC library 2.0.0+
    • 对于ESP32_S2/S3/C3:
      • WebServer_ESP32_SC_W5500 library 1.2.1+
      • WebServer_ESP32_SC_W6100 library 1.2.1+
      • WebServer_ESP32_SC_ENC library 1.2.0+
      • AsyncUDP_ESP32_SC_Ethernet library 2.2.0+

安装本库

  • 使用Arduino库管理器:在Arduino IDE中,打开“工具” - “管理库”,搜索AsyncDNSServer_ESP32_Ethernet并安装最新版本。
  • 手动安装
    1. 解压文件到AsyncDNSServer_ESP32_Ethernet - main目录。
    2. 将整个AsyncDNSServer_ESP32_Ethernet - main文件夹复制到Arduino库目录,如~/Arduino/libraries/
  • VS Code & PlatformIO
    1. 安装VS Code和PlatformIO。
    2. 使用PlatformIO的库管理器搜索并安装AsyncDNSServer_ESP32_Ethernet库。
    3. 使用示例中的platformio.ini文件确保所有依赖库自动安装。

配置使用

  1. 在代码中包含头文件: ```cpp

include

include

2. 定义相关常量和变量:cpp const byte DNS_PORT = 53; IPAddress apIP; AsyncDNSServer dnsServer; AsyncWebServer server(80); 3. 在`setup()`函数中初始化以太网连接和DNS服务器:cpp void setup() { // 以太网连接相关设置 ESP32_W5500_onEvent(); ETH.begin(MISO_GPIO, MOSI_GPIO, SCK_GPIO, CS_GPIO, INT_GPIO, SPI_CLOCK_MHZ, ETH_SPI_HOST); // 可设置静态IP // ETH.config(myIP, myGW, mySN, myDNS); ESP32_W5500_waitForConnect(); apIP = ETH.localIP();

// DNS服务器设置 dnsServer.setTTL(300); dnsServer.setErrorReplyCode(AsyncDNSReplyCode::ServerFailure); dnsServer.start(DNS_PORT, "*", apIP); } 4. 在`loop()`函数中可留空或添加其他逻辑:cpp void loop() { } ```

调试设置

可通过修改以下宏定义来控制调试日志的输出: ```cpp

define ASYNC_DNS_ESP32_ETHERNET_DEBUG_PORT Serial

// 使用0 - 4的数字,数字越大,调试信息越多,内存使用也越多

define ASYNC_DNS_ESP32_ETHERNET_LOGLEVEL 0

```

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】