Arduino를 사용하여 ESP 32 장치에 FreeRTOS 솔루션 구현 - 튜토리얼 소개
FreeRTOS는 ESP 32 플랫폼에서 복잡한 시스템 솔루션을 구현할 수 있는 강력한 도구 세트를 제공합니다. 장치에 내장되어 있으며 프로그램 개발에 무료로 사용할 수 있습니다. 여러 센서, 디스플레이 장치, Wi-Fi 연결, 모터, 서보, 카메라 및 기타 장치가 필요한 많은 프로젝트에서 실시간 운영 체제를 사용하여 처리 시간의 우선순위를 관리하면 이점을 얻을 수 있습니다. 그렇다면 왜 더 자주 사용되지 않을까요?
- 이를 어떻게, 언제 가장 효과적으로 사용할지 이해하는 데는 학습 곡선이 필요합니다. 세마포어, 뮤텍스, 큐, 인터럽트와 같은 구현 기법은 많은 취미 개발자에게 익숙하지 않습니다. 하지만 이러한 기법들은 매우 강력하고 쉽게 배울 수 있습니다.
- 관련 문서는 많지만 단편적이고 세분화되어 있습니다. FreeRTOS 일반 및 ESP 32에 구현된 FreeRTOS에 대한 문서는 많지만, Arduino 환경에서 ESP 32를 활용한 FreeRTOS 활용에 대한 문서는 거의 없습니다.
- FreeRTOS 문서의 대부분은 전문 개발자를 대상으로 하며, 개발 환경으로 Arduino를 사용하기로 선택하는 취미 개발자를 대상으로 하지 않습니다.
- 뮤텍스, 세마포어, 큐, 인터럽트를 사용하여 반응성이 뛰어난 시스템을 만드는 방법을 보여주기 위해 단순히 깜박이는 불빛을 넘어선 튜토리얼이나 데모 프로젝트는 거의 없습니다.
이를 염두에 두고, 이 튜토리얼 시리즈의 목적은 ESP 32 WROOM(또는 이와 유사한 장치)에서 실행되는 간단한 회로를 사용하여 이러한 개념을 실제로 구현하는 방법을 보여주는 것입니다. 이 설명서는 아두이노 플랫폼에서 C++ 프로그래밍에 이미 익숙한 취미 개발자(저처럼)를 대상으로 합니다. 간단한 멀티태스킹 점멸 표시등 데모부터 시작하여, RTOS가 제공하는 더 복잡한 기능들을 실제로 사용하는 방법을 배우기 위해 여러 기능을 추가해 보겠습니다. 도움이 되셨으면 좋겠습니다!
배경 정보
제가 실시간 운영체제(RTOS)를 처음 접한 것은 1980년대 산업 제어 시스템과 조립 라인 로봇 공학 분야에서 일하면서였습니다. 이러한 기계들은 대형 캐비닛에 설치된 랙 장착형 컴퓨터로 제어되었으며, 이 컴퓨터들은 리미트 스위치, 모터, 로터리 인코더, 유압 밸브, 경고등, 경보음, 키패드 입력 시스템, CRT, 이더넷 케이블 어댑터 등 여러 장치와 연결되어 복잡한 입출력 장치 네트워크를 구성했습니다. 실시간 운영체제는 수많은 신호를 관리하고 우선순위를 정하여 제한된 CPU 성능으로 모든 것이 안전하고 안정적으로 작동하도록 적절한 작업을 수행하도록 했습니다. 오늘날 실시간 운영체제는 로봇 공학, 차량 제어, 홈 오토메이션, 드론 비행 시스템, 보안 시스템 등 다양한 용도로 사용되는 시스템의 운영을 처리하는 데 활용되고 있습니다.
FreeRTOS는 Richard Barry가 2003년경 처음 개발한 실시간 운영 체제입니다. C로 개발되었으며 다양한 하드웨어 플랫폼에서 실행되도록 설계되었습니다. 2016년 Amazon Web Services가 소프트웨어 관리를 인수했으며 현재는 오픈 소스 프로젝트로 지원하고 있습니다. 원래 개발자인 Richard Barry는 현재 AWS에서 엔지니어로서 개발 및 지원 업무를 계속하고 있습니다. MIT 오픈 소스 코드 라이선스 계약에 따라 무료로 사용할 수 있습니다.
ESP 32 프로세서 제품군을 생산하는 회사인 Espressif Systems는 ESP 32 솔루션의 개발 및 배포에 대칭적 다중 처리를 지원하는 FreeRTOS 변형을 사용하기로 결정했습니다. ESP 32 펌웨어에 내장되어 있으며 ESP 32에서 지원하는 내부 라이브러리 및 함수 개발에 활용됩니다.
또한 FreeRTOS 라이브러리는 각 시스템에 포함된 내부 헤더 파일(FreeRTOSConfig.h)에 정의된 함수를 통해 개발자가 액세스할 수 있습니다. 이 헤더 파일은 Arduino IDE 플랫폼에서 컴파일 시 자동으로 포함되므로 사용자가 직접 호출할 필요가 없습니다. Espressif는 ESP 32 시스템의 요구 사항에 맞게 헤더 파일을 조정했으며, 사용자는 수정하지 않도록 강력히 권장합니다.
또한, Arduino IDE에서 사용되는 헤더 파일에는 심도 있는 테스트 없이 수정해서는 안 되는 추가 매개변수가 있습니다. 이 튜토리얼의 예제는 Arduino IDE 버전 2.3.2에 배포된 표준 구성을 사용하여 개발됩니다. 훌륭한 예제 코드(Arduino 사용에 맞춰 작성되지 않음!)와 함께 FreeRTOS의 전체 기능에 대한 자세한 설명을 원하시면 Richard Barry가 쓴 전자책 "Mastering the FreeRTOS Real Time Kernel"을 강력히 추천합니다. 여기에서 다운로드할 수 있습니다 .
시작해 봅시다
이 강좌는 실습 튜토리얼로 구성되어 있으니, 바로 시작해 보겠습니다. 강좌의 대략적인 흐름은 다음과 같습니다.
- 1과 - Arduino에서 기존 프로그래밍을 사용하여 하드웨어 구성을 설정하고 테스트하여 시작점을 검증합니다.
- 2과 - Arduino에서 FreeRTOS 리소스를 사용하여 여러 작업을 생성하고 실행하는 방법을 배웁니다. 또한 이러한 작업에 구조화된 데이터를 전달하고 전역 변수 포인터를 사용하여 독립된 작업 간에 작업 출력 데이터를 교환하는 방법도 배웁니다. 실행 중인 각 작업에 필요한 메모리 요구량을 측정하고 조정하는 방법도 배웁니다.
- 3과 - 인터럽트와 타이머를 사용하여 처리를 선점하고, 뮤텍스를 사용하여 공유 리소스를 제어하고, 세마포어를 사용하여 작업을 동기화하고, 큐를 사용하여 협력하는 작업 간의 통신 및 처리를 시작하는 방법을 배웁니다. 또한, 콘솔 입력을 통해 작업 상태(일시 중지, 재개, 종료)를 대화형으로 제어하는 방법을 배웁니다.
- 4과 - ESP 32의 웹 서비스 및 웹 소켓 기능을 사용하여 시스템에서 제어되는 작업을 감독하고 관리하는 방법을 배웁니다. 여러 사용자가 간단한 웹 브라우저 인터페이스를 통해 시스템을 동시에 모니터링하고 제어할 수 있습니다.
이러한 소개 과정의 범위를 벗어나는 FreeRTOS 기능은 많이 있지만, 이 과정을 완료하면 향후 독립적인 연구와 실험을 위한 튼튼한 기반을 갖추게 될 것입니다.
참고한 링크를 정리함.
Implementing FreeRTOS Solutions on ESP 32 Devices using Arduino
Tutorial Introduction
medium.com
'아두이노우노 R4' 카테고리의 다른 글
Arduino Uno R4 Wifi의 LED 매트릭스를 시계열 그래프로 사용하는 데모 (3) | 2025.07.01 |
---|---|
Arduino UNO R4 Wifi 및 Sensirion SHT40을 사용한 온도 그래프 (0) | 2025.07.01 |
Arduino를 사용하여 ESP32 보드에 FreeRTOS 구현하기 2 (5) | 2025.06.30 |
Arduino를 사용하여 ESP32 보드에 FreeRTOS 구현하기 1 (1) | 2025.06.30 |
Arduino를 사용하여 ESP32 보드에 FreeRTOS 구현하기 4 (3) | 2025.06.30 |
Arduino를 사용하여 ESP32 보드에 FreeRTOS 구현하기 3 (1) | 2025.06.30 |
Request Sensor Data via SMS using Arduino and SIM900 GSM Shield (0) | 2025.04.22 |
Lora 모듈: 15km 거리에서 릴레이 켜기 (0) | 2025.03.24 |
더욱 좋은 정보를 제공하겠습니다.~ ^^