ESP32

DHT11 센서를 사용한 ESP32 BLE 온도 및 습도 모니터링 시스템

지구빵집 2024. 4. 2. 07:03
반응형

 

DHT11 센서를 사용한 ESP32 BLE 온도 및 습도 모니터링 시스템

 

목차

  1. 소개
  2. 구성 요소
  3. ESP32 BLE DHT11 모니터링 시스템이란?
  4. 어떻게 작동하나요?
  5. ESP32 BLE 온도 모니터링 시스템의 장점
  6. ESP32 BLE DHT11 모니터링 시스템의 애플리케이션
  7. DHT11의 사양
  8. DHT11 작동 방식
  9. DHT11의 애플리케이션
  10. BLE 안드로이드 애플리케이션 소개
  11. ESP32 BLE 온도 모니터링 시스템 회로도:
  12. DHT11 라이브러리 설치:
  13. ESP32 BLE 온도 모니터링 시스템 프로그램
  14. 실습 데모:
  15. 결론
  16. 온도 모니터링 시스템 비디오:

 

소개:

이것은 나의 세 번째 ESP32 BLE 프로젝트입니다. 첫 번째 프로젝트에서는 내장된 ESP32의 BLE를 사용하여 LED를 제어했습니다. 두 번째 프로젝트에서는 RSSI(Received Signal Strength Indicator)와 관련된 신기술을 사용했습니다. RSSI의 도움으로 이어버드가 ESP32 BLE의 RSSI 범위 내에 들어올 때마다 LED가 켜지는 제어 메커니즘을 구현했습니다. 하지만 이번 프로젝트에서는 ESP32 BLE 및 DHT11 센서를 기반으로 하는 온도 및 습도 모니터링 시스템을 구축하려고 합니다. 이를 위해 저는 나만의 맞춤형 Android 애플리케이션을 디자인했습니다.

 



온도 모니터링 시스템

사물 인터넷(IoT)의 출현은 우리가 환경과 상호 작용하는 방식을 혁신하여 효율성과 접근성을 향상시키는 수많은 스마트 솔루션을 탄생시켰습니다. 이러한 맥락에서 DHT11을 사용하는 ESP32 BLE 온도 및 습도 모니터링 시스템은 특히 환경 모니터링 영역에서 선구적인 혁신으로 돋보입니다. 이 기사에서는 ESP32 마이크로컨트롤러를 DHT11 센서 및 Bluetooth 저에너지(BLE)와 조화롭게 통합하여 Android 애플리케이션을 통해 실시간 데이터 모니터링을 제공하는 최첨단 기술인 이 시스템의 복잡한 세부 사항을 살펴봅니다.


이 시스템의 핵심에는 Wi-Fi 및 Bluetooth 기능이 내장된 다용도의 강력한 마이크로 컨트롤러인 ESP32가 있어 IoT 프로젝트에 이상적인 선택입니다. 온도 및 습도 측정 능력이 뛰어난 것으로 알려진 DHT11 센서와 결합하면 ESP32는 환경 데이터 수집을 위한 강력한 도구로 변모합니다. 이 시스템의 독창성은 낮은 전력 소비와 높은 전송 효율성으로 선호되는 기술인 BLE를 통해 이 데이터를 원활하게 전송할 수 있는 능력에 있으며 IoT 애플리케이션에 완벽하게 적합합니다.

BLE와 ESP32 및 DHT11의 통합은 맞춤형으로 설계된 Android 애플리케이션을 통해 환경 매개변수를 실시간으로 모니터링할 수 있는 길을 열어줍니다. 이 애플리케이션은 사용자 인터페이스 역할을 하여 사용자가 스마트폰에서 수집된 데이터에 쉽게 액세스하고, 보고, 분석할 수 있도록 해줍니다. 즉각적인 통찰력을 제공하고 현재 환경 조건에 따라 즉각적인 의사 결정을 가능하게 하는 실시간 측면이 특히 중요합니다.

