아두이노 WebMonitor 예제 웹 기반 시리얼 모니터 튜토리얼

개요

WebMonitor 예제는 전통적인 시리얼 모니터를 네트워크에 연결된 모든 기기에서 접근 가능한 웹 기반 인터페이스로 대체합니다. Arduino Uno R4 WiFi 및 DIYables STEM V4 IoT용으로 설계된 교육 플랫폼은 향상된 IoT 기능, 내장 센서 모니터링, 그리고 교육 생태계와의 원활한 통합을 제공합니다.

아두이노 webmonitor 예제 - 웹 기반 시리얼 모니터 튜토리얼

특징

  • 실시간 시리얼 출력: 브라우저에서 Arduino 메시지를 즉시 확인
  • 명령 입력: 웹 인터페이스에서 Arduino로 명령 전송
  • 다크 테마: 눈에 편안한 터미널 스타일 인터페이스
  • 자동 스크롤: 최신 메시지로 자동 스크롤
  • 타임스탬프: 모든 메시지에 타임스탬프가 포함됨
  • 명령 기록: 화살표 키로 이전 명령으로 이동
  • 지우기 기능: 모니터 디스플레이를 지우기
  • 복사/붙여넣기: 전체 텍스트 선택 및 복사 지원
  • 플랫폼 확장 가능: 현재 Arduino Uno R4 WiFi에 대해 구현되어 있지만 다른 하드웨어 플랫폼으로 확장 가능. 자세한 내용은 DIYables_WebApps_ESP32 참조

준비물

1×아두이노 우노 R4 와이파이 쿠팡 | 아마존
1×(또는) DIYables STEM V4 IoT 쿠팡 | 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×(추천) 아두이노 우노 R4용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 전원 분배기 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

설치 지침

빠른 단계

다음 지침을 단계별로 따라가십시오:

  • 이것이 Arduino Uno R4 WiFi/DIYables STEM V4 IoT를 처음 사용하는 경우, Arduino IDE에서 Arduino Uno R4 WiFi/DIYables STEM V4 IoT용 환경 설정 튜토리얼을 참조하십시오 [BASE_URL/tutorials/arduino-uno-r4/arduino-uno-r4-software-installation].
  • USB 케이블을 사용하여 Arduino Uno R4/DIYables STEM V4 IoT 보드를 컴퓨터에 연결합니다.
  • 컴퓨터에서 Arduino IDE를 실행합니다.
  • 적합한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi)와 COM 포트를 선택합니다.
  • Arduino IDE의 왼쪽 바에서 Libraries 아이콘으로 이동합니다.
  • "DIYables WebApps"를 검색한 다음, DIYables에서 제작한 DIYables WebApps 라이브러리를 찾습니다.
  • 라이브러리를 설치하려면 Install 버튼을 클릭합니다.
아두이노 우노 R4 diyables 웹앱 라이브러리
  • 다른 라이브러리 의존성 설치를 요청받게 됩니다.
  • 모든 라이브러리 의존성을 설치하려면 Install All 버튼을 클릭하십시오.
아두이노 우노 R4 diyables webapps 의존성
  • Arduino IDE에서, File 예제 DIYables WebApps WebMonitor 예제로 이동하거나, 위의 코드를 복사하여 Arduino IDE의 에디터에 붙여넣으세요
