아두이노 WebTemperature 예제 시각적 온도계 인터페이스 튜토리얼

개요

WebTemperature 예제는 모든 웹 브라우저에서 접근 가능한 시각적 온도계 인터페이스를 생성합니다. 아두이노 우노 R4 WiFi 및 DIYables STEM V4 IoT 교육 플랫폼을 위해 설계된 향상된 센서 모니터링 기능, 내장 온도 감지 기능 및 환경 모니터링 교육 모듈과의 원활한 통합을 갖춘 예제입니다. 시각적 피드백이 필요한 모든 온도 기반 측정을 모니터링하는 데 이상적입니다.

아두이노 webtemperature 예제 - 온도계 디스플레이 인터페이스 튜토리얼

주요 기능

  • 시각적 온도계 디스플레이: 웹 인터페이스를 통한 대화형 온도계
  • 설정 가능한 온도 범위: 단위가 포함된 사용자 정의 최솟값 및 최댓값
  • 실시간 업데이트: 수은형 애니메이션이 적용된 실시간 온도 표시
  • 다중 단위 지원: 섭씨(°C), 화씨(°F), 켈빈(K)
  • 자동 설정 처리: 생성자에서 범위와 단위를 한 번 설정
  • WebSocket 통신: 페이지 새로고침 없이 즉시 업데이트
  • 모바일 반응형: 데스크톱, 태블릿, 모바일 기기에서 완벽하게 작동
  • 전문 디자인: 매끄러운 애니메이션이 적용된 깔끔한 온도계 시각화
  • 플랫폼 확장성: 현재 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×DS18B20 Temperature Sensor (optional) 쿠팡 | 아마존
1×DHT22 Temperature/Humidity Sensor (optional) 쿠팡 | 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
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를 위한 환경 설정 튜토리얼을 참조하십시오 아두이노 우노 R4 - 소프트웨어 설치.
  • Arduino Uno R4/DIYables STEM V4 IoT 보드를 USB 케이블을 사용하여 컴퓨터에 연결합니다.
  • 컴퓨터에서 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 웹앱 의존성
  • 아두이노 IDE에서, File 예제 DIYables WebApps WebTemperature 예제를 열거나, 위의 코드를 복사하여 아두이노 IDE의 에디터에 붙여넣으세요.
/* * This example demonstrates how to create a web-base Serial.println("Starting Web Temperature Server..."); // Add web apps to server server.addApp(&homePage); server.addApp(&temperaturePage); // Set 404 Not Found page (optional - for better user experience) server.setNotFoundPage(DIYablesNotFoundPage());re display * using the DIYables WebApps library with Arduino Uno R4 WiFi. * * The library automatically detects the Arduino Uno R4 WiFi platform and * includes the appropriate abstraction layer for seamless operation. * * The web page displays a thermometer visualization that shows temperature * readings in real-time through WebSocket communication. * * Features: * - Real-time temperature display with thermometer visualization * - Configurable temperature range and units * - Auto-connecting WebSocket for seamless communication * - Mobile-responsive design with professional UI * - Automatic platform detection and abstraction * - Compatible with both WiFi and Ethernet connections * Hardware: Arduino Uno R4 WiFi or DIYables STEM V4 IoT */ #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 web app instances UnoR4ServerFactory serverFactory; DIYablesWebAppServer server(serverFactory, 80, 81); // HTTP port 80, WebSocket port 81 DIYablesHomePage homePage; DIYablesWebTemperaturePage temperaturePage(-10.0, 50.0, "°C"); // Min: -10°C, Max: 50°C // Temperature simulation variables float currentTemp = 25.0; // Starting temperature unsigned long lastUpdate = 0; void setup() { Serial.begin(9600); Serial.println("Starting Web Temperature Server..."); // Add web apps to server server.addApp(&homePage); server.addApp(&temperaturePage); // Set 404 Not Found page (optional - for better user experience) server.setNotFoundPage(DIYablesNotFoundPage()); // Set up temperature callback for value requests temperaturePage.onTemperatureValueRequested(onTemperatureValueRequested); // Start the server server.begin(WIFI_SSID, WIFI_PASSWORD); } void loop() { // Handle web server and WebSocket communications server.loop(); // Simulate temperature readings simulateTemperature(); // Send temperature update every 2 seconds if (millis() - lastUpdate >= 2000) { temperaturePage.sendTemperature(currentTemp); // Print temperature to Serial Monitor Serial.println("Temperature: " + String(currentTemp, 1) + "°C"); lastUpdate = millis(); } delay(10); // Small delay for stability } void simulateTemperature() { // Simple temperature simulation - slowly increases and decreases static bool increasing = true; if (increasing) { currentTemp += 0.1; // Increase temperature slowly if (currentTemp >= 35.0) { increasing = false; // Start decreasing when it reaches 35°C } } else { currentTemp -= 0.1; // Decrease temperature slowly if (currentTemp <= 15.0) { increasing = true; // Start increasing when it reaches 15°C } } } /** * Callback function called when web interface requests temperature value * Send current temperature value to web interface */ void onTemperatureValueRequested() { Serial.println("Temperature value requested from web interface"); // Send current temperature value (config is automatically sent by the library) temperaturePage.sendTemperature(currentTemp); } /* * Alternative setup for real temperature sensor (DS18B20 example): * * #include <OneWire.h> * #include <DallasTemperature.h> * * #define ONE_WIRE_BUS 2 * OneWire oneWire(ONE_WIRE_BUS); * DallasTemperature sensors(&oneWire); * * void setup() { * // ... existing setup code ... * sensors.begin(); * } * * float readTemperature() { * sensors.requestTemperatures(); * return sensors.getTempCByIndex(0); * } * * // In loop(), replace simulateTemperature() with: * // currentTemp = readTemperature(); */
  • 다음 줄들을 업데이트하여 코드에서 WiFi 자격 증명을 구성합니다:
