본문 바로가기
Hardware/MCU(Arduino,ESP8266)

ESP8266, mDNS 사용법 (윈도, 안드로이드는 아직 미지원)

by lovey25 2020. 10. 11.
반응형

ESP8266 모듈이 네트워크에 연결이 되면 거기에 접속을 해서 구현한 기능을 활용해야 하겠죠. 이때 ESP8266 모듈이 네트워크에서 할당받은 IP주소를 알아야 접속을 할 수 있습니다.

대부분의 경우 동일한 환경에서 사용한다면 한번 접속한 IP주소가 유지되기 때문에 다음에 접속할 때도 저장된 주소로 접속하면 돼서 크게 불편할 일이 없지만 다른 네트워크로 이동하면서 테스트를 해야 한다면 매번 아이피 확인해서 접속하기가 번거로울 수 있습니다.

이럴 때 mDNS기능을 사용하면 고유의 도메인명으로 쉽게 접속이 가능합니다.

사용 방법은 다음과 같습니다.

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>   // 신호가 강한 AP에 골라서 접속하기 위한 라이브러리 
#include <ESP8266mDNS.h>        // mDNS 기능을 위한 라이브러리

ESP8266WiFiMulti wifiMulti;     // ESP8266WiFiMulti 인스턴스 생성

void setup() {                      
  Serial.begin(115200);
  delay(10);

  wifiMulti.addAP("ssid of AP1", "password of AP1");    // 접속하고자 하는 AP 정보
  wifiMulti.addAP("ssid of AP2", "password of AP2");
  
  Serial.println('\n');
  Serial.println("Connecting...");
  while (wifiMulti.run() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println('\n');
  Serial.println("Connected!"); 
  Serial.print("IP address:\t");      
  Serial.println(WiFi.localIP());     // 할당받은 IP주소 표시

  if (!MDNS.begin("myserver")) {             // mDNS 기동, 이름은  myserver.local
    Serial.println("Error setting up MDNS responder!");
  }
  Serial.println("mDNS responder started");
}

void loop() { }

위 코드에서 mDNS를 활성화하는데 관여하는 코드는 3행 그리고 25~29행입니다. mDNS 라이브러리를 사용하기 위한 헤더 파일 ESP8266mDNS.h를 추가하고 "MDNS.begin("myserver")"함수로 DNS 기능을 활성화할 수 있습니다. 이때 매개변수로 넣어준 "myserver"는 로컬 네트워크에서 사용할 나만의 도메인명이 됩니다.

접속할 때는 "mydns.local"로 접속할 수 있습니다.

코드를 컴파일하고 ESP8266 모듈에 업로드해보면 다음과 같이 잘 실행이 됩니다.

그런데 문제가 한 가지 있습니다. 아래 화면의 PING 테스트 결과를 보시면 IP주소로 핑을 보내면 응답이 있는데 이상하게 도메인명으로 핑을 보내면 응답이 없습니다.

제가 테스트 한 환경은 윈도 10 PC였는데요. 왜 안되는지 내용을 좀 찾아보니 아쉽게도 윈도10과 안드로이드 OS에서는 mDNS가 정상적으로 동작하지 않는 문제가 있다고 합니다. 윈도 10 에서는 "Apples Bonjour Print Services for Windows"를 이용해서 문제를 해결할 수 있는 방법이 있다는 것도 같은데 안드로이드에서는 어떤 솔루션이 있는지 모르겠습니다.

주로 사용해야 하는 환경이 윈도10과 안드로이드인데 그 둘만 안된다니 쩝 어이없네요. 전 포기하고 당분간 mDNS는 잊고 살려고 합니다. ^^

 

끝!

반응형

댓글