前面几篇文章中都是通过IP地址访问ESP8266,但如果我们不想记IP地址,想要通过网址访问ESP8266就需要用到DNS服务了。 Arduino for esp8266中有两个DNS服务器相关的库:
DNSServer:https://github.com/esp8266/Arduino/tree/master/libraries/DNSServer 这个库就是本文将用到的建立DNS服务的方式,使用该库时ESP8266必须工作在AP模式下;ESP8266mDNS:https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266mDNS 这个库是mDNS库,使用这个库的时候ESP8266可以在AP模式或是以STA模式接入局域网。局域网中的其他开启mDNS服务的设备就可以通过网址访问ESP8266了;DNSServer库使用步骤如下:
引入相应的库#include <DNSServer.h>;建立全局的DNS服务器DNSServer dnsServer;;在setup()中初始化DNSServerdnsServer.start(PORT, URL, IP);;在loop()中监听客户请求并处理dnsServer.processNextRequest();;最基本的应用可以参考官方示例DNSServer。 在keywords.txt中可以看到更多方法,具体的使用可以参考源码或是官方例程。
DNSServer库使用就如上文描述,下面直接上代码:
#include <ESP8266WiFi.h> #include <DNSServer.h> #include <ESP8266WebServer.h> IPAddress local_IP(192,168,4,1); //IP地址 IPAddress gateway(192,168,4,1); //网关地址 IPAddress subnet(255,255,255,0); //子网掩码 const byte DNS_PORT = 53; //DNS服务端口号,一般为53 DNSServer dnsServer; ESP8266WebServer webServer(80); void handleRoot() { webServer.send(200, "text/plain", "这是主页"); } void handleNext() { webServer.send(200, "text/plain", "这是另一个页面"); } void setup() { //初始化网络 WiFi.mode(WIFI_AP); WiFi.softAPConfig(local_IP, gateway, subnet); WiFi.softAP("DNSServer example"); //初始化DNSServer dnsServer.start(DNS_PORT, "www.example.com", local_IP); //初始化WebServer webServer.on("/", handleRoot); webServer.on("/next", handleNext); webServer.begin(); } void loop() { //监听客户请求并处理 dnsServer.processNextRequest(); webServer.handleClient(); }DNSServer的基本使用就是这样了,比较简单,但可以在一定程度上提升用户的使用体验。