const char WIFI_SSID[] = "YOUR_WIFI_NETWORK"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
  • Arduino IDE에서 Upload 버튼을 클릭하여 Arduino UNO R4/DIYables STEM V4 IoT에 코드를 업로드합니다.
  • 시리얼 모니터를 엽니다.
  • 시리얼 모니터의 결과를 확인합니다. 다음과 같습니다.
COM6
Send
Starting Web Temperature Server... INFO: Added app / INFO: Added app /web-temperature 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 Temperature: http://192.168.0.2/web-temperature ==========================================
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • 아무 것도 보이지 않으면 Arduino 보드를 재부팅하세요.
  • PC나 모바일 기기에서 웹 브라우저를 여세요.
  • 시리얼 모니터에 표시된 IP 주소를 웹 브라우저에 입력하세요.
  • 예: http://192.168.1.100
  • 아래 이미지와 같은 홈 페이지가 표시됩니다:
web temperature 앱이 포함된 아두이노 우노 R4 diyables 웹앱 홈 페이지
  • Web Temperature 링크를 클릭하면 아래와 같이 Web Temperature 앱의 UI가 표시됩니다:
아두이노 우노 R4 diyables 웹앱 웹 온도 앱
  • 또는 IP 주소 뒤에 /web-temperature를 붙여 페이지에 직접 접속할 수도 있습니다. 예: http://192.168.1.100/web-temperature
  • 실시간 온도 값을 시각적으로 표시하는 온도계 디스플레이가 나타납니다.

웹 인터페이스 기능

온도계 표시

  • 시각적 온도계: 수은 스타일 애니메이션이 적용된 클래식한 온도계 디자인
  • 온도 눈금: 구성 가능한 범위를 갖춘 선명한 눈금 표시
  • 실시간 업데이트: 부드러운 전환으로 실시간 온도 표시
  • 단위 표시: 구성된 온도 단위(°C, °F, K) 표시
  • 전문적인 디자인: 깔끔하고 교육적인 스타일의 온도계 시각화

실시간 모니터링

  • 실시간 데이터: WebSocket 연결을 통해 온도가 자동으로 업데이트됩니다.
  • 부드러운 애니메이션: 수은 수위가 읽기 사이에서 매끄럽게 움직입니다.
  • 상태 피드백: 연결 상태 표시기
  • 모바일 최적화: 모든 기기에서 터치 친화적인 인터페이스를 제공합니다.

코드 구성

온도 설정

// Configure temperature range and units DIYablesWebTemperaturePage temperaturePage(-10.0, 50.0, "°C"); // -10 to 50°C // Set up temperature value request callback temperaturePage.onTemperatureValueRequested(onTemperatureValueRequested);

온도 값 전송

