توسط سنسور DHT11 می توان اطلاعات مربوط به دما و رطوبت محیط مورد نظر را بصورت دقیق و کالیبر، اندازه گیری و بصورت سریال دریافت کرد. برای مشاهده لیست فروشندگان و قیمت سنسور DHT11 کلیک کنید.
سنسور رطوبت DHT11 به دو بخش اصلی تقسیم می شود :
یک مقاومت گرمایی
یک سنسور رطوبت خازنی
برای دریافت خروجی دیجیتال نیز یک تبدیل کننده ی آنالوگ به دیجیتال درون این سنسور وجود دارد. ولتاژ عملیاتی و ورودی/خروجی این سنسور 3 تا 5 ولت و حداکثر جریان استفاده هنگام عملیات تبدیل 2/5 میلی آمپر است. مناسب برای خواندن رطوبت 20-95% با دقت 2-5% و خواندن دمای 0 تا 50 درجه با دقت 2 سانتی گراد می باشد.
ارسال دیتا از سنسور DHT11
جهت ارسال دیتا به Node-Red توسط بلوتوث کم مصرف نیاز به اقدام عمل خاصی در سرور (رزبری پای) نیست. نود مربوطه خود در نقش دیوایس گیرنده عمل می کند.
کد مورد نظر برای این پروژه برنامه Notify موجود در مثال های Arduino IDE کتابخانه BLE است. البته ما در این کد مطابق با پروژه خود تغییراتی ایجاد کرده ایم. به این کد کتابخانه های “DHT.h” و <iostream> و <string> را اضافه می کنیم. خروجی برنامه و شماتیک Node-Red در تصاویر زیر قابل مشاهده است.
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include "DHT.h"
#include <iostream>
#include <string>
BLEServer* pServer = NULL;
BLECharacteristic* pCharacteristic = NULL;
bool deviceConnected = false;
bool oldDeviceConnected = false;
uint32_t value = 0;
#define DHTPIN 13 // DHT11 data pin
#define DHTTYPE DHT11 // sets the sensor type, in case DHT11
DHT dht (DHTPIN, DHTTYPE);
int Humidity;
int Temperature;
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" // UART service UUID
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect (BLEServer * pServer) {
deviceConnected = true;
};
void onDisconnect (BLEServer * pServer) {
deviceConnected = false;
}
};
void setup() {
Serial.begin(115200);
Serial.println(F("DHT11 test!"));
dht.begin();
// Create the BLE Device
BLEDevice::init("MyESP32");
// Create the BLE Server
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
// Create the BLE Service
BLEService *pService = pServer->createService(SERVICE_UUID);
// Create a BLE Characteristic
pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE |
BLECharacteristic::PROPERTY_NOTIFY |
BLECharacteristic::PROPERTY_INDICATE
);
// Create a BLE Descriptor
pCharacteristic->addDescriptor(new BLE2902());
// Start the service
pService-> start ();
// Start advertising
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->setScanResponse(false);
pAdvertising->setMinPreferred(0x0); // set value to 0x00 to not advertise this parameter
BLEDevice::startAdvertising();
Serial.println("Waiting a client connection to notify...");
}
void loop () {
if (deviceConnected) {
float Humidity = dht.readHumidity();
float Temperature = dht.readTemperature();
// test if return is valid, otherwise something is wrong.
if (isnan (Temperature) || isnan (Humidity))
{
Serial.println ("Failed to read from DHT");
}
else
{
Serial.print ("Humidity:");
Serial.print (Humidity);
Serial.print ("% \ t ");
Serial.print ("Temperature:");
Serial.print (Temperature);
Serial.println ("* C");
}
char HumidityString [2];
char TemperatureString [2];
dtostrf (Humidity, 1, 2, HumidityString);
dtostrf (Temperature, 1, 2, TemperatureString);
char dhtDataString [50];
sprintf (dhtDataString, "% f,% f", Temperature, Humidity);
Serial.print ("*** Sent Data:");
Serial.print (dhtDataString);
Serial.println ("***");
pCharacteristic-> setValue (dhtDataString);
pCharacteristic-> notify (); // Send the value to the application!
}
delay (5000);
}
نکات مهم برنامه
در اینجا نکات مهمی که برای کد نویسی نیاز دارید را می توانید پیدا کنید:
# define DHTPIN 13
#define DHTTYPE DHT11
با کد فوق پایه ای از ماژول ESP32 که دیتا را از سنسور دریافت می کند معرفی می کنیم. انتخاب این پایه (پین) دلخواه است. در خط دوم مدل سنسور معرفی می شود.
پس از اضافه کردن کتابخانه های مورد نیاز باید UUID هایی برای Service و Characteristic تعریف کنید.
در بخش setup، تنظیمات مورد نیاز برای راه اندازی سرور انجام می شود. ESP32 در حالت سرور شروع به کار می کند. با استفاده از دو خط فوق، سروری با نامی که تعریف کرده اید ساخته می شود.
پس از آن، یک Characteristic با UUID تعریف شده روی سرور ساخته می شود. PROPERTY_READ و PROPERTY_WRITE و… اجازه دسترسی به این Characteristic را مشخص می کنند.
شماتیک طراحی در Node-Red به صورت تصویر زیر می باشد. دیتا ارسالی از سنسور در کنسول Node-Red قابل مشاهده است. نود های مورد نیاز در این آموزش drbug، inject و generic ble in می باشند. در نود generic ble in ابتدا گزینه اسکن را فعال کرده و پس از اسکن دستگاه مورد نظر را انتخاب کرده و به آن کانکت می شویم
نتیجه گیری
در این مقاله آموختیم که چگونه می توان دیتا خوانده شده توسط سنسور DHT11 را با استفاده از بلوتوث کم مصرف به Node-red ارسال کنیم. اما مهترین هدف ازارسال دیتا به Node-Red امکان ساخت داشبورد و مانیتورینگ لحظه به لحظه اطلاعات است. در مقاله ها آتی طریقه ساخت داشبورد برای دیتا ارسالی توسط بلوتوث کم مصرف را آموزش خواهیم داد پس مقالات ما را دنبال کنید.
کارشناس برق- قدرت و کارشناس ارشد کنترل. علاقه مند به سیستم های هوشمند و اینترنت اشیا. به مدت بیش از 1 سال است که در تیم سخت افزار سازان نام آور مشغول به فعالیت هستم.
1 دیدگاه