IoT 기반 기상 관측소 설정은 ESP32 마이크로컨트롤러, DHT22 온도 및 습도 센서, RTC(실시간 시계) 모듈, OLED 디스플레이를 사용하여 실시간으로 환경 데이터를 모니터링하고 표시합니다.
주요 구성 요소:
1. ESP32: 이 마이크로컨트롤러는 프로젝트의 핵심으로, 센서의 데이터를 처리하고 OLED 디스플레이를 제어합니다. 내장 Wi-Fi를 통해 원격 액세스 및 모니터링을 위해 클라우드 플랫폼으로 데이터를 전송할 수도 있습니다.
2. DHT22 센서: 이 센서는 주변 온도와 습도를 측정합니다. 센서는 이 데이터를 ESP32로 전송하여 처리합니다.
3. RTC(실시간 시계) 모듈: RTC 모듈은 정확한 시간 및 날짜 정보를 제공합니다. 이는 센서 데이터에 타임스탬프를 적용하여 사용자가 시간 경과에 따른 환경 조건을 추적할 수 있도록 하는 데 중요합니다. 시계 모듈은 독립적으로 실행되므로 ESP32가 재설정되어도 정확한 시간을 유지합니다.
4. OLED 디스플레이: OLED 화면은 현재 시간, 온도, 습도와 같은 데이터를 표시하는 데 사용됩니다. 이미지에서 디스플레이는 HH:MM:SS 형식(12:34:40)으로 시간을 표시하여 RTC 모듈 사용을 나타냅니다.
작동:
이 IoT 기상 관측소는 DHT22 센서에서 실시간 온도 및 습도 데이터를 수집하는 동시에 RTC 모듈을 사용하여 현재 시간을 표시합니다. ESP32는 이 정보를 처리하여 OLED 화면에 표시합니다. ESP32는 Wi-Fi 기능을 통해 원격 모니터링 및 분석을 위해 클라우드 서비스에 데이터를 업로드할 수도 있습니다.
이 설정은 스마트 홈, 사무실 또는 야외 애플리케이션에서 날씨를 추적하는 데 이상적입니다. 컴팩트한 크기, 실시간 데이터 모니터링 및 연결성 덕분에 환경 모니터링을 위한 실용적인 솔루션입니다.
코드
#include <Wire.h>
#include <DHT.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h> // Include library for real-time clock (RTC)
// OLED display settings
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// DHT Sensor settings
#define DHTPIN 4 // Pin where the DHT sensor is connected
#define DHTTYPE DHT22 // DHT11 or DHT22
DHT dht(DHTPIN, DHTTYPE);
// RTC settings
RTC_DS3231 rtc; // Use your specific RTC module
void setup() {
Serial.begin(115200);
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
if (!rtc.begin()) {
display.println("RTC Error");
display.display();
while (1); // Loop forever
}
// Show initialization message
display.setTextSize(2);
display.setCursor(0, 0);
display.println("Smart Weather");
display.setTextSize(1);
display.setCursor(0, 30);
display.println("Initialized");
display.display();
delay(3000); // Show for 3 seconds
}
void drawDottedLine(int y) {
for (int x = 0; x < SCREEN_WIDTH; x += 2) {
display.drawPixel(x, y, SSD1306_WHITE);
}
}
void drawWeatherAnimation() {
// Simple animated cloud
for (int i = 0; i < 5; i++) {
display.fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, SSD1306_BLACK); // Clear the display
display.setCursor(30 + i, 10); // Move cloud position
display.print("TECH ZAID");
display.display(); // Refresh display
delay(100);
}
}
void loop() {
// Read humidity and temperature
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Check if readings are valid
if (isnan(humidity) || isnan(temperature)) {
display.clearDisplay();
display.setCursor(0, 0);
display.println("Failed to read");
display.display();
return;
}
// Get current time
DateTime now = rtc.now();
// Clear display for temperature
display.clearDisplay();
// Display Temperature with animation
drawWeatherAnimation(); // Show animated weather
display.setTextSize(2);
display.setCursor(0, 30);
display.print("Temp: ");
display.print(temperature);
display.print(" C");
drawDottedLine(55); // Draw dotted line below temperature
display.display(); // Refresh display
delay(2000); // Show temperature for 2 seconds
// Clear display for humidity
display.clearDisplay();
// Display Humidity with animation
drawWeatherAnimation(); // Show animated weather
display.setTextSize(2);
display.setCursor(0, 30);
display.print("Humidity: ");
display.print(humidity);
display.print(" %");
drawDottedLine(55); // Draw dotted line below humidity
display.display(); // Refresh display
delay(2000); // Show humidity for 2 seconds
// Clear display for time
display.clearDisplay();
// Display time
display.setTextSize(1);
display.setCursor(0, 0);
display.print("🕒 Time:");
display.setTextSize(2);
display.setCursor(0, 15);
display.print(now.hour());
display.print(":");
if (now.minute() < 10) {
display.print("0");
}
display.print(now.minute());
display.print(":");
if (now.second() < 10) {
display.print("0");
}
display.print(now.second());
display.display(); // Refresh display
delay(2000); // Show time for 2 seconds
}
'ESP32' 카테고리의 다른 글
ESP32 LED 제어 웹 서버 Output Web Server (13) | 2024.10.12 |
---|---|
ESP32 Bluetooth Classic과 Arduino IDE (0) | 2024.10.11 |
아두이노 Nano ESP32 사용 가이드 4 치트 시트 (8) | 2024.10.11 |
ESP32 개발 보드 시작하기 1 - Blink와 모든 정보 (17) | 2024.10.09 |
Arduino Nano ESP32 Micro Python, IoT Cloud 가이드 (6) | 2024.10.07 |
윈도우에서 ESP-IDF 사용하기 (3) | 2024.10.06 |
아두이노 Nano ESP32 사용 가이드 2 시작하기 (3) | 2024.10.06 |
아두이노 Nano ESP32 사용 가이드 1 - 모든 정보 (3) | 2024.10.05 |
더욱 좋은 정보를 제공하겠습니다.~ ^^