ESP32를 사용해 무선랜에 접속하는 경우 기본적으로 DHCP를 사용해 IP주소를 받아오게 된다.
하지만 ESP32가 서버로 동작하는 경우 IP주소를 고정시켜 놓아햐 할 필요가 있다. 또한 배터리로 동작시 deep sleep 모드를 활용하게 되는데 이때 deep sleep에서 깨어날 때 마다 공유기에 접속 후 DHCP로 IP를 받아오는 과정을 수행해야 하면 그에 따른 배터리 소모도 무시할 수 없다.
그래서 ESP32 무선랜이 DHCP를 사용하지 않고 수동으로 IP주소를 설정하는 방법을 설명하겠다.
DHCP를 사용하건 아니건 공유기에 접속을 해야만 하므로 접속할 공유기 정보(SSID, password) 는 필요하다.
const char * ssid = "REPLACE_YOUR_SSID";
const char * pwd = "REPLACE_YOUR_PASSWORD";
저기서 빨간색 부분을 자신에게 맞게 바꿔주면 된다. 만일 공유기 이름이 myhome 이고 공유기 암호가 hello12345 라고 한다면 다음과 같이 바뀌게 된다.
const char * ssid = "myhome";
const char * pwd = "hello12345";
다음은 static IP 를 지정해 준다.
IPAddress local_IP(192, 168, 1, 200); // ESP32가 사용할 IP address
IPAddress gateway(192, 168, 1, 1); // Gateway IP address (공유기 IP주소)
IPAddress subnet(255, 255, 255, 0); // subnet mask
IPAddress primaryDNS(8, 8, 8, 8); // primary DNS server IP address
IPAddress secondaryDNS(8, 8, 4, 4); // secondary DNS server IP address
여기서도 물론 빨간색 부분은 자신의 환경에 맞게 바꿔줘야 한다.
* 주소 사이에 '.'이 아니고 ','를 사용하고 있음을 주의할 것
이제 setup() 에서 WiFi.config() 메소드로 위의 설정값들을 ESP32에 할당해 준다.
if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
Serial.println("STA failed to configure");
}
* 위에서 primaryDNS와 secondaryDNS 는 옵션이라 생략해도 된다.
지금까지 설명한 부분을 정리한 코드이다. 공유기 ssid는 "myhome", 공유기 password는"hello12345", ESP32 IP address는 192.168.1.200, gatewaIP(공유기IP)는192.168.1.1 인 경우의 코드이다.
#include <WiFi.h>
const char * ssid = "myhome";
const char * pwd = "hello12345";
IPAddress local_IP(192, 168, 1, 200); // ESP32가 사용할 IP address
IPAddress gateway(192, 168, 1, 1); // Gateway IP address (공유기 IP주소)
IPAddress subnet(255, 255, 255, 0); // subnet mask
IPAddress primaryDNS(8, 8, 8, 8); // primary DNS server IP address
IPAddress secondaryDNS(8, 8, 4, 4); // secondary DNS server IP address
...
void setup()
{
Serial.begin(115200);
if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
Serial.println("STA failed to configure");
}
WiFi.begin(ssid, pwd);
while (WiFi.status() != WL_CONNECTED) P
delay(500);
Serial.print(".");
}
...
}
---
다른 방법으로는 ESP32의 코드는 따로 건드리지 않고 ESP32의 MAC address를 알아내 공유기의 DHCP가 고정된 IP를 할당하도록 해 주는 방법도 있다. 하지만 이 경우 IP는 일정하지만 DHCP가 매번 동작하기 때문에 deep sleep에서 깨어나는 경우 배터리 소모를 피할 수 없다.
댓글 없음:
댓글 쓰기