또한, 이 시스템은 기기의 상호 연결성과 정보 접근의 용이성이 무엇보다 중요한 IoT 시대의 스마트 솔루션을 보여줍니다. 가정과 사무실에서 산업 환경에 이르기까지 다양한 환경에서 구현되므로 다양성과 적응성이 강조됩니다. ESP32 BLE DHT11 온도 및 습도 모니터링 시스템은 사용자가 실시간 데이터를 기반으로 주변 환경을 모니터링하고 조정할 수 있도록 하여 환경 인식을 향상시킬 뿐만 아니라 에너지 효율성과 지속 가능성에도 기여합니다.

이 문서의 목적은 시스템 아키텍처, 구성 요소 및 데이터 전송을 위해 ESP32를 DHT11 센서 및 BLE와 통합하는 단계별 프로세스에 대한 포괄적인 개요를 제공하는 것입니다. 또한 Android 애플리케이션 개발에 대해 자세히 알아보고 이 시스템을 실시간 데이터 모니터링을 위한 스마트하고 사용자 친화적인 솔루션으로 만드는 주요 특징과 기능을 강조합니다. 취미로 즐기는 사람, IoT 분야의 전문가 또는 단순히 스마트 기술 솔루션에 관심이 있는 사람이든 간에 ESP32 BLE DHT11 온도 모니터링 시스템에 대한 이 탐구는 환경 모니터링의 미래를 향한 계몽적인 여정이 될 것을 약속합니다.

구성요소:

 

ESP32 마이크로컨트롤러
DHT11
블루투스 저에너지(BLE)
연결선
브레드보드

*참고: 제휴사 링크입니다. 이 링크를 통해 구성 요소를 구매하시면 제가 수수료를 받을 수 있습니다. 이런 식으로 지원해 주시면 감사하겠습니다!

ESP32 BLE DHT11 모니터링 시스템이란 무엇입니까?


ESP32 BLE 온도 및 습도 모니터링 시스템은 ESP32 마이크로 컨트롤러와 DHT11 센서를 사용하여 데이터를 수집하고 전송하는 무선 모니터링 솔루션입니다. ESP32 마이크로컨트롤러는 Wi-Fi와 Bluetooth 기능을 결합한 강력하고 다재다능한 장치로, IoT 애플리케이션에 이상적입니다.

반면 DHT11 센서는 정확하고 신뢰할 수 있는 판독값을 제공하는 디지털 온도 및 습도 센서입니다. 이 두 구성 요소를 결합하면 다양한 설정에서 사용할 수 있는 강력한 모니터링 시스템이 만들어집니다.

어떻게 작동하나요?


ESP32 BLE DHT11 온도 모니터링 시스템은 DHT11 센서에서 데이터를 수집하고 BLE(Bluetooth Low Energy) 기술을 사용하여 무선으로 전송하는 방식으로 작동합니다. ESP32 마이크로 컨트롤러는 중앙 허브 역할을 하여 센서에서 데이터를 수집하고 이를 스마트폰이나 컴퓨터와 같은 연결된 장치로 전송합니다.

데이터가 전송되면 사용자 친화적인 인터페이스에 표시되어 사용자가 실시간으로 온도와 습도 수준을 모니터링할 수 있습니다. 이를 통해 사용자는 집의 온도 조절 장치를 조정하든 산업 환경의 조건을 최적화하든 수집된 데이터를 기반으로 정보에 입각한 결정을 내릴 수 있습니다.

ESP32 BLE 온도 모니터링 시스템의 장점

 