/* * DIYables WebApp Library - Web Monitor Example * * This example demonstrates the Web Monitor feature: * - Real-time serial monitor in web browser * - Send commands from browser to Arduino * - Automatic message timestamping * * Hardware: Arduino Uno R4 WiFi or DIYables STEM V4 IoT * * Setup: * 1. Update WiFi credentials below * 2. Upload the sketch to your Arduino * 3. Open Serial Monitor to see the IP address * 4. Navigate to http://[IP_ADDRESS]/webmonitor */ #include <DIYablesWebApps.h> // WiFi credentials - UPDATE THESE WITH YOUR NETWORK const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // Create WebApp server and page instances UnoR4ServerFactory serverFactory; DIYablesWebAppServer webAppsServer(serverFactory, 80, 81); DIYablesHomePage homePage; DIYablesWebMonitorPage webMonitorPage; // Demo variables unsigned long lastMessage = 0; int messageCount = 0; void setup() { Serial.begin(9600); delay(1000); Serial.println("DIYables WebApp - Web Monitor Example"); // Add home and web monitor pages webAppsServer.addApp(&homePage); webAppsServer.addApp(&webMonitorPage); // Optional: Add 404 page for better user experience webAppsServer.setNotFoundPage(DIYablesNotFoundPage()); // Initialize LED for status indication pinMode(LED_BUILTIN, OUTPUT); // Start the WebApp server if (!webAppsServer.begin(WIFI_SSID, WIFI_PASSWORD)) { while (1) { Serial.println("Failed to start WebApp server!"); delay(1000); } } // Set up monitor callback for incoming commands webMonitorPage.onWebMonitorMessage([](const String& message) { Serial.println("Command from web: " + message); // Process simple commands if (message == "LED_ON") { digitalWrite(LED_BUILTIN, HIGH); webMonitorPage.sendToWebMonitor("LED turned ON"); return; } if (message == "LED_OFF") { digitalWrite(LED_BUILTIN, LOW); webMonitorPage.sendToWebMonitor("LED turned OFF"); return; } if (message == "STATUS") { String status = "Arduino Status: LED=" + String(digitalRead(LED_BUILTIN) ? "ON" : "OFF"); webMonitorPage.sendToWebMonitor(status); return; } if (message == "HELP") { webMonitorPage.sendToWebMonitor("Available commands: LED_ON, LED_OFF, STATUS, HELP"); return; } webMonitorPage.sendToWebMonitor("Unknown command: " + message); }); // Send welcome message webMonitorPage.sendToWebMonitor("Arduino Web Monitor ready!"); webMonitorPage.sendToWebMonitor("Type HELP for available commands"); } void loop() { // Handle WebApp server communications webAppsServer.loop(); // Send periodic updates to web monitor if (millis() - lastMessage > 5000) { // Every 5 seconds messageCount++; // Send sensor readings or status updates String message = "Message #" + String(messageCount) + " - Uptime: " + String(millis() / 1000) + "s"; webMonitorPage.sendToWebMonitor(message); lastMessage = millis(); } // Add your main application code here delay(10); }
  • 코드에서 WiFi 자격 증명을 구성하려면 다음 줄들을 업데이트하십시오:
const char WIFI_SSID[] = "YOUR_WIFI_NETWORK"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
  • 아두이노 IDE에서 Upload 버튼을 클릭하여 Arduino UNO R4/DIYables STEM V4 IoT에 코드를 업로드합니다.
  • 시리얼 모니터를 엽니다.
  • 시리얼 모니터에서 결과를 확인합니다. 아래와 같습니다.
COM6
Send
DIYables WebApp - Web Monitor Example INFO: Added app / INFO: Added app /web-monitor DIYables WebApp Library Platform: Arduino Uno R4 WiFi Network connected! IP address: 192.168.0.2 HTTP server started on port 80 Configuring WebSocket server callbacks... WebSocket server started on port 81 WebSocket URL: ws://192.168.0.2:81 WebSocket server started on port 81 ========================================== DIYables WebApp Ready! ========================================== 📱 Web Interface: http://192.168.0.2 🔗 WebSocket: ws://192.168.0.2:81 📋 Available Applications: 🏠 Home Page: http://192.168.0.2/ 📊 Web Monitor: http://192.168.0.2/web-monitor ==========================================
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • 아무 것도 보이지 않으면 Arduino 보드를 재부팅하십시오.
  • 표시된 IP 주소를 적어 두고, 이 주소를 스마트폰이나 PC의 웹 브라우저 주소창에 입력하십시오.
  • 예: http://192.168.0.2
  • 아래 이미지와 같은 홈 페이지가 표시됩니다:
아두이노 우노 R4 diyables 웹앱 홈 페이지 웹 모니터 앱 포함
  • Web Monitor 링크를 클릭하면 아래와 같이 Web Monitor 앱의 UI가 표시됩니다.
아두이노 우노 R4 diyables 웹앱 웹 모니터 앱
  • 또한 IP 주소에 /web-monitor를 붙여 페이지에 직접 접근할 수 있습니다. 예를 들어: http://192.168.0.2/web-monitor
  • 웹 모니터 인터페이스를 통해 Arduino에 명령을 보내고 Arduino의 실시간 시리얼 출력을 확인해 보세요.

사용 방법

시리얼 출력 보기

  1. 웹 모니터 인터페이스를 엽니다
  2. 아두이노가 5초마다 상태 메시지를 자동으로 보냅니다
  3. 모든 Serial.println() 출력이 모니터에 나타납니다
  4. 메시지에 타임스탬프가 자동으로 추가됩니다

