1탄과 2탄에서 전기난방패널 우리엘 PC-1D 원격 제어 설치기의 재료 구매부터 실패, 그리고 추가 재료로 문제를 해결하는 과정까지 같이 달려왔죠. 이제 본격적으로 “진짜 동작하게” 만드는 단계만 남았습니다. 이번 3탄에서는 전체 구조 중에서 ESP32 → 릴레이 → 우리엘 PC-1D 구간을 ESP32 코딩으로 직접 완성해 볼 거예요.
“코딩”이라고 하니까 살짝 겁날 수도 있는데, 솔직히 말하면 대부분은 복붙 + 설정 몇 개 변경이면 끝입니다 😎 이번 글에서 ESP32를 난방 전용 미니 웹서버로 만들어 두고, 다음 4탄에서는 이 ESP32를 스마트싱스와 연동해서 앱에서 버튼 한 번으로 난방을 켜고 끄는 자동화까지 이어가 볼게요.
![[3탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기 – ESP32 코딩으로 컨트롤 완성하기 전기난방패널 우리엘 PC-1D 원격 제어 설치](https://mino7.com/wp-content/uploads/2025/12/image-171.png)
전기난방패널 우리엘 PC-1D 원격 제어 설치기
전기난방패널 우리엘 PC-1D, PC-2D 원격제어 1~4탄!
- [1탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기-재료 구매부터 실패까지
- [2탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기-재료 추가 구매부터 문제 해결
- [3탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기 – ESP32 코딩으로 컨트롤 완성하기
- [4탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기 – 스마트싱스 연동으로 난방 자동화 완성하기
1. 준비하기 – ESP32 + Arduino IDE 설치
1) 필요한 준비물 정리
| 항목 | 내용 | 비고 |
|---|---|---|
| ESP32 보드 | ESP32 DevkitC, NodeMCU-32 등 개발 보드 | USB 포트가 있는 제품 추천 |
| 릴레이 보드 | ESP32와 연결할 릴레이 모듈 (3채널 이상) | 전원, 온도+, 온도- 최소 3채널 필요 |
| USB 케이블 | ESP32 ↔ PC 연결용 | 보드에 따라 micro USB / USB-C |
| PC | Arduino IDE 설치용 (윈도우 기준) | 맥/리눅스도 가능, 화면만 조금 다름 |
2) Arduino IDE 설치
1. 브라우저에서 “Arduino IDE 다운로드” 검색 후 공식 사이트 접속
2. Windows Installer 또는 ZIP 버전 중 하나 다운로드
3. 설치 마법사의 기본 옵션으로 쭉 진행하면 완료됩니다.
[아래 그림을 클릭하면 다운로드 페이지로 넘어갑니다.]
![[3탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기 – ESP32 코딩으로 컨트롤 완성하기 image](https://mino7.com/wp-content/uploads/2025/12/image-170-1024x487.png)
2. Arduino IDE에 ESP32 보드 추가하기
1) 보드 매니저 URL 등록
ESP32를 쓰려면 먼저 보드 매니저에 ESP32 URL을 등록해야 합니다.
- Arduino IDE 실행
- 파일 > 기본 설정 메뉴 클릭
- “추가 보드 매니저 URLs” 입력란에 ESP32용 URL 추가 (기존 URL이 있다면 쉼표(,)로 구분해서 함께 입력)
2) 보드 매니저에서 ESP32 설치
- 도구 > 보드 > 보드 매니저 열기
- 검색창에 ESP32 입력
- ESP32 by Espressif Systems 항목 선택 후 “설치” 버튼 클릭
설치가 끝나면 이제 Arduino IDE에서 ESP32 보드를 선택할 수 있습니다.
![[3탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기 – ESP32 코딩으로 컨트롤 완성하기 image](https://mino7.com/wp-content/uploads/2025/12/image-172-1024x378.png)
3. ESP32 보드·포트 선택 & 새 스케치 준비
1) ESP32 보드 선택
1. 상단 메뉴에서 도구 > 보드 선택
2. “ESP32 Arduino” 카테고리 아래에서 사용하는 보드 선택 (예: ESP32 Dev Module)
2) COM 포트 선택
1. ESP32를 USB 케이블로 PC에 연결
2. 도구 > 포트에서 새로 생긴 포트(COMx)를 선택
3. 포트가 안 보이면 드라이버/케이블/USB 포트 상태를 점검
4. ESP32 난방 컨트롤 코드 전체 보기
이제 우리엘 PC-1D를 제어할 ESP32 코드를 볼 차례입니다. 아래 코드를 통째로 복사해서 Arduino IDE 새 스케치에 붙여넣고, Wi-Fi 이름/비밀번호만 본인 걸로 바꿔주면 기본 준비는 끝이에요.
※ 실제 사용 시에는 공유기 SSID/비밀번호를 꼭 본인 환경에 맞게 수정하세요!
#include <WiFi.h>
#include <WebServer.h>
// ===================== Wi-Fi 설정 =====================
const char* ssid = "YOUR_WIFI_SSID"; // 공유기 이름
const char* password = "YOUR_WIFI_PASSWORD"; // 비밀번호
// ===================== 릴레이 핀 설정 =====================
#define PIN_R1_POWER 4 // 전원 버튼
#define PIN_R1_UP 5 // 온도 올리기
#define PIN_R1_DOWN 6 // 온도 내리기
// ===================== 버튼 누르는 시간(ms) =====================
const int PRESS_POWER_MS = 500; // 전원 버튼: 0.5초
const int PRESS_TEMP_MS = 1000; // 온도 버튼: 1초
WebServer server(80);
// ===================== 공통: 릴레이 버튼 누르기 함수 =====================
void pressButton(int pin, int pressTimeMs) {
Serial.print("pressButton ON pin ");
Serial.print(pin);
Serial.print(" / time = ");
Serial.print(pressTimeMs);
Serial.println(" ms");
digitalWrite(pin, LOW); // 릴레이 ON (LED 켜짐, 접점 붙음)
delay(pressTimeMs); // 버튼 누르고 유지
digitalWrite(pin, HIGH); // 릴레이 OFF (LED 꺼짐, 접점 떨어짐)
}
// ===================== HTTP 핸들러 =====================
// 전원 버튼
void handleR1Power() {
Serial.println("[HTTP] /r1/power (Room1 Power)");
pressButton(PIN_R1_POWER, PRESS_POWER_MS);
server.send(200, "text/plain", "Room1 Power pressed");
}
// 온도 올리기
void handleR1Up() {
Serial.println("[HTTP] /r1/up (Room1 Temp UP)");
pressButton(PIN_R1_UP, PRESS_TEMP_MS);
server.send(200, "text/plain", "Room1 Temp Up pressed");
}
// 온도 내리기
void handleR1Down() {
Serial.println("[HTTP] /r1/down (Room1 Temp DOWN)");
pressButton(PIN_R1_DOWN, PRESS_TEMP_MS);
server.send(200, "text/plain", "Room1 Temp Down pressed");
}
// 상태 확인용
void handlePing() {
server.send(200, "text/plain", "OK");
}
// 404 처리
void handleNotFound() {
Serial.print("[HTTP] 404 Not Found: ");
Serial.println(server.uri());
server.send(404, "text/plain", "404 Not Found");
}
// ===================== SETUP =====================
void setup() {
Serial.begin(115200);
delay(500);
Serial.println();
Serial.println("===== ESP32 Heating Controller START =====");
// 릴레이 핀 모드 설정
pinMode(PIN_R1_POWER, OUTPUT);
pinMode(PIN_R1_UP, OUTPUT);
pinMode(PIN_R1_DOWN, OUTPUT);
// 평소 릴레이 OFF (ACTIVE LOW)
digitalWrite(PIN_R1_POWER, HIGH);
digitalWrite(PIN_R1_UP, HIGH);
digitalWrite(PIN_R1_DOWN, HIGH);
// Wi-Fi 연결
Serial.print("Wi-Fi 연결 중: ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("Wi-Fi 연결 완료!");
Serial.print("ESP32 IP 주소: ");
Serial.println(WiFi.localIP());
// HTTP 라우팅
server.on("/r1/power", handleR1Power);
server.on("/r1/up", handleR1Up);
server.on("/r1/down", handleR1Down);
server.on("/ping", handlePing);
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP 서버 시작 (포트 80)");
}
// ===================== LOOP =====================
void loop() {
server.handleClient();
}
5. 코드 구조, 블록별로 차근차근 이해하기
5-1) Wi-Fi 설정 블록
// ===================== Wi-Fi 설정 =====================
const char* ssid = "YOUR_WIFI_SSID"; // 공유기 이름
const char* password = "YOUR_WIFI_PASSWORD"; // 비밀번호
- ssid / password에 내 집 공유기 이름과 비밀번호를 그대로 적어 줍니다.
- 대소문자, 특수문자, 띄어쓰기까지 정확히 일치해야 접속이 됩니다.
- 나중에 스마트싱스도 같은 LAN 안에서 이 ESP32에 접속하게 되니, 고정된 공유기를 쓰는 게 좋아요.
5-2) 릴레이 핀 & 버튼 시간 설정
#define PIN_R1_POWER 4
#define PIN_R1_UP 5
#define PIN_R1_DOWN 6
const int PRESS_POWER_MS = 500;
const int PRESS_TEMP_MS = 1000;
- 각 릴레이 IN 핀이 ESP32의 몇 번 GPIO에 연결됐는지 적는 부분입니다.
- 실제 배선이 4, 5, 6번이 아니라면, 이 숫자를 배선에 맞게 바꿔주세요.
- PRESS_POWER_MS / PRESS_TEMP_MS는 “버튼을 얼마나 오래 누를지”를 밀리초(ms)로 지정합니다.
- 온도 버튼은 인식이 더 잘 되도록 전원 버튼보다 길게(1초) 눌러주도록 설정했습니다.
온도는 올리고 내리는걸 짧게하면 인식이 안되어서 1초로 설정을 했습니다.
단 전원은 시간이 0.2초에도 잘 동작하는데 원격이라 혹시나 해서 0.5초로 설정했습니다.
Tip: 일부 ESP32 보드는 GPIO 6~11이 플래시 메모리용이라 피하는 게 좋습니다. 사용하는 보드 핀맵 한 번 꼭 확인해 주세요.
5-3) 공통 버튼 함수: pressButton()
void pressButton(int pin, int pressTimeMs) {
Serial.print("pressButton ON pin ");
Serial.print(pin);
Serial.print(" / time = ");
Serial.print(pressTimeMs);
Serial.println(" ms");
digitalWrite(pin, LOW);
delay(pressTimeMs);
digitalWrite(pin, HIGH);
}
- “이 핀을 pressTimeMs 만큼 눌렀다가 떼라”를 공통으로 처리하는 함수입니다.
- 릴레이가 Active LOW 방식이라,
LOW = ON(눌림),HIGH = OFF(뗌)으로 동작합니다. - Serial 출력으로 어떤 핀을 몇 ms 동안 눌렀는지 로그를 남겨서, 시리얼 모니터에서 디버깅이 쉽습니다.
5-4) HTTP 핸들러: URL → 버튼 동작 매핑
void handleR1Power() {
Serial.println("[HTTP] /r1/power (Room1 Power)");
pressButton(PIN_R1_POWER, PRESS_POWER_MS);
server.send(200, "text/plain", "Room1 Power pressed");
}
- /r1/power 주소로 HTTP 요청이 들어오면 → 전원 버튼 릴레이를 0.5초 동안 눌러 줍니다.
- 마찬가지로
/r1/up은 온도 올리기,/r1/down은 온도 내리기 버튼을 눌러 줍니다. /ping은 단순히 “OK”를 반환하는 헬스 체크용 endpoint입니다.- 등록되지 않은 URL로 들어오면
handleNotFound()에서 404 응답을 돌려줍니다.
5-5) setup(): 부팅 시 한 번만 실행되는 초기 설정
void setup() {
Serial.begin(115200);
...
pinMode(PIN_R1_POWER, OUTPUT);
...
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
...
server.on("/r1/power", handleR1Power);
...
server.begin();
}
- Serial.begin(115200)으로 시리얼 통신 속도를 설정해 디버깅 로그를 볼 수 있게 합니다.
- 릴레이 핀들은 OUTPUT 모드로 지정하고, 초기값을 HIGH(꺼짐)으로 설정해 부팅 시 오동작을 막습니다.
- WiFi.begin()으로 공유기에 접속을 시도하고, 연결될 때까지 반복 대기합니다.
server.on(...)으로 각 URL과 핸들러 함수를 연결하고, server.begin()으로 HTTP 서버를 시작합니다.
5-6) loop(): 계속 돌면서 HTTP 요청 처리
void loop() {
server.handleClient();
}
- loop()에서는
server.handleClient()만 호출해도 충분합니다. - 브라우저나 스마트싱스에서 ESP32 IP로 요청이 오면, 이 함수가 알아서 적절한 핸들러를 호출합니다.
- 즉, ESP32는 항상 “요청을 기다리는 작은 난방 전용 웹서버”인 셈이에요.
6. 코드 컴파일 & 업로드, 그리고 동작 테스트
1) 컴파일 & 업로드
- 상단 왼쪽 ✔(체크) 아이콘 클릭 → 스케치 검증(컴파일)
- 에러 없이 끝나면, 오른쪽 →(화살표) 아이콘 클릭 → ESP32에 업로드
- 하단 상태창에 “Done uploading” 메시지가 뜨면 업로드 완료
2) 시리얼 모니터로 Wi-Fi 연결 확인
- 도구 > 시리얼 모니터 클릭 (또는 우측 상단 돋보기 아이콘)
- 오른쪽 하단 속도를 115200 bps로 설정
- ESP32 리셋 후, “Wi-Fi 연결 중…”, “Wi-Fi 연결 완료!”, “ESP32 IP 주소: xxx.xxx.xxx.xxx” 로그가 나오는지 확인
3) 브라우저로 직접 HTTP 테스트
1. 같은 집 와이파이에 연결된 PC/스마트폰에서 브라우저 실행
2. 주소창에 http://ESP32_IP주소/ping 입력 (예: http://192.168.0.50/ping)
3. 화면에 “OK”가 뜨면 WebServer + Wi-Fi 연결은 성공입니다 🎉
4. /r1/power, /r1/up, /r1/down도 하나씩 호출해 보며 릴레이 “딸깍” 소리가 나는지 체크해 보세요.
7. 다음 4탄에서 할 일 – 스마트싱스 연동으로 자동화까지
여기까지 오면 ESP32는 이미 우리엘 PC-1D를 위한 전용 난방 컨트롤 서버가 된 상태입니다. 이제 다음 4탄에서는 이 ESP32의 /r1/power /r1/up /r1/down 주소를 스마트싱스 Web Request + 가상 스위치와 연결해서, 앱 버튼 하나로 난방을 제어하는 완전체 자동화를 만들어 볼 거예요.
- 4탄 목표: 스마트싱스에서 난방 스위치/온도+/온도- 가상 버튼 만들기
- 각 버튼 → ESP32 URL 호출로 매핑
- 온도 센서 값을 보고 26~30도 사이로 유지하는 자동화까지 구성
하드웨어는 1·2탄에서, ESP32 코딩은 3탄에서 끝냈으니, 이제 남은 건 “앱에서 예쁘게 눌러 쓰는 것”뿐입니다. 4탄도 같이 달려봐요 🔥
관련 링크
전기난방패널 우리엘 PC-1D, PC-2D 원격제어 1~4탄!
- [1탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기-재료 구매부터 실패까지
- [2탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기-재료 추가 구매부터 문제 해결
- [3탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기 – ESP32 코딩으로 컨트롤 완성하기
- [4탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기 – 스마트싱스 연동으로 난방 자동화 완성하기
결론
이번 [3탄] 전기난방패널 우리엘 PC-1D 원격 제어 설치기 – ESP32 코딩 편에서는 ① Arduino IDE 설치 → ② ESP32 보드 추가 → ③ Wi-Fi/릴레이 핀 설정 → ④ HTTP 서버 코드 작성 → ⑤ 업로드 & 테스트까지 한 번에 쭉 따라가 봤습니다.
한 줄로 요약하면, 우리는 “URL 하나 들어오면 버튼 하나 대신 눌러주는 작은 난방 서버”를 만든 거예요. 다음 4탄에서 이 서버를 스마트싱스에 연결하면, 출근길에 스마트폰으로 난방 켜놓고 따뜻한 집에 돌아오는 삶이 펼쳐집니다 😄 여기까지 완주하셨다면, 이미 하드웨어+소프트웨어 혼종 프로젝트를 해낸 셈이니 자신감 가져도 됩니다!