ESP32 BLE DHT11 온도 모니터링 시스템을 사용하면 여러 가지 이점이 있습니다.

 

  • 실시간 데이터: 이 시스템을 사용하면 실시간 데이터에 액세스할 수 있어 온도와 습도 수준의 변화를 모니터링할 수 있습니다.
  • 무선 연결: BLE 기술을 사용하면 무선 연결이 가능해 번거로운 전선과 케이블이 필요하지 않습니다.
  • 쉬운 설치: ESP32 BLE DHT11 온도 및 습도 모니터링 시스템은 설치가 쉽고 몇 분 안에 설정할 수 있습니다.
  • 비용 효율성: 다른 모니터링 시스템과 비교할 때 ESP32 BLE DHT11 모니터링 시스템은 비용 효율적이므로 주거용 및 산업용 모두에 적합한 저렴한 솔루션입니다.
  • 사용자 친화적인 인터페이스: 시스템에서 수집된 데이터는 사용자 친화적인 인터페이스로 표시되므로 쉽게 해석하고 분석할 수 있습니다.

 

ESP32 BLE DHT11 모니터링 시스템의 응용


ESP32 BLE DHT11 온도 및 습도 모니터링 시스템은 다양한 용도로 사용됩니다.

홈 오토메이션: 이 시스템을 통해 주택 소유자는 집의 온도와 습도 수준을 모니터링하고 제어하여 최적의 편안함을 보장할 수 있습니다.

산업 환경: 이 시스템은 산업 환경에서 온도 및 습도 수준을 모니터링하여 생산 공정을 위한 최적의 조건을 유지하는 데 사용할 수 있습니다.

농업: 농부들은 시스템을 사용하여 온실의 온도와 습도 수준을 모니터링하여 식물 성장을 위한 최적의 조건을 보장할 수 있습니다.

데이터 센터: 이 시스템은 데이터 센터에서 온도 및 습도 수준을 모니터링하여 장비 고장 및 가동 중지 시간을 방지하는 데 사용할 수 있습니다.

DHT11의 사양

 

DHT11은 다양한 전자 프로젝트에 널리 사용되는 인기 있고 비용 효율적인 온도 및 습도 센서입니다.

DHT11 센서는 온도와 상대습도를 측정할 수 있는 디지털 센서입니다. DHT11의 주요 사양은 다음과 같습니다.

온도 범위: 0°C ~ 50°C
습도 범위: 20% ~ 90%
온도 정확도: ±2°C
습도 정확도: ±5%
작동 전압: 3.3~5V
전류 소비: 최대 2.5mA
인터페이스: 디지털

 

 

DHT11의 작동 원리


DHT11 센서는 정전식 습도 센서와 서미스터를 사용하여 주변 환경의 온도와 습도를 측정합니다. 센서의 아날로그 판독값을 디지털 신호로 변환하는 마이크로컨트롤러가 내장되어 있어 마이크로컨트롤러나 기타 디지털 장치와 쉽게 인터페이스할 수 있습니다.

DHT11 온도 및 습도는 단선, 양방향 직렬 프로토콜을 사용하여 외부 장치와 통신합니다. 통신 프로토콜은 비교적 간단하므로 초보자와 애호가에게 적합합니다.

DHT11은 마이크로컨트롤러로부터 데이터 요청을 받으면 데이터 수집 프로세스를 시작합니다. 먼저 온도를 측정한 다음 습도를 측정합니다. 센서가 한 번의 측정 주기를 완료하는 데 약 2초가 걸립니다.

DHT11의 데이터는 40비트 데이터 스트림으로 전송됩니다. 데이터 스트림은 온도 및 습도 판독값의 정수 부분과 소수 부분은 물론 데이터 무결성을 보장하는 체크섬으로 구성됩니다.

DHT11의 응용


DHT11 센서는 다음을 포함한 다양한 분야에서 응용됩니다.

홈 오토메이션 시스템
기상 관측소
온실
공업 자동화
HVAC 시스템


저렴한 비용, 사용 용이성 및 안정적인 성능으로 인해 애호가, 학생 및 전문가 모두에게 인기가 있습니다.

BLE 안드로이드 애플리케이션 정보:

 

 

온도 모니터링 시스템

 


이 맞춤형 Android Studio 애플리케이션은 ESP32 BLE 온도 모니터링 시스템과 원활하게 작동하도록 설계되었습니다. 사용자가 Android 장치를 ESP32 장치에 쉽게 연결하고 실시간 온도 및 습도 데이터를 볼 수 있는 사용자 친화적인 인터페이스를 제공합니다.

