라즈베리파이와 pigpio 라이브러리를 이용해
버튼 입력, PWM, 비동기 이벤트, I²C LCD 제어를 모두 배우는 실습 프로젝트입니다.
짧게 버튼을 누르면 LED 밝기를 바꾸고,
길게 누르면 PWM 주파수를 변경합니다.
변경된 상태는 I²C LCD(1602) 화면에 실시간으로 표시됩니다.
💡 핵심 목표:
하드웨어 신호 제어 + 비동기 이벤트 처리 + LCD 출력까지
임베디드 시스템의 기본 구조를 완성한다.
| Day | 주제 | 학습 내용 |
|---|---|---|
| 1️⃣ | 버튼으로 LED 제어 | GPIO 출력, 인터럽트 콜백 |
| 2️⃣ | PWM으로 밝기 조절 | 듀티사이클과 주파수 개념 |
| 3️⃣ | 롱프레스 감지 | tick 시간차 계산, 비동기 콜백 |
| 4️⃣ | LCD에 상태 표시 | I²C 통신, LCD 초기화, 데이터 전송 |
💻 Raspberry Pi 4B / 3B+
⚙️ OS: Raspberry Pi OS (Debian 기반)
💬 언어: C
🔧 라이브러리: pigpio (libpigpiod_if2)
📟 디스플레이: 1602 I²C LCD (PCF8574 백팩)
💡 GPIO — 디지털 입출력 제어 (HIGH / LOW)
💡 PWM — 듀티비(밝기), 주파수(점멸속도) 조절
💡 Callback — 버튼 이벤트를 비동기로 처리
💡 Tick — pigpio 내부 마이크로초 단위 타이머
💡 I²C — SDA/SCL 2선 직렬 통신
💡 LCD 제어 — RS(명령/데이터), E펄스, 4비트 전송 방식
✨ 버튼 이벤트를 하드웨어 인터럽트로 처리
✨ tick 시간차 계산으로 롱프레스 감지
✨ PWM 주파수·듀티비 개념 이해
✨ I²C LCD 제어 순서(초기화 → 명령 → 데이터 출력) 학습