반응형

전체 글 1163

ESP-IDF FreeRTOS 마스터 가이드: 태스크 생성부터 우선순위 및 듀얼 코어 할당 기법

임베디드 소프트웨어의 규모가 커지고 복잡해짐에 따라 기존의 단일 루프(while(1)) 구조만으로는 주기적인 센서 데이터 수집, 외부 통신 패킷 처리, 실시간 모터 제어 등을 동시에 처리하기가 불가능에 가깝습니다. 메인 루프 내부의 특정 연산이 정체되면 전체 시스템의 실시간성이 무너지기 때문입니다. 이러한 병목을 해결하고 자원을 효율적으로 분배하기 위해 필요한 것이 바로 실시간 운영체제(RTOS)입니다. ESP32의 공식 개발 환경인 ESP-IDF는 소스코드 커널 레벨에서부터 FreeRTOS를 기본적으로 채택하고 있어, 개발자가 별도의 포팅 과정 없이 멀티태스킹 아키텍처를 곧바로 구현할 수 있도록 지원합니다. 이번 글에서는 ESP-IDF 환경에서 FreeRTOS의 핵심 매커니즘을 이해하고, 실무에서 안전..

Android GridLayout 쉽게 배우기 | 안드로이드 그리드 UI 구성 방법 완벽 정리

안드로이드 앱을 개발할 때, UI를 구성하는 방법은 다양합니다. 그중 GridLayout은 그리드 형식으로 UI 요소들을 배치하는 데 유용한 레이아웃입니다. 오늘은 GridLayout의 기본 사용법과 예제를 통해 어떻게 활용할 수 있는지 알아보겠습니다.GridLayout이란?GridLayout은 자식 뷰들을 행(row)과 열(column)로 나누어 정렬하는 레이아웃입니다. 여러 개의 요소를 규칙적으로 배치하고 싶을 때 매우 유용하며, 그리드 형태의 디자인을 손쉽게 구현할 수 있도록 도와줍니다.GridLayout은 아래와 같은 상황에서 유용합니다:이미지 갤러리, 상품 리스트 등 다수의 요소를 균일하게 배치해야 할 때.요소 간의 비율을 유지하며 화면을 나누어 배치하고 싶을 때.이제, GridLayout의 기..

ESP-IDF BLE 클라이언트 구현: GATTS 서버 검색부터 GATTC 데이터 읽기까지 완벽 가이드

지난 포스팅에서 다루었던 BLE 서버(Peripheral)가 데이터를 제공하는 수동적인 존재였다면, 이 데이터를 수집하고 가공하기 위해서는 능동적으로 주변 장치를 탐색하고 연결을 시도하는 BLE 클라이언트(Central)가 필요합니다. 상용 IoT 생태계에서는 스마트 워치나 환경 센서 노드가 서버가 되고, 이 데이터들을 수집하여 게이트웨이나 서버로 전송하는 메인 장치가 클라이언트 역할을 수행합니다. ESP-IDF 환경에서의 BLE 클라이언트 구현은 무선 주파수 영역을 스캔하는 GAP 설정부터, 발견된 서버의 속성 테이블을 분석하는 GATTC 인터페이스까지 촘촘한 비동기 상태 머신 구조를 요구합니다. 이번 글에서는 주변의 BLE 서버를 탐색하고, 특정 서비스와 특성 UUID를 추적하여 연결을 수립하는 마스..

Android FrameLayout 사용법 총정리 (개념 + 실전 예제 + Kotlin 코드)

안녕하세요, '소프트웨어 공장'에 오신 것을 환영합니다. 오늘은 안드로이드 애플리케이션 개발에서 많이 사용되는 레이아웃 중 하나인 FrameLayout에 대해 알아보도록 하겠습니다. 이 글에서는 FrameLayout의 개념, 사용 사례, 그리고 간단한 예제를 통해 그 사용법을 익혀보겠습니다.FrameLayout이란?FrameLayout은 안드로이드에서 가장 기본적인 레이아웃 중 하나입니다. 자식 뷰를 겹쳐서 배치할 수 있는 레이아웃으로, 주로 단순한 UI 구성 요소를 화면에 겹쳐서 표현할 때 사용됩니다. FrameLayout은 기본적으로 자식 뷰들이 겹쳐진 형태로 배치되며, 자식 뷰의 크기와 위치에 대한 세부 제어가 가능하지만, 단순히 한 개의 뷰를 중앙에 놓는 등 간단한 배치를 위해 주로 사용됩니다.F..

nRF52840 하드웨어 PWM 가이드: EasyDMA 시퀀스 플레이백과 LED 밝기 제어 소스 코드

이전 포스팅에서 다룬 nRF52 시리즈의 독자적 무선 프로토콜인 ESB(Enhanced ShockBurst) 운용법에 이어, 이번에는 임베디드 제어 시스템의 필수 물리 인터페이스이자 LED 밝기 및 모터 속도 제어의 핵심인 하드웨어 PWM(펄스 폭 변조) 드라이버의 시퀀스 플레이백 제어 기법을 살펴보겠습니다.임베디드 소프트웨어를 개발할 때 디바이스의 상태를 사용자에게 직관적으로 전달하는 '숨쉬기(Breathing) LED' 효과나 햅틱 모터의 미세 진동, 혹은 서보모터의 정밀한 각도 제어는 가장 기본적이면서도 자주 구현해야 하는 기능입니다. ARM Cortex-M4 코어를 탑재한 nRF52840 MCU는 이러한 타이밍 제어를 CPU의 리소스 소모 없이 완벽하게 처리할 수 있는 강력한 하드웨어 PWM 모듈..

