실제 배포는 Raspberry Pi 4(raspberry_pi4_sht30)인데 다수 문서가 STM32를 "현재 단일보드"로 서술하던 드리프트를 교정(README/SYSTEM_OVERVIEW/ DEPLOYMENT_PLAN은 이미 Pi 기준). - SHT30_SENSOR2_SETUP.md: Pi 기본 전면 재작성, STM32는 마이그레이션 대안 - README.md / wiring_diagram.md / INSTALL_PI_SERVER.md: Pi 기본으로 재구성 - ops_checks.php / security_evidence.php: /etc/sht30-sensor.env → config_local.py - api/sensor_data.php: 헤더 예시 device_id rpi4-sht30-01 - examples/*.html: device_id 교정 + 구식 env 예제 폐기 배너 - 전압 경고 정정: "5V=소자 손상"은 틀림(모듈 2.4~5.5V). Pi에서 3.3V 쓰는 이유는 Pi GPIO 3.3V 전용(5V 시 SDA/SCL 5V → Pi 손상)
86 lines
4.3 KiB
Markdown
86 lines
4.3 KiB
Markdown
# SHT30 온습도 센서 I2C 배선도 (Raspberry Pi 4 기본 / STM32 변형)
|
||
|
||
Sensirion SHT30(한진데이터 P4422-3 모듈) I2C 배선 요약입니다.
|
||
|
||
> **현재 배포 = Raspberry Pi 4 Model B.** Pi 에서는 SHT30 을 40핀 헤더 I2C 버스 1에 연결합니다:
|
||
> **VCC→3.3V(핀 1), GND→핀 6, SDA→GPIO2/핀 3, SCL→GPIO3/핀 5, ADDR→GND(0x44)**, SDA/SCL 4.7kΩ 풀업→3.3V(모듈 내장 시 생략).
|
||
> 상세 도해는 `deploy/03_pi_b_sht30_id2/WIRING.html`(SVG 핀맵) 및 [SHT30_SENSOR2_SETUP.md](./SHT30_SENSOR2_SETUP.md) §2.1 을 보세요.
|
||
> `sensor_id=2`, `device_id=rpi4-sht30-01`, `raspberry_pi4_sht30/config.py REPORT_INTERVAL=300`(5분).
|
||
>
|
||
> **아래 §는 STM32F407VGT6 변형**(마이그레이션 트랙 `firmware/`, 하드웨어 미검증·현재 배포와 무관)의 I2C1(PB6/PB7) 배선입니다. 상세 핀맵·전원·클럭원은 [firmware/docs/HARDWARE.md](../firmware/docs/HARDWARE.md) §3.
|
||
|
||
## 센서 동작 개요
|
||
|
||
```
|
||
SHT30 (I2C, 7-bit 주소 0x44)
|
||
명령 0x2C06 (high-repeatability, clock-stretch off)
|
||
→ 약 20ms 대기 → 6바이트 read (T 2B + CRC, RH 2B + CRC)
|
||
→ 펌웨어가 온도(℃)/상대습도(%)로 변환
|
||
```
|
||
|
||
SHT30 모듈은 3.3V 단일 전원으로 동작합니다. SCL/SDA는 오픈드레인이므로 외부 풀업이 필요합니다(모듈에 내장 풀업이 있으면 생략).
|
||
|
||
---
|
||
|
||
## 필요 부품 (최소 구성)
|
||
|
||
| 부품 | 규격 | 용도 |
|
||
|------|------|------|
|
||
| STM32F407VGT6 보드 | LQFP-100, Cortex-M4F | 메인 컨트롤러 (`sht30_fw`) |
|
||
| SHT30 온습도 모듈 | 한진데이터 P4422-3 (I2C) | 온도/습도 측정 |
|
||
| 풀업 저항 | **4.7kΩ × 2** | SCL/SDA 풀업 (모듈 내장 풀업 시 생략) |
|
||
| LAN8720 PHY 모듈 | RMII | 유선 Ethernet |
|
||
| 3.3V 전원 | - | MCU/PHY/SHT30 공통 레일 |
|
||
| 점퍼 와이어 | - | 연결 |
|
||
|
||
---
|
||
|
||
## I2C 배선 (STM32 I2C1)
|
||
|
||
| STM32 핀 | 신호 | AF | SHT30 핀 | 비고 |
|
||
|----------|------|----|----------|------|
|
||
| **PB6** | `I2C1_SCL` | AF4 | SCL | 오픈드레인, 4.7kΩ 풀업 → 3.3V |
|
||
| **PB7** | `I2C1_SDA` | AF4 | SDA | 오픈드레인, 4.7kΩ 풀업 → 3.3V |
|
||
| 3.3V | 전원 | - | VDD | 공통 3.3V 레일 |
|
||
| GND | 접지 | - | GND | 공통 GND |
|
||
|
||
- 7-bit 주소: **0x44** (`APP_SHT30_I2C_ADDR`). ADDR 핀을 GND에 연결한 기본값. ADDR을 VDD에 연결하면 0x45.
|
||
- I2C 속도: 100kHz(Standard) 권장.
|
||
|
||
### 회로도
|
||
|
||
```
|
||
SHT30 모듈 STM32F407
|
||
┌────────┐
|
||
│ VDD ──┼────────────── 3.3V ──┬──[4.7kΩ]──┐ ┌──[4.7kΩ]── 3.3V
|
||
│ SCL ──┼────────────── PB6 ───┘ │ │
|
||
│ SDA ──┼────────────── PB7 ────────────────┼───┘
|
||
│ GND ──┼────────────── GND │
|
||
│ ADDR ─┼── GND (주소 0x44; VDD 면 0x45) │
|
||
└────────┘
|
||
```
|
||
|
||
> ADDR 핀 결선으로 0x44(ADDR→GND) / 0x45(ADDR→VDD)가 결정됩니다. 본 설계는 **0x44** 고정입니다.
|
||
|
||
---
|
||
|
||
## 동작 확인
|
||
|
||
펌웨어는 USART3(PD8 TX / PD9 RX, AF7, 115200 8N1) 콘솔에 측정/보고 로그를 출력합니다. 첫 부팅 후 다음을 확인합니다.
|
||
|
||
- I2C1 초기화 및 SHT30 주소 0x44 응답
|
||
- 첫 측정값(온도/습도) 및 startup 보고
|
||
- 네트워크/SNTP/TLS 핸드셰이크 → 서버 200 응답
|
||
|
||
정상 측정 범위(벗어나면 펌웨어가 `metric_status="out_of_range"` 로 표시): 온도 `[-40, 125]°C`, 상대습도 `[0, 100]%`.
|
||
|
||
> 참고: `out_of_range` 는 **펌웨어 전용 타당성(plausibility) 분류**입니다. 서버는 이 값을 무시하고 운영 임계(`METRIC_*`)로 재판정하므로, DB `leak_sensor_metric.metric_status` 에는 `normal`/`high_temp`/`low_temp`/`high_humidity`/`low_humidity` 만 저장되며 `out_of_range` 는 저장되지 않습니다.
|
||
|
||
---
|
||
|
||
## 주의사항
|
||
|
||
- SCL/SDA는 오픈드레인이므로 **외부 풀업(4.7kΩ)** 없이 동작하지 않습니다(모듈 내장 풀업이 있는 경우만 예외).
|
||
- I2C1(PB6/PB7)과 RMII(PB11/PB12/PB13)는 같은 PB 포트지만 핀이 분리되어 충돌이 없습니다.
|
||
- 케이블이 길면(1m 이상) I2C 풀업을 더 낮은 값(예 2.2kΩ)으로 조정하거나 속도를 낮춥니다.
|
||
- 측정 주기는 펌웨어 `APP_SHT30_REPORT_INTERVAL_SEC`(기본 300초)로 설정합니다.
|