명령 보내기

  1. 하단의 입력 필드에 명령을 입력합니다
  2. 엔터를 누르거나 전송 버튼을 클릭합니다
  3. 아두이노가 명령을 처리하고 응답합니다

내장 명령어

예제에는 이러한 시연 명령이 포함되어 있습니다:

LED 제어

  • "led on" → 내장 LED를 켭니다
  • "led off" → 내장 LED를 끕니다
  • "led toggle" → LED 상태를 토글합니다
  • "blink" → LED를 3회 깜빡입니다

시스템 명령

  • "status" → 아두이노의 상태와 가동 시간을 표시합니다
  • "help" → 사용 가능한 명령어를 나열합니다
  • "reset counter" → 메시지 카운터를 재설정합니다
  • "memory" → 가용 메모리 정보를 표시합니다

디버그 명령어

  • "test" → 테스트 메시지를 보냅니다
  • "echo [message]" → 입력한 메시지를 그대로 다시 전송합니다
  • "repeat [n] [message]" → 메시지를 n번 반복합니다

인터페이스 기능

키보드 단축키

  • Enter 키 → 명령 보내기
  • 위/아래 화살표 키 → 명령 기록 탐색
  • Ctrl+L → 모니터 화면 지우기(구현된 경우)
  • Ctrl+A → 모든 텍스트 선택

모니터 제어

  • 자동 스크롤 → 새 메시지로 자동으로 스크롤합니다
  • 지우기 → 모니터 화면을 지웁니다
  • 복사 → 선택한 텍스트를 클립보드에 복사

창의적 맞춤화 - 고급 디버깅 도구 만들기

이 웹 모니터 예제를 확장하여 프로젝트를 위한 강력한 디버깅 및 제어 인터페이스를 만드세요! 맞춤 명령, 센서 모니터링 및 실시간 데이터 시각화를 추가하여 당신의 창의적 필요에 맞추세요.

코드 구조

주요 구성 요소

  1. WebApp Server: HTTP 및 WebSocket 연결을 처리합니다
  2. Monitor Page: 터미널 스타일의 웹 인터페이스를 제공합니다
  3. Message Handler: 수신된 명령을 처리합니다
  4. Serial Bridge: 시리얼 출력을 웹 인터페이스로 전달합니다

주요 기능

// Handle commands from web interface void handleWebCommand(String command, String clientId) { // Process command and execute actions } // Send message to web monitor void sendToWebMonitor(String message) { // Forward message via WebSocket }

사용자 정의 명령 추가

새 명령을 추가하려면 handleWebCommand 함수를 수정하십시오:

