ESP32 / Arduino でDHCPでIPを取得後にDNSサーバを変更する方法
ESP32/Arduinoで、DHCPでIPを取得しつつ、DNSサーバのみ独自に設定したいことがあり、その方法を試行錯誤しました。
結論
lwip/dns.h をincludeし、DHCPでWIFIに接続した後に、set_dnsserver()で設定できました。
setdns.cpp
#include "lwip/dns.h"
...
void setup()
{
WiFi.begin("XXXX", "YYYY");
while (WiFi.status() != WL_CONNECTED) delay(1000);
ip_addr_t dnsserver = IPADDR4_INIT_BYTES(8,8,8,8); // googleのDNSサーバを使う
dns_setserver(0,&dnsserver);
...
現在設定されているDNSサーバ設定は使いつつ、リストの最後に追加する場合
setdns.cpp
#include "lwip/dns.h"
...
void setup()
{
WiFi.begin("XXXX", "YYYY");
while (WiFi.status() != WL_CONNECTED) delay(1000);
for(int i=0;i<DNS_MAX_SERVERS;i++){
if(WiFi.dnsIP(i)==IPAddress(0,0,0,0)){
ip_addr_t dnsserver = IPADDR4_INIT_BYTES(8,8,8,8);
dns_setserver(i,&dnsserver);
break;
}
}
...