基于ESP32搭建物联网服务器七(以域名的方式访问(AP模式))
我们已经建立了一个基本的WEB服务器,我们可以通过串口监视器,或者登陆路由器来确定ESP32的IP地址,再利用这个IP地址在浏览器中访问ESP32,十分不方便。而利用DNSServer这个库,就可以实现用域名,也就是用比较方便记忆的网址的形式来对ESP32进行访问。2:&domainName域名,如"esp32_ap.com",域名最好不要设置为互联网存在的网址。二、.processNextReq
在前文中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();
}
更多推荐
所有评论(0)