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.
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.