이 애플리케이션을 사용하면 사용자는 집, 사무실 또는 ESP32 장치가 설치된 기타 장소의 온도 및 습도 수준을 모니터링할 수 있습니다. 이 애플리케이션은 정확하고 신뢰할 수 있는 데이터를 제공하므로 사용자는 현재 환경 조건에 따라 정보에 입각한 결정을 내릴 수 있습니다.

ESP32 BLE DHT11 온도 및 습도 모니터링 시스템은 주변 환경에서 최적의 편안함과 안전을 보장하려는 사람들을 위한 훌륭한 도구입니다. 아기 방, 온실, 서버실의 온도와 습도 수준을 모니터링하려는 경우 이 애플리케이션을 사용하면 됩니다.

직관적인 디자인과 사용하기 쉬운 기능을 갖춘 이 맞춤형 Android Studio 애플리케이션을 통해 사용자는 온도와 습도에 편리하게 액세스하고 모니터링할 수 있습니다. 원활한 환경을 제공하여 사용자가 항상 연결 상태를 유지하고 환경에 대한 정보를 얻을 수 있습니다.

애블리케이 다운로드:


ESP32 BLE 온도 모니터링 시스템 회로 다이어그램:

 


온도 모니터링 시스템


DHT11 센서는 ESP32 마이크로컨트롤러와 인터페이스되어 ESP32 내장 BLE를 통해 온도 및 습도와 같은 환경 조건을 모니터링합니다. DHT11의 신호 핀은 ESP32의 GPIO 32에 연결되어 있어 마이크로컨트롤러가 센서로부터 온도 및 습도 데이터를 수신할 수 있습니다. DHT11의 접지 핀은 ESP32의 접지 핀 중 하나에 연결되어 전류와 전체 회로에 대한 공통 기준점을 보장합니다. DHT11의 VCC 핀은 센서에 전원을 공급하는 ESP32의 3.3V 출력에 연결됩니다.

이 설정을 통해 ESP32는 DHT11 센서에서 캡처한 환경 데이터를 읽도록 프로그래밍됩니다. ESP32는 Wi-Fi 및 Bluetooth 기능이 내장되어 있어 이러한 맥락에서 강력한 도구이며, 여기서 후자는 BLE(Bluetooth Low Energy) 통신 프로토콜을 구현하는 데 사용됩니다. ESP32는 BLE를 통해 수집된 데이터를 맞춤형 Android 애플리케이션으로 전송할 수 있어 실시간 모니터링이 가능합니다. Android 애플리케이션은 데이터를 관찰, 기록 또는 추가 분석할 수 있는 사용자 인터페이스 역할을 합니다. 이 시스템은 스마트 홈 시스템, 농업 모니터링 또는 실시간 환경 모니터링이 필요한 IoT 기반 프로젝트와 같이 환경 센서로부터 원격 또는 무선 데이터 수집이 필요한 애플리케이션에 특히 유용합니다.




DHT11 라이브러리 설치:
컴퓨터에서 Arduino 통합 개발 환경(IDE)을 시작합니다. 프로그램 작성 및 업로드에 사용되는 소프트웨어입니다.

 

 

 


IDE가 열리면 라이브러리 관리자에 액세스할 수 있습니다. 이 작업은 IDE 상단의 메뉴 표시줄로 이동하여 스케치를 선택한 다음 라이브러리 포함을 선택하고 마지막으로 라이브러리 관리를 클릭하면 수행됩니다.

 

 


라이브러리 관리자에서 검색 창을 사용하여 "DHT11 또는 "Adafruit DHT"와 같은 키워드를 입력하여 Adafruit DHT 라이브러리를 찾습니다. 찾았으면 선택하고 설치 버튼을 클릭합니다. 그러면 Arduino IDE에 Adafruit DHT 라이브러리가 설치되어 스케치에서 라이브러리 기능을 사용할 수 있습니다. 하지만 내 경우에는 이미 설치했기 때문에 라이브러리 옆에 상태가 "설치됨"으로 표시됩니다.

 