ESP-IDF BLE 서버 구현: GATTS 및 GAP 이벤트 핸들러 기반 블루투스 통신 가이드(Advertising, Service, Characteristic 설정)

사물인터넷(IoT) 웨어러블 기기나 소형 센서 노드를 설계할 때 가장 먼저 고려해야 할 요소는 전력 소비입니다. 배터리 기반으로 수개월 이상 동작해야 하는 환경에서는 기존 Wi-Fi나 클래식 블루투스보다 저전력 무선 통신 기법인 BLE(Bluetooth Low Energy)가 필수적으로 사용됩니다. ESP32는 칩 내부에 하드웨어 BLE 컨트롤러를 내장하고 있어 효율적인 저전력 시스템을 구축하기에 최적의 조건을 갖추고 있습니다. 다만 ESP-IDF 환경에서는 아두이노와 달리 블루투스 프로토콜 스택인 Bluedroid의 생명 주기를 직접 제어하고, GAP와 GATT 인터페이스를 비동기 이벤트 핸들러 구조로 설계해야 하므로 초기 아키텍처를 정확히 이해하는 것이 중요합니다. 이번 글에서는 ESP32를 주변 장..

ESP-IDF HTTP 웹 서버 구현: esp_http_server 기반 핸들러 등록과 실무 예제

임베디드 장치를 외부에서 원격으로 제어하거나 내부 센서 데이터를 모니터링할 때 가장 직관적인 방법은 웹 브라우저를 활용하는 것입니다. ESP32는 강력한 Wi-Fi 스택을 내장하고 있어, 별도의 미들웨어 없이도 칩 자체를 하나의 경량 HTTP 서버로 구동할 수 있습니다. 아두이노 환경에서는 웹 서버를 구현할 때 문자열을 일일이 파싱하는 번거로움이 있었지만, ESP-IDF 환경에서는 전용 esp_http_server 컴포넌트를 제공하여 URI 라우팅과 메소드 관리를 구조체 형태로 깔끔하게 처리할 수 있습니다. 이번 글에서는 ESP-IDF의 핵심 컴포넌트를 활용해 HTTP 웹 서버를 구축하는 전체 과정을 살펴보고, 브라우저의 요청을 처리하는 비동기 핸들러 매핑 방식을 구체적으로 분석해 보겠습니다.핵심 요약 ..

ESP-IDF Wi-Fi 통신 구현: STA 클라이언트 및 AP 서버 모드 완벽 설정법

사물인터넷(IoT) 장비를 개발할 때 무선 네트워크 연결은 핵심 기능입니다. ESP32는 칩 내부에 2.4GHz Wi-Fi와 블루투스 컨트롤러를 하드웨어 레벨로 통합하고 있어, 별도의 통신 칩셋 없이도 강력한 네트워크 시스템을 구축할 수 있습니다. 아두이노 IDE 환경에서는 몇 줄의 함수 호출로 단순하게 연결을 제어했지만, ESP-IDF 환경에서는 내부 TCP/IP 스택(lwIP)과 이벤트 루프 시스템을 직접 제어하므로 초기 설정 구조를 명확히 이해해야 통신 유실 없는 상용 수준의 코드를 작성할 수 있습니다. 이번 글에서는 ESP32를 기존 공유기에 연결하는 STA(Station) 모드와 자체적인 무선 가상 네트워크를 만드는 AP(Access Point) 모드의 동작 원리를 알아보고, 실무에 바로 적용할..

ESP-IDF GPIO 사용법 총정리: LED 점멸, 버튼 입력, ISR 인터럽트 구현

임베디드 소프트웨어 개발에서 하드웨어 제어의 가장 기본이 되는 첫걸음은 GPIO(General Purpose Input/Output) 핀을 다루는 것입니다. 센서의 값을 읽어오거나, 모터를 구동하고, LED를 켜고 끄는 모든 행위가 결국 이 GPIO 제어에서 시작되기 때문입니다. 아두이노 환경에서는 pinMode()나 digitalWrite() 같은 단순한 API로 가볍게 제어할 수 있었지만, ESP-IDF 환경에서는 하드웨어 구조체 레벨의 설정을 다루기 때문에 조금 더 명확하고 정교한 접근이 필요합니다. 이번 글에서는 ESP-IDF 프레임워크를 기반으로 ESP32의 GPIO를 출력과 입력으로 설정하는 정석적인 방법부터, CPU 자원을 효율적으로 쓰기 위해 필수적인 인터럽트(Interrupt) 처리까지 ..

ESP-IDF 프로젝트 구조 완벽 이해: CMake 기반 ESP32 개발 시작하기

지난 글에서 VS Code와 ESP-IDF 개발 환경을 무사히 마쳤다면, 이제 본격적으로 나만의 임베디드 애플리케이션을 만들어볼 차례입니다. 아두이노 환경에서는 단 하나의 .ino 파일만으로 코딩이 가능했지만, 복잡한 대형 시스템 개발에 특화된 ESP-IDF는 빌드 시스템으로 CMake를 채택하고 있어 프로젝트 폴더 구조가 다소 낯설게 느껴질 수 있습니다. 프로젝트 구조를 정확히 이해하지 못하면 외부 라이브러리를 추가하거나 빌드 설정을 바꿀 때 핑거프린트 오류나 컴파일 에러로 고생하기 쉽습니다. 이번 글에서는 VS Code와 터미널을 이용해 새 프로젝트를 생성하는 방법부터 각 폴더와 핵심 파일들이 빌드 시스템 내에서 어떤 역할을 담당하는지 명확하게 정리해 보겠습니다.핵심 요약 3줄ESP-IDF 프로젝트는..

반응형