4강 / 20강
버스 넷 — GPIO · SPI · I²C · RS485
누가 어디에 붙고, 주소는 어떻게 갈리나
장치는 열넷이지만 말하는 법은 몇 가지뿐입니다. 이 강에서 그 몇 가지를 한자리에 놓습니다.
| 버스 | 쓰는 장치 | 여럿을 어떻게 가르나 |
|---|---|---|
| GPIO | 밸브 6 · 팬 2 · 스테퍼 · 리밋 · 키패드 | 핀 번호로 가른다 |
| PWM | TEC 2 · 부저 | 하드웨어 PWM 핀이 정해져 있다 (GPIO 12·13·18·19) |
| SPI | PT-1000 두 개 (MAX31865) | CS 핀을 따로 준다 |
| I²C | 유량계 2 | 주소로 가른다 — 여기서 사고가 난다 |
| RS485 | 연동펌프 7 · 플런저 | 슬레이브 번호 1~247 |
| Serial(USB) | 압력 제어기 2 | /dev/ttyUSB* — 번호가 바뀐다 |
버스를 여는 곳 — /boot/firmware/config.txt
dtparam=i2c_arm=on # 기본이 off 다
dtparam=i2c_arm_baudrate=400000 # 기본은 100000 (100 kHz)
dtparam=spi=on
enable_uart=1
dtoverlay=uart3 # RS485 포트를 더 열고 싶을 때 (Pi 4/5)
경로가 /boot/config.txt 가 아니라 /boot/firmware/config.txt 입니다 —
Bookworm 에서 옮겨졌습니다. 옛날 글을 보고 /boot/config.txt 를 고치면
아무 일도 일어나지 않습니다.
I²C 속도는 기본 100 kHz 입니다. 젖은 기계 안에서 I²C 선을 길게 끌면 CRC 오류가 나기 시작합니다(→ 14강). 속도를 올리기 전에 선을 짧게 하십시오.
배정표는 코드보다 먼저 만듭니다. 이 표에서 못 잡은 충돌은 납땜을 끝낸 뒤에 발견됩니다.
Python
브라우저에서 실행
🤔 확인 문제
유량계 두 개를 같은 I²C 버스에 달 수 없는 까닭은?
해설 I²C 는 주소로 장치를 가릅니다. 같은 주소가 둘이면 누구에게 말하는지 알 수 없습니다. 버스를 나누거나 멀티플렉서를 끼워야 합니다 — 부품을 사기 전에 알아야 하는 사실입니다.
🤔 확인 문제
/boot/config.txt 를 고쳤는데 아무 변화가 없다면?해설 Bookworm 에서 자리가 옮겨졌습니다. 인터넷의 옛 글을 보고 예전 경로를 고치면 조용히 아무 일도 안 일어납니다 — 오류조차 나지 않아서 찾기 어렵습니다.