POSA_LEAKSMS/docs/wiring_diagram.md
유창욱 90f121e14c chore: import codebase with security hardening
SHT30 온습도 모니터링 시스템 전체 소스(서버 PHP, STM32 펌웨어, SQL, 테스트).
전체 코드리뷰에서 도출된 보안 하드닝 10건 반영:
- 요청 서명 HMAC-SHA256 전환(펌웨어 sig.c/서버 config.php/호스트 패리티 동시)
- 재전송 방어 + 기본 API_KEY fail-closed + 디바이스 문자열 정제(api/sensor_data.php)
- 오프라인 SMS 중복 발송 경합 제거(cron_heartbeat.php, 원자적 선점)
- CSV 수식 주입 방지(monthly_report.php), 감사로그 회전 락(retention_cleanup.php)
- 브루트포스 카운터 원자화(login.php), 예시 TOTP 비밀키 무효화, 마이그레이션 멱등화

_backup/(하드코딩 실 비밀값 포함)·config.local.php·런타임 상태는 .gitignore 제외.
2026-06-20 09:37:40 +09:00

79 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SHT30 온습도 센서 ↔ STM32F407VGT6 I2C 배선도
Sensirion SHT30(한진데이터 P4422-3 모듈)을 STM32F407VGT6의 I2C1 버스에 연결합니다. 단일 보드 `sht30_fw`(`sensor_id=2`, `device_id=stm32-sht30-01`)가 5분 주기로 온습도를 측정해 유선 Ethernet/TLS로 서버에 보고합니다.
상세 핀맵·전원·클럭원은 [firmware/docs/HARDWARE.md](../firmware/docs/HARDWARE.md) §3을 따릅니다. 본 문서는 SHT30 I2C 결선 요약입니다.
## 센서 동작 개요
```
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]%`.
---
## 주의사항
- SCL/SDA는 오픈드레인이므로 **외부 풀업(4.7kΩ)** 없이 동작하지 않습니다(모듈 내장 풀업이 있는 경우만 예외).
- I2C1(PB6/PB7)과 RMII(PB11/PB12/PB13)는 같은 PB 포트지만 핀이 분리되어 충돌이 없습니다.
- 케이블이 길면(1m 이상) I2C 풀업을 더 낮은 값(예 2.2kΩ)으로 조정하거나 속도를 낮춥니다.
- 측정 주기는 펌웨어 `APP_SHT30_REPORT_INTERVAL_SEC`(기본 300초)로 설정합니다.