基于ESP32搭建物联网服务器七(以域名的方式访问(AP模式))

在前文中ESP32利用SPIFFS存放html,css,js等文件(读取html)_你的幻境的博客-CSDN博客,我们已经建立了一个基本的WEB服务器,我们可以通过串口监视器,或者登陆路由器来确定ESP32的IP地址,再利用这个IP地址在浏览器中访问ESP32,十分不方便。而利用DNSServer这个库,就可以实现用域名,也就是用比较方便记忆的网址的形式来对ESP32进行访问。

在arduion IDE中,如果已经搭建好ESP32环境,默认是自带这个库的:

以前文中的代码为基础,我们增加这个库的引用:

#include <WiFi.h>
#include <SPIFFS.h>
#include <DNSServer.h>
#include "ESPAsyncWebServer.h"

因为DNSServer只能在AP模式下才能实现,所以需要开启AP和STA共存的方式,可以参照之前的文章:EPS32的AP模式与STA模式共存;_你的幻境的博客-CSDN博客

之后需要创建一个DNSServer实例:

DNSServer dnsserver;

实现的主要方法:

一、.start();启动DNSServer服务

bool start(const uint16_t &port, const String &domainName, const IPAddress &resolvedIP);

        参数:

        1:&port                           服务端口,DNS默认端口53

        2:&domainName           域名,如"esp32_ap.com",域名最好不要设置为互联网存在的网址

        3:&resolvedIP                解析域名所对应的IP地址

二、.processNextRequest()方法,监测客户端的DNS请求,需要放到loop循环里。

完整代码:

#include <WiFi.h>
#include <SPIFFS.h>
#include <DNSServer.h>
#include "ESPAsyncWebServer.h"


DNSServer dnsserver;
AsyncWebServer server(80);

//连接WIFI
void connect_wifi(){
  const byte DNS_PORT = 53;                     //DNS端口
  const String url = "ESPAP.com";               //域名
  IPAddress APIp(10,0,10,1);                    //AP IP
  IPAddress APGateway(10,0,10,1);               //AP网关
  IPAddress APSubnetMask(255,255,255,0);        //AP子网掩码
  const char* APSsid = "esp32_AP";              //AP SSID
  const char* APPassword = "12345678";          //AP wifi密码
  
  const char* wifi_ssid = "ESP32";
  const char* wifi_password = "12345678";
  Serial.begin(9600);
  WiFi.mode(WIFI_AP_STA);                             //打开AP和STA共存模式
  WiFi.softAPConfig(APIp, APGateway, APSubnetMask);   //设置AP的IP地址,网关和子网掩码
  WiFi.softAP(APSsid, APPassword, 6);                 //设置AP模式的登陆名和密码
  dnsserver.start(DNS_PORT, url, APIp);               //设置DNS的端口、网址、和IP
  WiFi.begin(wifi_ssid, wifi_password);               //连接WIFI
  Serial.print("Connected");
  //循环,直到连接成功
  while(WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  IPAddress local_IP = WiFi.localIP();
  Serial.print("WIFI is connected,The local IP address is "); //连接成功提示
  Serial.println(local_IP); 
}

void web_server(){
  if(!SPIFFS.begin(true)){
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }
  server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.html");
  server.begin();                       //初始化
}

void setup() {
  connect_wifi();
  web_server();
}

void loop() {
  dnsserver.processNextRequest();
}

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
使用ESP32作为Web服务器的话,我们可以通过将HTML代码嵌入到ESP32的代码中来创建一个基本的Web页面。 首先,我们需要引入ESP32的相关库。然后,创建一个ESP32Web服务器实例,监听指定的端口号。接下来,我们可以设置一个处理根路径请求的处理函数,这个函数会返回我们嵌入的HTML代码作为响应。 以下是一个简单的示例代码: ``` #include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; WebServer server(80); const char* htmlContent = R"( <!DOCTYPE html> <html> <body> <h1>Hello ESP32!</h1> <p>This is a sample HTML page embedded in ESP32 web server.</p> </body> </html> )"; void handleRoot() { server.send(200, "text/html", htmlContent); } void setup() { WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.print("IP address: "); Serial.println(WiFi.localIP()); server.on("/", handleRoot); server.begin(); } void loop() { server.handleClient(); } ``` 以上代码首先连接到指定的WiFi网络,然后创建一个Web服务器实例,并设置处理根路径请求的处理函数。 在`handleRoot`函数中,我们使用`server.send`函数将HTTP响应发送给客户端,响应的内容即为我们嵌入的HTML代码。 在`setup`函数中,我们将Web服务器开始监听,并打印ESP32的IP地址。 最后,在`loop`函数中,我们使用`server.handleClient`来处理来自客户端的请求。 通过以上代码,我们可以使用ESP32作为Web服务器提供一个简单的HTML页面。当我们访问ESP32的IP地址时,就会看到浏览器中显示的嵌入的HTML页面。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节狂徒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值