# Linux Kernel Driver 기반 시계와 불쾌지수 표시기 Raspberry Pi 4에서 커널 모듈과 유저 프로그램을 나눠 작성한 임베디드 프로젝트입니다. 커널 모듈은 GPIO, I2C, 센서 입력을 처리합니다. 유저 프로그램은 커널 모듈에서 값을 읽어 OLED에 시간, 온습도, 불쾌지수를 표시합니다. ## 사용한 것 - `C` - `Linux Kernel Module` - `GPIO` - `I2C` - `ioctl` - `DS1302` - `DHT11` - `SSD1306` - `Rotary Encoder` ## 하드웨어 - Raspberry Pi 4 - DS1302 RTC - DHT11 온습도 센서 - 로터리 엔코더 - I2C OLED - 8채널 LED ## 파일 - `driver.c`: 커널 모듈 코드 - `application.c`: OLED 화면과 불쾌지수 계산 코드 - `Makefile`: 커널 모듈 빌드 설정 ## 동작 - DS1302에서 시간을 읽습니다. - DHT11에서 온도와 습도를 읽습니다. - 로터리 엔코더 입력으로 화면 페이지를 바꿉니다. - 커널 모듈은 character device를 만들고 `read/write/ioctl` 인터페이스를 제공합니다. - 유저 프로그램은 커널 모듈에서 받은 값으로 OLED 화면을 갱신합니다. - 불쾌지수 단계에 따라 LED 출력을 바꿉니다. ## 빌드 ```bash make sudo insmod driver.ko gcc -o application application.c sudo ./application ``` ## 메모 - 로터리 엔코더 입력은 커널 쪽에서 디바운싱합니다. - 센서와 디스플레이 핀은 `driver.c` 안의 정의를 기준으로 합니다.