void onTemperatureValueRequested() { // Read temperature from sensor (example with simulation) float currentTemp = readTemperatureSensor(); // Send to thermometer display temperaturePage.sendTemperature(currentTemp); }

온도 센서 통합

DS18B20 디지털 온도 센서

#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { sensors.begin(); // Configure temperature page for sensor range DIYablesWebTemperaturePage tempPage(-55.0, 125.0, "°C"); } float readTemperatureSensor() { sensors.requestTemperatures(); return sensors.getTempCByIndex(0); }

DHT22 온도/습도 센서

#include <DHT.h> #define DHT_PIN 2 #define DHT_TYPE DHT22 DHT dht(DHT_PIN, DHT_TYPE); void setup() { dht.begin(); // Configure for DHT22 range DIYablesWebTemperaturePage tempPage(-40.0, 80.0, "°C"); } float readTemperatureSensor() { return dht.readTemperature(); // Returns °C }

아날로그 온도 센서 (TMP36)

#define TEMP_PIN A0 float readTemperatureSensor() { int reading = analogRead(TEMP_PIN); float voltage = reading * 5.0 / 1024.0; float temperatureC = (voltage - 0.5) * 100.0; // TMP36 formula return temperatureC; }

단위 변환

다중 단위 지원

// Temperature in different units DIYablesWebTemperaturePage celsiusPage(-10.0, 50.0, "°C"); DIYablesWebTemperaturePage fahrenheitPage(14.0, 122.0, "°F"); DIYablesWebTemperaturePage kelvinPage(263.15, 323.15, "K"); // Conversion functions float celsiusToFahrenheit(float celsius) { return (celsius * 9.0/5.0) + 32.0; } float celsiusToKelvin(float celsius) { return celsius + 273.15; }

맞춤 설정 옵션

온도 범위

  • 최저 온도: 예상 최저 읽기값 설정
  • 최고 온도: 예상 최고 읽기값 설정
  • 단위: 표시할 단위 문자열(°C, °F, K 또는 사용자 정의)
  • 눈금: 온도계 눈금은 범위에 맞춰 자동으로 조정됩니다

업데이트 주기

// Control update rate to avoid overwhelming the interface unsigned long lastUpdate = 0; const unsigned long UPDATE_INTERVAL = 1000; // 1 second void loop() { server.loop(); if (millis() - lastUpdate >= UPDATE_INTERVAL) { // Update temperature display lastUpdate = millis(); } }

일반적인 사용 사례

교육 프로젝트

  • 기상 모니터링: 실내/실외 온도 측정
  • 물리학 실험: 열전달, 열역학
  • 환경 과학: 기후 모니터링, 온실 제어
  • 전자 공학 학습: 센서 인터페이스, 데이터 시각화

실용적 응용

  • 가정 자동화: HVAC 제어, 에너지 모니터링
  • 온실 제어: 식물 생장 최적화
  • 식품 안전: 저장용 온도 모니터링
  • 산업: 공정 모니터링, 품질 관리

문제 해결

온도 업데이트가 되지 않음

  • 와이파이 연결 및 웹소켓 상태 확인
  • 센서 배선 및 전원 공급 확인
  • 콜백 함수가 올바르게 설정되었는지 확인
  • 시리얼 모니터에서 센서 값을 확인

잘못된 온도 값들

  • 센서 보정 및 정확도 확인
  • 아날로그 센서용 전압 레퍼런스 확인
  • 올바른 센서 초기화 확인
  • 기본 코드로 센서를 독립적으로 테스트

센서 연결 문제

  • 배선 연결 확인(전원, 접지, 데이터)
  • 디지털 센서용 풀업 저항 확인
  • 멀티미터로 센서의 정상 작동 여부를 테스트
  • 센서 라이브러리 설치 및 호환성 확인

고급 기능

다중 온도 센서

여러 위치를 별도의 온도계로 모니터링:

DIYablesWebTemperaturePage indoorTemp(-10.0, 40.0, "°C"); DIYablesWebTemperaturePage outdoorTemp(-30.0, 50.0, "°C"); DIYablesWebTemperaturePage waterTemp(0.0, 100.0, "°C"); server.addApp(&indoorTemp); server.addApp(&outdoorTemp); server.addApp(&waterTemp);

온도 로깅

역사적 온도 데이터용 Web Plotter와 결합:

// Send same value to both thermometer and plotter temperaturePage.sendTemperature(currentTemp); plotterPage.sendData("Temperature", currentTemp);

경보 시스템

온도 경보를 구현:

void checkTemperatureAlerts(float temp) { if (temp > 35.0) { Serial.println("⚠️ High temperature alert!"); // Send alert via web interface } else if (temp < 5.0) { Serial.println("🧊 Low temperature alert!"); // Send alert via web interface } }

교육적 통합

과학·기술·공학·수학 학습 목표

  • 온도 물리학: 열 개념 이해
  • 센서 기술: 디지털 및 아날로그 센서 학습
  • 데이터 시각화: 실시간 데이터 표시 기법
  • 프로그래밍: 콜백 함수, 센서 통합

교실 활동

  • 센서 비교: 서로 다른 온도 센서 유형을 비교합니다
  • 보정 연습: 측정 정확도 원리 배우기
  • 환경 모니터링: 시간에 따른 온도 변화 추적
  • 시스템 통합: 다른 환경 센서와 결합

과학 실험

  • 열전달: 실험 중 온도 변화 모니터링
  • 상 변화: 용융/비등 중 온도 관찰
  • 단열 시험: 단열 효과 비교
  • 기후 연구: 장기간 온도 모니터링

이 예제는 온도 모니터링과 시각화를 위한 포괄적인 기반을 제공하며, 교육용과 실용적인 환경 모니터링 애플리케이션 모두에 적합합니다.