56 lines
1.4 KiB
Markdown
56 lines
1.4 KiB
Markdown
# 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` 안의 정의를 기준으로 합니다.
|