다음 단계를 따르면 Arduino IDE에 Adafruit DHT11 라이브러리가 성공적으로 설치되어 프로젝트에서 사용할 수 있습니다.

ESP32 BLE 온도 모니터링 시스템 프로그램

 

 

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include <DHT.h>
// DHT Sensor
#define DHTPIN 32     // Pin which is connected to the DHT sensor.
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
BLEServer* pServer;
BLECharacteristic* pCharacteristic;
bool deviceConnected = false;
bool oldDeviceConnected = false;

class MyServerCallbacks: public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
      deviceConnected = true;
      BLEDevice::startAdvertising();
    };

    void onDisconnect(BLEServer* pServer) {
      deviceConnected = false;
    }
};

void setup() {
  Serial.begin(115200);
  BLEDevice::init("SensorMonitor");
  pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());
  dht.begin();

  BLEService *pService = pServer->createService("0000180d-0000-1000-8000-00805f9b34fb");
  pCharacteristic = pService->createCharacteristic(
      "00002a37-0000-1000-8000-00805f9b34fb",
      BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY
  );

  pCharacteristic->addDescriptor(new BLE2902());

  pService->start();
  BLEAdvertising *pAdvertising = pServer->getAdvertising();
  pAdvertising->start();
}

void loop() {
  if (deviceConnected) {
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    // Check if any reads failed and exit early (to try again).
    if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
      return;
    }

    // Create a comma-separated string of temperature and humidity
    char sensorData[40];
    snprintf(sensorData, sizeof(sensorData), "%f,%f", t, h);

    pCharacteristic->setValue(sensorData);
    pCharacteristic->notify();
    
    Serial.println("Sensor Data:");
    Serial.println(sensorData);

    delay(2000); // Adjust the update interval as needed
  }
  // disconnecting
  if (!deviceConnected && oldDeviceConnected) {
      delay(500); // give the bluetooth stack the chance to get things ready
      pServer->startAdvertising(); // restart advertising
      Serial.println("start advertising");
      oldDeviceConnected = deviceConnected;
  }
  // connecting
  if (deviceConnected && !oldDeviceConnected) {
      // do stuff here on connecting
      oldDeviceConnected = deviceConnected;
  }
}

 


코드 설명:

 

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include <DHT.h>


#include <BLEDevice.h>: 이 줄에는 BLEDevice 라이브러리가 포함됩니다. 이 라이브러리는 BLE(Bluetooth Low Energy) 기능을 프로그래밍하는 데 필수적입니다. 마이크로컨트롤러를 사용하여 BLE 장치를 생성하고 관리하는 데 필요한 기본 프레임워크와 기능을 제공합니다.

#include <BLEServer.h>: BLEServer 라이브러리를 포함하면 프로그램에서 BLE 서버를 생성할 수 있습니다. 프로젝트에 마이크로컨트롤러를 BLE 통신 프로토콜의 서버로 설정하여 연결을 관리하고 BLE 클라이언트와 데이터를 보내고 받을 수 있는 경우 이는 매우 중요합니다.

#include <BLEUtils.h>: BLEUtils 라이브러리는 BLE 작업과 관련된 유틸리티 기능을 위해 포함됩니다. 기본 BLE 애플리케이션에서 항상 직접적으로 사용되는 것은 아니지만, 고급 BLE 프로젝트에 도움이 될 수 있는 추가 기능과 디버깅 도구를 제공합니다.

#include <BLE2902.h>: 이 줄에는 BLE2902 라이브러리가 포함됩니다. 일반적으로 BLE 알림 및 표시에 사용됩니다. 특히 이 라이브러리는 BLE를 통해 데이터가 전송되는 방식을 정의하는 데 사용되는 BLE 특성에 대한 설명자를 설정하고 관리하는 것과 관련되는 경우가 많습니다.

