Makefile을 사용하여 컴파일하고 실행합니다. 추가하고 싶은 소스 파일은 Makefile
의 SRCS
변수에 추가하면 됩니다.
- 컴파일:
make
- 실행:
./program
- 빌드 결과물 삭제:
make clean
안전한 패키지 관리를 위해 가상환경을 꼭 활성화한 상태에서 패키지를 설치하도록 합시다.
source ./.venv/bin/activate
- 변수명은
snake_case
로 작성합니다. - 함수명은
snake_case
로 작성합니다. - 상수는
UPPER_SNAKE_CASE
로 작성합니다. - 파일명은
snake_case
로 작성합니다. - 들여쓰기는 4칸을 사용합니다.
- 부품명은 띄우지 않고 한 단어로 표기합니다. (soilmoisture, dotmatrix, lightsensor, ...)
- LCD:
50000
- TTS (Text-to-Speech):
50001
- 대화 프로그램 (MOTION_DETECTED):
50002
- 웹소켓 프로그램:
50003
터미널에서 gpio readall
을 입력하면 핀 구조를 간단히 보여줍니다. 아래 표는 그것을 수정한 것입니다.
VSCode에서 Ctrl + Shift + V
를 누르시면 아래의 표를 깔끔하게 보실 수 있습니다. GitHub에서는 그냥 보입니다.
할당 | 이름 | 핀 | 핀 | 이름 | 할당 |
---|---|---|---|---|---|
브레드보드 왼쪽 (+) | 3.3v | 1 | 2 | 5v | 브레드보드 오른쪽 (+) |
LCD (SDA) | SDA.1 | 3 | 4 | 5v | X |
LCD (SCL) | SCL.1 | 5 | 6 | 0v | 브레드보드 (-) |
X | GPIO. 7 | 7 | 8 | TxD | X |
브레드보드 (-) | 0v | 9 | 10 | RxD | X |
모션센서 (DATA) | GPIO. 0 | 11 | 12 | GPIO. 1 | X |
조도센서 (DATA) | GPIO. 2 | 13 | 14 | 0v | X |
온습도센서 (DATA) | GPIO. 3 | 15 | 16 | GPIO. 4 | X |
X | 3.3v | 17 | 18 | GPIO. 5 | X |
도트매트릭스 (DIN), MCP3008 (DIN) | MOSI | 19 | 20 | 0v | X |
MCP3008 (DOUT) | MISO | 21 | 22 | GPIO. 6 | X |
도트매트릭스 (CLK), MCP3008 (CLK) | SCLK | 23 | 24 | CE0 | 도트매트릭스 (CS) |
X | 0v | 25 | 26 | CE1 | MCP3008 (CS/SHDN) |
X | SDA.0 | 27 | 28 | SCL.0 | X |
X | GPIO.21 | 29 | 30 | 0v | X |
X | GPIO.22 | 31 | 32 | GPIO.26 | X |
X | GPIO.23 | 33 | 34 | 0v | X |
X | GPIO.24 | 35 | 36 | GPIO.27 | X |
X | GPIO.25 | 37 | 38 | GPIO.28 | X |
X | 0v | 39 | 40 | GPIO.29 | X |
핀 | 할당 |
---|---|
VCC | 브레드보드 오른쪽 (+) 5v |
GND | 브레드보드 (-) 0v |
SDA | 라즈베리파이 (3) SDA.1 |
SCL | 라즈베리파이 (5) SCL.1 |
LCD는 I2C 모듈이 탑재되어 있는데, 이를 활용하기 위해서는 파이썬 라이브러리 RPLCD
를 사용해야 하므로 파이썬으로 코딩하였습니다.
C언어로 프로그래밍된 다른 코드들과 통신하기 위해 로컬호스트 소켓 통신을 사용하였습니다. 서버 포트는 50000
이고, cronjob
으로 부팅 시 실행됩니다.
핀 | 할당 |
---|---|
CH0 | 토양습도센서 (DATA) |
CH1 | X |
CH2 | X |
CH3 | X |
CH4 | X |
CH5 | X |
CH6 | X |
CH7 | X |
VDD | 브레드보드 왼쪽 (+) 3.3v |
VREF | 브레드보드 왼쪽 (+) 3.3v |
AGND | 브레드보드 (-) 0v |
CLK | 라즈베리파이 (23) SCLK |
DOUT | 라즈베리파이 (21) MISO |
DIN | 라즈베리파이 (19) MOSI |
CS/SHDN | 라즈베리파이 (26) CE1 |
DGND | 브레드보드 (-) 0v |
MCP3008을 통해 SPI0.1로 연결합니다.
핀 | 할당 |
---|---|
VCC | 브레드보드 왼쪽 (+) 3.3v |
GND | 브레드보드 (-) 0v |
DATA | MCP3008 (CH0) |
SPI0.0으로 연결합니다.
핀 | 할당 |
---|---|
VCC | 브레드보드 오른쪽 (+) 5v |
GND | 브레드보드 (-) 0v |
DIN | 라즈베리파이 (19) MOSI |
CS | 라즈베리파이 (24) CE0 |
CLK | 라즈베리파이 (23) SCLK |
핀 | 할당 |
---|---|
VCC | 브레드보드 오른쪽 (+) 5v |
GND | 브레드보드 (-) 0v |
DATA | 라즈베리파이 (11) GPIO. 0 |
WiringPi에서 연결하면 GPIO. 3
으로 연결하지만, 파이썬 모듈 adafruit-circuitpython-dht
에서는 BCM 기준으로 22번 핀입니다.
우리는 WiringPi를 사용하므로 3번 핀이라고 생각하면 됩니다.
핀 | 할당 |
---|---|
VCC | 브레드보드 오른쪽 (+) 5v |
GND | 브레드보드 (-) 0v |
DATA | 라즈베리파이 (15) GPIO. 3 |
이미 도트매트릭스와 토양습도센서로 SPI0을 다 사용했으므로, GPIO를 통해 밝음/어두움만 감지하도록 조도센서를 구현했습니다. 밝음/어두움을 가르는 기준이 '사람이 책을 읽을 수 있는 최소한의 밝기'와 비슷한데, 이는 실내에서 키우는 식물의 광합성 조건과 거의 비슷하기 때문에, 그대로 사용해도 좋다고 판단했습니다.
핀 | 할당 |
---|---|
VCC | 브레드보드 왼쪽 (+) 3.3v |
GND | 브레드보드 (-) 0v |
DATA | 라즈베리파이 (13) GPIO. 2 |
최대한 수업 시간에 배운 내용을 바탕으로 코드를 짜되, 수업시간에 배우지 않은 복잡한 센서/액츄에이터 코딩이 필요한 상황에서는 외부 라이브러리를 사용해 완성도를 높이도록 합시다.
수업시간에 배우지 않은 내용이거나, 구현이 힘든 부분은 WiringPi라는 라이브러리를 사용할 겁니다. WiringPi 구현 예시 코드들을 참고하여 코드를 짜 봅시다.
우리가 사용하는 부품 중에는 LCD가 있습니다. 이 LCD에는 I2C 모듈이 탑재되어 있어 배선이 쉽지만, C언어로 코딩하기 매우 어렵습니다. 따라서 LCD 관련 함수를 제공하는 파이썬 라이브러리인 RPLCD
를 사용합시다.