if (command.startsWith("your_command")) { // Extract parameters String param = command.substring(12); // After "your_command" // Execute your action digitalWrite(LED_BUILTIN, HIGH); // Send response sendToWebMonitor("Command executed: " + param); }

실용적 응용

개발 및 디버깅

void loop() { // Debug sensor readings int sensorValue = analogRead(A0); sendToWebMonitor("Sensor A0: " + String(sensorValue)); // Debug variables sendToWebMonitor("Loop count: " + String(loopCount++)); delay(1000); }

원격 시스템 모니터링

void checkSystemHealth() { // Monitor memory int freeMemory = getFreeMemory(); sendToWebMonitor("Free memory: " + String(freeMemory) + " bytes"); // Monitor sensors float temperature = getTemperature(); sendToWebMonitor("Temperature: " + String(temperature) + "°C"); // Monitor connectivity if (WiFi.status() == WL_CONNECTED) { sendToWebMonitor("WiFi: Connected (RSSI: " + String(WiFi.RSSI()) + ")"); } else { sendToWebMonitor("WiFi: Disconnected"); } }

구성 관리

// Handle configuration commands if (command.startsWith("config ")) { String setting = command.substring(7); if (setting.startsWith("interval ")) { int interval = setting.substring(9).toInt(); updateInterval = interval * 1000; // Convert to milliseconds sendToWebMonitor("Update interval set to " + String(interval) + " seconds"); } if (setting == "save") { saveConfigToEEPROM(); sendToWebMonitor("Configuration saved to EEPROM"); } }

고급 기능

메시지 필터링

메시지 유형 추가 및 필터링:

enum MessageType { INFO, WARNING, ERROR, DEBUG }; void sendToWebMonitor(String message, MessageType type = INFO) { String prefix; switch(type) { case WARNING: prefix = "[WARN] "; break; case ERROR: prefix = "[ERROR] "; break; case DEBUG: prefix = "[DEBUG] "; break; default: prefix = "[INFO] "; } webMonitorPage.sendMessage(prefix + message); }

명령 구문 분석

정교한 명령어 구문 파싱 구현:

struct Command { String name; String parameters[5]; int paramCount; }; Command parseCommand(String input) { Command cmd; int spaceIndex = input.indexOf(' '); if (spaceIndex > 0) { cmd.name = input.substring(0, spaceIndex); // Parse parameters... } else { cmd.name = input; cmd.paramCount = 0; } return cmd; }

데이터 로깅

모니터 데이터를 SD 카드 또는 EEPROM에 기록:

#include <SD.h> void logMessage(String message) { File logFile = SD.open("monitor.log", FILE_WRITE); if (logFile) { logFile.print(millis()); logFile.print(": "); logFile.println(message); logFile.close(); } }

문제 해결

일반적인 문제

1. 웹 모니터에 출력 없음

  • Setup()에서 Serial.begin()가 호출되는지 확인합니다
  • 웹소켓 연결을 확인합니다(녹색 상태 표시)
  • 브라우저 콘솔에서 오류를 확인합니다

2. 명령이 작동하지 않음

  • 명령이 지정된 대로 정확하게 수행되도록 보장합니다
  • 명령의 대소문자 구분 여부를 확인합니다
  • 모니터에서 응답 메시지를 확인합니다

3. 인터페이스 로딩이 느립니다

  • 와이파이 신호 강도 확인
  • 메시지 전송 빈도 감소
  • 브라우저 캐시 지우기

4. 웹소켓 연결 해제

  • 네트워크 안정성 점검
  • 메시지 크기 축소
  • 재연결 로직 구현

디버깅 팁

자세한 디버깅 활성화:

#define DEBUG_WEBMONITOR 1 #if DEBUG_WEBMONITOR #define DEBUG_PRINT(x) Serial.print(x) #define DEBUG_PRINTLN(x) Serial.println(x) #else #define DEBUG_PRINT(x) #define DEBUG_PRINTLN(x) #endif

웹소켓 상태 모니터링:

void checkWebSocketStatus() { if (server.getClientCount() > 0) { sendToWebMonitor("WebSocket clients connected: " + String(server.getClientCount())); } }

보안 고려사항

명령 유효성 검사

항상 수신되는 명령을 검증하십시오:

bool isValidCommand(String command) { // Check command length if (command.length() > 100) return false; // Check for dangerous characters if (command.indexOf("\\") >= 0 || command.indexOf("/") >= 0) return false; // Check against whitelist String allowedCommands[] = {"led", "status", "help", "test"}; String cmdName = command.substring(0, command.indexOf(' ')); for (String allowed : allowedCommands) { if (cmdName.equals(allowed)) return true; } return false; }

접근 제어

기본 인증 구현:

bool isAuthorized(String clientId) { // Check client authorization return authorizedClients.indexOf(clientId) >= 0; }

통합 예제

센서 모니터링 시스템

void monitorSensors() { static unsigned long lastSensorRead = 0; if (millis() - lastSensorRead > 5000) { // Read multiple sensors int light = analogRead(A0); int temp = analogRead(A1); int humidity = analogRead(A2); // Send formatted data String data = "Sensors - Light: " + String(light) + ", Temp: " + String(temp) + ", Humidity: " + String(humidity); sendToWebMonitor(data); lastSensorRead = millis(); } }

홈 자동화 모니터

void monitorHome() { // Door sensors if (digitalRead(DOOR_SENSOR) == HIGH) { sendToWebMonitor("ALERT: Front door opened"); } // Motion detection if (digitalRead(PIR_SENSOR) == HIGH) { sendToWebMonitor("Motion detected in living room"); } // Environmental monitoring float temp = dht.readTemperature(); if (temp > 25.0) { sendToWebMonitor("WARNING: Temperature high (" + String(temp) + "°C)"); } }

다음 단계

WebMonitor 예제를 완전히 숙달한 후에 시도해 보세요:

  1. 채팅 - 대화형 커뮤니케이션을 위한
  2. DigitalPins - 출력 제어를 위한
  3. Slider - 아날로그 값 제어를 위한
  4. MultipleWebApps - 모니터링과 제어를 결합

지원

추가 도움이 필요하신 경우:

  • API 레퍼런스 문서를 확인하세요
  • DIYables 튜토리얼 방문: https://newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-diyables-webapps
  • 아두이노 커뮤니티 포럼