#include <DHT.h>: DHT 시리즈 온도 및 습도 센서와 인터페이스하기 위해 DHT 라이브러리가 포함되어 있습니다. 이 라이브러리는 DHT11 또는 DHT22와 같은 DHT 센서에서 온도 및 습도 데이터를 쉽게 읽을 수 있는 일련의 기능과 방법을 제공합니다.

 

 

#define DHTPIN 32     // Pin which is connected to the DHT sensor.
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
BLEServer* pServer;
BLECharacteristic* pCharacteristic;
bool deviceConnected = false;
bool oldDeviceConnected = false;

 


DHTPIN 및 DHTTYPE. DHTPIN은 32로 설정되어 있으며 이는 DHT 센서가 마이크로컨트롤러의 디지털 핀 32에 연결되어 있음을 나타냅니다. DHTTYPE은 사용되는 DHT 센서의 모델을 지정하는 DHT11로 정의됩니다. 그런 다음 이러한 상수를 사용하여 dht라는 DHT 클래스 인스턴스가 생성되며, 이는 온도 및 습도 데이터를 읽기 위해 DHT 센서와의 상호 작용을 용이하게 합니다.

또한 이 조각에는 pServer라는 BLEServer 개체에 대한 포인터 선언이 포함되어 있습니다. 이 포인터는 블루투스 통신을 위한 장치 설정의 핵심 부분인 BLE 서버를 참조하고 관리하는 데 사용됩니다. 마찬가지로 BLECharacteristic 개체에 대한 포인터인 pCharacteristic이 선언됩니다. 이 특성은 서버가 전송하거나 수신할 데이터를 나타내기 때문에 BLE 통신에 매우 중요합니다.

또한 이 코드는 두 개의 부울 변수인 deviceConnected 및 oldDeviceConnected를 초기화하며 둘 다 false로 설정됩니다. 이는 클라이언트 장치와 BLE 서버의 연결 상태를 추적하는 데 사용됩니다. deviceConnected는 현재 연결 상태를 나타내며 클라이언트가 연결되면 true로 변경됩니다. oldDeviceConnected는 이전 연결 상태의 메모리 역할을 하며 장치 연결이 끊어지거나 새 장치가 연결되는 경우와 같은 연결 상태의 변화를 감지하는 데 유용합니다. 전반적으로 이 스니펫은 BLE를 통해 센서 데이터를 읽고 무선으로 전송하는 프로그램의 단계를 설정합니다.

 

class MyServerCallbacks: public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
      deviceConnected = true;
      BLEDevice::startAdvertising();
    };

    void onDisconnect(BLEServer* pServer) {
      deviceConnected = false;
    }
};


코드 조각은 BLEServerCallbacks 클래스에서 상속되는 MyServerCallbacks라는 사용자 정의 클래스를 정의합니다. 이 상속을 통해 MyServerCallbacks는 BLE(Bluetooth Low Energy) 서버 수명 주기의 이벤트에 의해 트리거되는 특정 콜백 함수를 재정의할 수 있습니다. 특히 이 클래스는 BLE 클라이언트가 서버에 연결하거나 서버에서 연결을 끊을 때 각각 호출되는 onConnect 및 onDisconnect라는 두 가지 함수를 재정의합니다.

onConnect 함수에서 클라이언트 장치가 서버에 연결되면 전역 변수 deviceConnected가 true로 설정됩니다. 이 변수는 BLE 서버의 연결 상태를 추적하기 위해 프로그램의 다른 곳에서 사용될 가능성이 높습니다. 이 변수를 설정한 후 함수는 BLEDevice::startAdvertising()을 호출합니다. 이 명령을 사용하면 초기 연결이 설정된 후에도 다른 클라이언트가 찾아 연결할 수 있도록 BLE 서버가 계속해서 자신의 존재를 알리게 됩니다.

onDisconnect 기능이 더 간단합니다. 클라이언트 장치가 BLE 서버에서 연결이 끊어지면 호출됩니다. 이에 대한 응답으로 deviceConnected 변수를 false로 설정하여 연결 상태를 업데이트합니다.

