이 튜토리얼에서는 PC나 스마트폰의 브라우저를 사용하여 웹 인터페이스를 통해 LED를 제어하는 방법을 배울 예정입니다. 이를 위해 ESP32를 활용할 것입니다. 구체적으로, ESP32는 웹 서버로 작동하도록 프로그래밍될 것입니다. ESP32의 IP 주소가 192.168.0.2라고 가정합시다. 이것이 작동하는 방법의 세부 사항은 다음과 같습니다:
웹 브라우저에 192.168.0.2를 입력하면, 브라우저가 ESP32에게 요청을 보내고 ESP32는 LED를 제어하기 위한 켜기/끄기 버튼이 포함된 웹 페이지로 응답합니다.
마찬가지로, 웹 페이지에서 "켜기" 버튼을 클릭하거나 192.168.0.2/led1/on을 웹 브라우저에 입력하면, ESP32는 LED를 켜고 제어 웹 페이지로 응답합니다.
마찬가지로, 웹 페이지에서 "끄기" 버튼을 클릭하거나 192.168.0.2/led1/off를 웹 브라우저에 입력하면, ESP32는 LED를 끄고 제어 웹 페이지로 응답합니다.
ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.
ESP32 코드 - HTML 내용이 ESP32 코드에 내장되어 있습니다.
/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-controls-led-via-web */#include <DIYables_ESP32_WebServer.h>#define LED_PIN 18 // ESP32 pin GPIO18 connected to LEDint LED_state = LOW;// WiFi credentialsconstchar WIFI_SSID[] = "YOUR_WIFI_SSID";constchar WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";// Create web server instanceDIYables_ESP32_WebServer server;// Page handlersString getHTML() {String html = "<!DOCTYPE HTML>"; html += "<html>"; html += "<head>"; html += "<link rel='icon' href='data:,'>"; html += "</head>"; html += "<p>LED state: <span style='color: red;'>"; if (LED_state == LOW) html += "OFF"; else html += "ON"; html += "</span></p>"; html += "<a href='/led1/on'>Turn ON</a>"; html += "<br><br>"; html += "<a href='/led1/off'>Turn OFF</a>"; html += "</html>"; return html;}// home pagevoid handleHome(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) {Serial.println("ESP32 Web Server: New request received"); server.sendResponse(client, getHTML().c_str());}void handleLedOn(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) {Serial.println("ESP32 Web Server: New request received"); LED_state = HIGH;digitalWrite(LED_PIN, LED_state); server.sendResponse(client, getHTML().c_str());}void handleLedOff(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) {Serial.println("ESP32 Web Server: New request received"); LED_state = LOW;digitalWrite(LED_PIN, LED_state); server.sendResponse(client, getHTML().c_str());}voidsetup() {Serial.begin(9600);delay(1000);pinMode(LED_PIN, OUTPUT);digitalWrite(LED_PIN, LED_state);Serial.println("ESP32 Web Server");// Configure routes server.addRoute("/", handleHome); server.addRoute("/led1/on", handleLedOn); server.addRoute("/led1/off", handleLedOff);// Start web server with WiFi connection server.begin(WIFI_SSID, WIFI_PASSWORD);}voidloop() { server.handleClient();// Your code here}
Arduino IDE의 왼쪽 네비게이션 바에 있는 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다.
“DIYables ESP32 WebServer”를 검색한 다음, DIYables가 만든 DIYables ESP32 WebServer를 찾습니다.
Install 버튼을 클릭하여 DIYables ESP32 WebServer 라이브러리를 설치하세요.
위의 코드를 복사하고 Arduino IDE로 엽니다
코드 내의 와이파이 정보(SSID와 비밀번호)를 귀하의 것으로 변경하세요
Arduino IDE에서 Upload 버튼을 클릭하여 코드를 ESP32에 업로드하세요
시리얼 모니터를 엽니다
시리얼 모니터에서 결과를 확인하세요
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Connecting to WiFi...
Connected to WiFi
ESP32 Web Server's IP address: 192.168.0.2
Ln 11, Col 1
ESP32 Dev Module on COM15
2
IP 주소를 보게 될 것입니다. 예를 들어: 192.168.0.2. 이것은 ESP32 웹 서버의 IP 주소입니다.
웹 브라우저를 열고 아래 세 가지 형식 중 하나를 주소 창에 입력하세요:
192.168.0.2
192.168.0.2/led1/on
192.168.0.2/led1/off
IP 주소가 변경될 수 있으니 유의하시기 바랍니다. 시리얼 모니터에서 현재 값을 확인해 주십시오.
시리얼 모니터에서 아래 출력물도 보실 수 있습니다.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Connecting to WiFi...
Connected to WiFi
ESP32 Web Server's IP address: 192.168.0.2
ESP32 Web Server: New request recieved:
GET /
ESP32 Web Server: New request recieved:
GET /led1/on
ESP32 Web Server: New request recieved:
GET /led1/off
Ln 11, Col 1
ESP32 Dev Module on COM15
2
LED 상태 확인
아래와 같이 웹 브라우저에서 ESP32 보드의 웹 페이지를 볼 수 있습니다
웹 인터페이스를 통해 LED의 켜기/끄기를 제어할 수 있습니다.
ESP32 코드 - HTML 콘텐츠가 ESP32 코드에서 분리됩니다
그래픽 웹 페이지가 많은 양의 HTML 콘텐츠를 포함하고 있기 때문에, 이전과 같이 ESP32 코드에 포함시키는 것이 불편해집니다. 이를 해결하기 위해, ESP32 코드와 HTML 코드를 서로 다른 파일로 분리해야 합니다:
ESP32 코드는 .ino 파일에 위치할 것입니다.
HTML 코드(HTML, CSS, 및 Javascript를 포함하여)는 .h 파일에 위치할 것입니다.
사용 방법
Arduino IDE를 열고 새 스케치를 만들어주세요. 이름을 지정하세요. 예를 들어, newbiely.kr.ino
아래 코드를 복사하고 Arduino IDE로 열어주세요.
/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-controls-led-via-web */#include <DIYables_ESP32_WebServer.h>#include"index.h"// Include the index.h file#define LED_PIN 18 // ESP32 pin GPIO18 connected to LEDint LED_state = LOW;// WiFi credentialsconstchar WIFI_SSID[] = "YOUR_WIFI_SSID";constchar WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";// Create web server instanceDIYables_ESP32_WebServer server;// Page handlersString getHTML() {String html = webpage; // Use the HTML content from the index.h file html.replace("%LED_STATE%", LED_state ? "ON" : "OFF"); // update the led statereturn html;}// home pagevoid handleHome(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) {Serial.println("ESP32 Web Server: New request received"); server.sendResponse(client, getHTML().c_str());}void handleLedOn(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) {Serial.println("ESP32 Web Server: New request received"); LED_state = HIGH;digitalWrite(LED_PIN, LED_state); server.sendResponse(client, getHTML().c_str());}void handleLedOff(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) {Serial.println("ESP32 Web Server: New request received"); LED_state = LOW;digitalWrite(LED_PIN, LED_state); server.sendResponse(client, getHTML().c_str());}voidsetup() {Serial.begin(9600);delay(1000);pinMode(LED_PIN, OUTPUT);digitalWrite(LED_PIN, LED_state);Serial.println("ESP32 Web Server");// Configure routes server.addRoute("/", handleHome); server.addRoute("/led1/on", handleLedOn); server.addRoute("/led1/off", handleLedOff);// Start web server with WiFi connection server.begin(WIFI_SSID, WIFI_PASSWORD);}voidloop() { server.handleClient();// Your code here}
코드에서 WiFi 정보(SSID 및 비밀번호)를 귀하의 것으로 변경하십시오.
Arduino IDE에서 index.h 파일을 생성하려면:
시리얼 모니터 아이콘 바로 아래에 있는 버튼을 클릭하고 새 탭을 선택하거나, Ctrl+Shift+N 키를 사용하십시오.
파일 이름을 index.h로 지정하고 OK 버튼을 클릭하세요.
아래 코드를 복사하여 index.h에 붙여넣으세요.
/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-controls-led-via-web */#ifndef WEBPAGE_H#define WEBPAGE_Hconst char* webpage = R"=====(<!DOCTYPE HTML><html><head><link rel='icon' href='data:,'></head><p>LED state: <span style='color: red;'>%LED_STATE%</span></p><a href='/led1/on'>Turn ON</a><br><br><a href='/led1/off'>Turn OFF</a></html>)=====";#endif
이제 두 파일에 코드가 들어 있습니다: newbiely.kr.ino와 index.h
Arduino IDE에서 Upload 버튼을 클릭하여 ESP32에 코드를 업로드합니다
PC나 스마트폰의 웹 브라우저를 통해 이전처럼 ESP32 보드의 웹 페이지에 접속합니다. 이전 코드와 비슷한 화면을 볼 수 있을 것입니다:
※ 주의:
index.h의 HTML 컨텐츠를 수정하고 newbiely.kr.ino 파일은 건드리지 않는다면, 코드를 ESP32에 컴파일하고 업로드할 때 Arduino IDE는 HTML 컨텐츠를 업데이트하지 않을 것입니다.
이 경우에 Arduino IDE가 HTML 컨텐츠를 업데이트하게 하려면, newbiely.kr.ino 파일을 변경하세요 (예를 들어, 빈 줄을 추가하거나, 주석을 추가하는 등).