본문 바로가기

ESP32

ESP32 IoT 기반 기상 관측소

반응형

 

 

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
}

 

 

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