전반적으로 이 사용자 정의 클래스는 프로그램의 BLE 통신 설정에서 중요한 부분입니다. 이를 통해 프로그램은 연결 및 연결 끊김 이벤트에 적절하게 응답하여 서버의 연결 상태에 대한 정확한 기록을 유지하고 클라이언트 장치 연결에 대한 지속적인 가용성을 보장할 수 있습니다.

 

 

void setup() {
  Serial.begin(115200);
  BLEDevice::init("SensorMonitor");
  pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());
  dht.begin();

  BLEService *pService = pServer->createService("0000180d-0000-1000-8000-00805f9b34fb");
  pCharacteristic = pService->createCharacteristic(
      "00002a37-0000-1000-8000-00805f9b34fb",
      BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY
  );

  pCharacteristic->addDescriptor(new BLE2902());

  pService->start();
  BLEAdvertising *pAdvertising = pServer->getAdvertising();
  pAdvertising->start();
}

 


이 기능은 Serial.begin(115200)을 사용하여 115200의 전송 속도로 직렬 통신을 초기화하는 것으로 시작됩니다. 이는 일반적으로 디버깅 목적으로 사용되며 USB 연결을 통해 마이크로컨트롤러와 데이터를 주고받을 수 있습니다.

다음으로, BLEDevice::init(“SensorMonitor”)는 “SensorMonitor”라는 이름으로 BLE 장치를 초기화합니다. 이 이름은 다른 BLE 장치가 사용 가능한 연결을 검색할 때 표시됩니다.

그런 다음 프로그램은 pServer = BLEDevice::createServer()를 사용하여 BLE 서버를 생성합니다. 이 서버는 BLE 통신의 중심점입니다. 서버의 콜백은 pServer->setCallbacks(new MyServerCallbacks())를 사용하여 MyServerCallbacks 클래스의 인스턴스로 설정됩니다. 이를 통해 프로그램은 BLE 클라이언트 연결 및 연결 끊김과 같은 이벤트를 처리할 수 있습니다.

DHT 센서는 dht.begin()으로 초기화됩니다. 이렇게 하면 센서가 온도 및 습도 데이터를 읽을 수 있도록 준비됩니다.

pServer->createService()를 사용하여 특정 UUID("0000180d-0000-1000-8000-00805f9b34fb")로 BLE 서비스를 생성합니다. 그런 다음 pService->createCharacteristic()을 사용하여 이 서비스 내에서 BLE 특성이 생성됩니다. 자체 UUID("00002a37-0000-1000-8000-00805f9b34fb")로 식별되는 특성은 연결된 클라이언트에 알림을 읽고 보낼 수 있도록 구성됩니다. 이 특성은 센서 데이터가 전송되는 위치입니다.

pCharacteristic->addDescriptor(new BLE2902()) 줄은 특성에 설명자를 추가하여 알림/표시를 활성화합니다.

마지막으로 서비스는 pService->start()로 시작되고, BLE 광고는 pAdvertising->start()로 시작되어 다른 사람이 장치를 검색할 수 있게 됩니다. 이 설정은 장치가 연결된 클라이언트에 무선으로 센서 데이터를 보내는 데 필요한 BLE 통신 프레임워크를 설정하는 데 중요합니다.

 

 

void loop() {
  if (deviceConnected) {
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    // Check if any reads failed and exit early (to try again).
    if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
      return;
    }

    // Create a comma-separated string of temperature and humidity
    char sensorData[40];
    snprintf(sensorData, sizeof(sensorData), "%f,%f", t, h);

    pCharacteristic->setValue(sensorData);
    pCharacteristic->notify();
    
    Serial.println("Sensor Data:");
    Serial.println(sensorData);

    delay(2000); // Adjust the update interval as needed
  }
  // disconnecting
  if (!deviceConnected && oldDeviceConnected) {
      delay(500); // give the bluetooth stack the chance to get things ready
      pServer->startAdvertising(); // restart advertising
      Serial.println("start advertising");
      oldDeviceConnected = deviceConnected;
  }
  // connecting
  if (deviceConnected && !oldDeviceConnected) {
      // do stuff here on connecting
      oldDeviceConnected = deviceConnected;
  }
}



