본문 바로가기
Embedded/RTOS

ESP-IDF에서 FreeRTOS Task로 ESP32 LED Blinking하기

by poin 2022. 1. 4.

ESP-IDF 개발환경을 설치하고, FreeRTOS Task를 이용해 간단한 LED Blinking 예시를 만들어 보았다.

ESP-IDF는 Espressif사에서 만든 VSCode extension을 설치해서 간단하게 개발환경을 구축했다.

 

VSCode에서 ESP-IDF 개발환경 구축하기

ESP32 또는 ESP8266을 개발하기 위한 환경은 여러가지가 있다. 보통은 아두이노에서 시작하는 경우가 많다. 하지만 개발을 진행하다 보니, 불편한 점이 좀 있었다. 아두이노의 esp32-core도 Espressif사에

poinsystem.tistory.com

Code

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"

#define BLINK_GPIO_1 26
#define BLINK_GPIO_2 27

void task_LED1(void *param);
void task_LED2(void *param);

void app_main(void) {

    xTaskCreate(task_LED1, "task1", 1024*2, NULL, 3, NULL);
    xTaskCreate(task_LED2, "task2", 1024*2, NULL, 3, NULL);
}

void task_LED1(void *param) {

    gpio_reset_pin(BLINK_GPIO_1);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(BLINK_GPIO_1, GPIO_MODE_OUTPUT);

    while(1) {        

        printf("this is from task 1\n");
        gpio_set_level(BLINK_GPIO_1, 0);  // LED OFF
        vTaskDelay(1000 / portTICK_RATE_MS);
        gpio_set_level(BLINK_GPIO_1, 1);  // LED ON
        vTaskDelay(1000 / portTICK_RATE_MS);
    }

    vTaskDelete(NULL);  // finishing the task
}

void task_LED2(void *param) {

    gpio_reset_pin(BLINK_GPIO_2);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(BLINK_GPIO_2, GPIO_MODE_OUTPUT);

    while(1) {

        printf("this is from task 2\n");
        gpio_set_level(BLINK_GPIO_2, 0);  // LED OFF
        vTaskDelay(500 / portTICK_RATE_MS);
        gpio_set_level(BLINK_GPIO_2, 1);  // LED ON
        vTaskDelay(500 / portTICK_RATE_MS);
   }

    vTaskDelete(NULL);  // finishing the task
}

FreeRTOS에 대한 학습을 진행할 것이라서, 겸사겸사 Task를 만들어 2개의 LED가 각자 주기에 맞추어 blinking하도록 해 보았다. ESP-IDF framework에 FreeRTOS 개발환경이 포함되어 있으므로, freertos 헤더파일들만 include하고, 각각의 task 함수를 만들었다.

 

두개의 LED는 GPIO 26, 27번 pin을 사용했고, 330Ω 저항을 LED에 각각 연결했다.

 

실행 결과

ESP32

'Embedded > RTOS' 카테고리의 다른 글

[FreeRTOS] Task States  (0) 2022.02.03

댓글