ESP32-WROOM-32 ile ESP-IDF ve C++ Kullanarak DHT-11 Sensörlerinden Veri Okuma ve HTTP Sunucusu

ESP32-WROOM-32 ile ESP-IDF ve C++ Kullanarak DHT-11 Sensörlerinden Veri Okuma ve HTTP Sunucusu

Gömülü Sistemlerde C++ Programlama dili kullanımı

ESP32-WROOM-32 mikrodenetleyicisi, genişletilmiş özellikleri ve güçlü yetenekleri ile öne çıkan bir IoT (Internet of Things) platformudur. Bu makalede, ESP-IDF (Espressif IoT Development Framework) ve C++ dilini kullanarak ESP32 üzerinde bulunan dört adet DHT-11 sıcaklık ve nem sensöründen veri okuyacak ve bu verileri bir HTTP sunucusu üzerinden görüntüleyeceğiz.

esp32-wroom-32 board
 

Gereksinimler
1. ESP-IDF Kurulumu: ESP-IDF'yi buradan indirip kurun.
2. VSCode Kurulumu: Visual Studio Code'u buradan indirip kurun.
3. PlatformIO Kurulumu: PlatformIO eklentisini VSCode üzerine yükleyin.


Proje Oluşturma ve Donanım Bağlantıları
1. Proje İnisiyalizasyonu: Terminal veya Komut İstemcisine gidin ve bir proje dizini oluşturun. Ardından aşağıdaki komutu kullanarak ESP-IDF projesini başlatın:
idf.py create-project my_dht_project
cd my_dht_project


2. Donanım Bağlantıları: DHT-11 sensörlerini ESP32-WROOM-32'ye bağlayın.

Aşağıdaki bağlantıları kullanabilirsiniz:
DHT1: GPIO 4
DHT2: GPIO 5
DHT3: GPIO 6
DHT4: GPIO 7


C++ Kodu ve ESP-IDF Ayarları

#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <esp_log.h>
#include <esp_http_server.h>
#include <driver/gpio.h>
#include <DHT.h>

#define DHT_PIN1 GPIO_NUM_4
#define DHT_PIN2 GPIO_NUM_5
#define DHT_PIN3 GPIO_NUM_6
#define DHT_PIN4 GPIO_NUM_7
#define DHT_TYPE DHT_TYPE_11

DHT dht1(DHT_PIN1, DHT_TYPE);
DHT dht2(DHT_PIN2, DHT_TYPE);
DHT dht3(DHT_PIN3, DHT_TYPE);
DHT dht4(DHT_PIN4, DHT_TYPE);

static const char *TAG = "HTTP_SERVER";

esp_err_t sensor_handler(httpd_req_t *req) {
    char sensor_data[100];

    float temp1 = dht1.readTemperature();
    float hum1 = dht1.readHumidity();
    float temp2 = dht2.readTemperature();
    float hum2 = dht2.readHumidity();
    float temp3 = dht3.readTemperature();
    float hum3 = dht3.readHumidity();
    float temp4 = dht4.readTemperature();
    float hum4 = dht4.readHumidity();

    snprintf(sensor_data, sizeof(sensor_data), "Sensor 1: Temp=%.2f°C, Hum=%.2f%%\n"
                                              "Sensor 2: Temp=%.2f°C, Hum=%.2f%%\n"
                                              "Sensor 3: Temp=%.2f°C, Hum=%.2f%%\n"
                                              "Sensor 4: Temp=%.2f°C, Hum=%.2f%%\n",
             temp1, hum1, temp2, hum2, temp3, hum3, temp4, hum4);

    httpd_resp_send(req, sensor_data, HTTPD_RESP_USE_STRLEN);
    return ESP_OK;
}

httpd_uri_t sensor_uri = {
    .uri       = "/sensor",
    .method    = HTTP_GET,
    .handler   = sensor_handler,
    .user_ctx  = NULL
};

httpd_handle_t server = NULL;

void start_webserver() {
    httpd_config_t config = HTTPD_DEFAULT_CONFIG();
    if (httpd_start(&server, &config) == ESP_OK) {
        httpd_register_uri_handler(server, &sensor_uri);
    }
}

void stop_webserver() {
    if (server) {
        httpd_stop(server);
    }
}

void app_main() {
    dht1.begin();
    dht2.begin();
    dht3.begin();
    dht4.begin();

    start_webserver();
}


Bu kod, DHT-11 sensörlerinden sıcaklık ve nem değerlerini okur ve bu değerleri bir HTTP sunucusu üzerinden "/sensor" endpoint'i ile görüntüler.

 

Bu makalede, ESP32-WROOM-32 mikrodenetleyicisi üzerinde ESP-IDF ve C++ kullanarak dört adet DHT-11 sıcaklık ve nem sensöründen veri okuma işlemini gerçekleştirdik. Ayrıca, bu verileri bir HTTP sunucusu üzerinden görüntülemeyi başardık. Bu projenin temelini anladıktan sonra, ESP32 ile daha karmaşık IoT projelerine adım atabilirsiniz.