BLE 장치가 연결되면(deviceConnected로 확인) 이 함수는 DHT 센서에서 습도(h) 및 온도(t) 데이터를 읽습니다. 그런 다음 isnan(h) 또는 isnan(t)를 사용하여 이러한 판독값이 유효한지 확인합니다. 이러한 판독 중 하나라도 실패하면(NaN 반환) 직렬 모니터에 오류 메시지를 인쇄하고 현재 루프 반복을 일찍 종료하고 if 블록 내부의 나머지 코드를 건너뜁니다.

판독값이 유효한 경우 함수는 이 데이터를 온도와 습도를 나타내는 쉼표로 구분된 문자열(sensorData)로 형식화합니다. 그런 다음 이 문자열은 BLE 특성(pCharacteristic->setValue(sensorData))의 값으로 설정되고 연결된 BLE 클라이언트(pCharacteristic->notify())에 알림이 전송됩니다. 센서 데이터는 디버깅 목적으로 직렬 모니터에도 인쇄됩니다. 이 블록 끝에 2000밀리초(2초)의 지연이 도입되어 센서 데이터 업데이트 빈도를 제어합니다.

이 함수는 BLE 연결 상태도 처리합니다. 장치가 이전에 연결되었지만(oldDeviceConnected) 지금은 연결이 끊어진 경우(!deviceConnected) 500밀리초 동안 기다린 후 BLE 광고(pServer->startAdvertising())를 다시 시작합니다. 이렇게 하면 다른 BLE 클라이언트가 장치를 다시 검색할 수 있게 됩니다. 광고가 다시 시작되었음을 알리는 메시지가 직렬 모니터에 인쇄됩니다.

마지막으로 현재 deviceConnected 상태와 일치하도록 oldDeviceConnected 상태를 업데이트합니다. 이는 루프의 후속 반복에서 연결 상태의 변경 사항을 추적하는 데 중요합니다.

요약하면, loop() 기능은 센서 데이터를 지속적으로 모니터링 및 처리하고, BLE 연결을 관리하고, 연결된 클라이언트에 대한 데이터 전송을 처리하여 시스템이 연결 상태 및 센서 판독값에 동적으로 응답하도록 보장합니다.

실제 시연:


보시다시피 회로도에 따라 구성 요소를 연결했으며 이제 시스템이 내 Android 애플리케이션에 실내 온도를 표시하고 있습니다.

이제 라이터를 사용하여 열을 가하면 온도와 습도 판독값이 변경됩니다.

결론


ESP32 BLE DHT11 온도 모니터링 시스템은 실시간 데이터 모니터링을 위한 스마트하고 안정적인 솔루션입니다. 무선 연결, 쉬운 설치 및 사용자 친화적인 인터페이스를 통해 주거용 및 산업용 모두에 다양한 이점을 제공합니다. 가정의 온도 및 습도 수준을 모니터링하거나 산업 환경의 조건을 최적화하려는 경우 이 시스템은 비용 효율적이고 효율적인 솔루션을 제공합니다.

ESP32 마이크로컨트롤러의 성능과 DHT11 센서의 정확성을 활용하는 ESP32 BLE DHT11 온도 및 습도 모니터링 시스템은 사용자에게 실시간 데이터를 제공하여 정보에 입각한 결정을 내리고 사전 조치를 취할 수 있도록 지원합니다. 이 기술을 활용하여 손끝에서 신뢰할 수 있는 모니터링 시스템을 통해 편리함과 마음의 평화를 경험해 보세요.

 

참고 문서:

ESP32 BLE Temperature and Humidity Monitoring System using DHT11 Sensor

 

 

 

반응형