1. Home
  2. Docs
  3. ESP-IDF / ESP32
  4. Giriş
  5. ESP-IDF ile Merhaba, Dünya!

ESP-IDF ile Merhaba, Dünya!

Print

IOT cihazlar içerisinde yüksek pazar payı ve sağlamış olduğu imkanlarla Espressif firmasını duymayan yoktur. Firmanın uygun fiyatlı ürünleri günümüzde birçok projede kendine yer edinebiliyor. Ürünleri arduino tabanlı kodlama ile kodlayabildiğimiz gibi kendi sağlamış olduğu geliştirme ortamı ESP-IDF ile FreeRTOS da kullanarak kodlayabiliyoruz.

Önceki yazımızda ESP-IDF nin nasıl kurulduğunu anlattık. Bu bölümde ve bundan sonraki bölümlerde de ESP-IDF ile nasıl kodlama yaparız bunlardan bahsedeceğiz.

Genel olarak ESP-IDF ile C dili kullanılarak kodlanan cihazları, bazı bölümlerde C++ ile bazı bölümlerde de C ile kodlayacağız. Bu sayede C++’ın sınıf yapıları sayesinde daha düzenli kod yapıları üzerinde çalışmayı da görmüş olacağız.

Öncelikle C++ ile yazmış olduğumuz kodu header dosyası ile beraber paylaşalım ve daha sonra bölüm bölüm kodun açıklamasını yapalım.

#pragma once

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"

#define LOG_LEVEL_LOCAL ESP_LOG_VERBOSE
#define LOG_TAG "MAIN"

#define pdSECOND pdMS_TO_TICKS(1000)

class Main final
{
    public:
        esp_err_t setup(void);
        void loop(void);
};
#include "main.h"

static Main _Main;

extern "C" void app_main(void)
{
    esp_err_t ret = _Main.setup();

    if (ret)
    {
        ESP_LOGE(LOG_TAG, "Not initialized.");
    }

    ESP_LOGI(LOG_TAG, "Initialized.");
    ESP_ERROR_CHECK(ret);

    while (true)
    {
        _Main.loop();
        vTaskDelay(pdSECOND);
    }

    return;
}

esp_err_t Main::setup(void)
{
    ESP_LOGI(LOG_TAG, "Initializing...");

    return ESP_OK;
}

void Main::loop(void)
{
    ESP_LOGI(LOG_TAG, "Merhaba,Dünya!");
}

Bir ESP-IDF kodu yazmadan önce gerekli olan header dosyalarını include etmeliyiz.

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"

Bu basit kodda ESP_LOGI fonksiyonu ile serial monitöre Merhaba,Dünya! yazdırdığımız için “esp_log.h” kütüphanesini include ettik.

class Main final
{
    public:
        esp_err_t setup(void);
        void loop(void);
};

Daha sonra bir sınıf oluşturup fonksiyonlarını tanımladık.

esp_err_t Main::setup(void)
{
    ESP_LOGI(LOG_TAG, "Initializing...");

    return ESP_OK;
}

esp_err_t tanımı ile geriye bir error döndüreceğimizi belirtmiş olduk. Geriye döndüreceğimiz error durumuna göre kodumuz gerekirse yeniden başlatılacak, bir hata ile karşılaşılmazsa yoluna devam edecek.

extern "C" void app_main(void)
{
    esp_err_t ret = _Main.setup();

    if (ret)
    {
        ESP_LOGE(LOG_TAG, "Not initialized.");
    }

    ESP_ERROR_CHECK(ret);
    ESP_LOGI(LOG_TAG, "Initialized.");
    
    while (true)
    {
        _Main.loop();
        vTaskDelay(pdSECOND);
    }

    return;
}

Main fonksiyonu içerisinde önce çağırmış olduğumuz fonksiyonun error durumunu kontrol ediyoruz. Eğer hata gelirse ekrana hata mesajı yazdırıyor ve ESP_ERROR_CHECK yaptırıyoruz. Burada karşılaşılacak durumla beraber programımız yeniden başlatılabilir.

Bir hata ile karşılaşılmadığı durumda döngü içerisinde her 1 saniye de bir serial monitor e Merhaba, Dünya! yazdıracaktır.

Bu bölümde Merhaba,Dünya! ile ESP-IDF dünyasına giriş yapmış bulunuyoruz. Daha detaylı bilgi almak için diğer bölümleri inceleyebilirsiniz.

Bölümde paylaşılan kodlara şu linkten ulaşabilirsiniz.

ahakan
22 repositories, 17 followers.

Tags , , , ,