113 lines
6.2 KiB
Plaintext
113 lines
6.2 KiB
Plaintext
[2025-09-20] ESP32_R3.1 / MPINO_R1.4
|
||
|
||
ESP32 I²C↔MQTT Bridge & MPINO Control — README
|
||
이 문서는 현 스케치 기준으로 사용하는
|
||
시리얼 명령어(Serial CLI) 와 MQTT 토픽/명령(페이로드 형식) 을 한눈에 정리한 것입니다.
|
||
베이스 토픽, Wi-Fi·MQTT 설정은 시리얼 CLI로 변경할 수 있으며 NVS에 영구 저장됩니다.
|
||
________________________________________
|
||
개요
|
||
• ESP32가 I²C 마스터로 MPINO 슬레이브를 폴링하여 센서/설정 프레임을 수신하고 MQTT로 퍼블리시합니다.
|
||
• 외부에서 MQTT 명령을 보내면 ESP32가 I²C로 3바이트 명령을 슬레이브에 전달합니다.
|
||
• 설정은 모두 Preferences(NVS) 에 저장되어 전원 재인가 후에도 유지됩니다.
|
||
• 저장된 Wi-Fi AP가 1개도 없으면 부팅 시 자동으로 CONFIG 모드에 진입합니다.
|
||
________________________________________
|
||
시리얼 명령어 (Serial CLI)
|
||
명령 형식 설명
|
||
HELP HELP 가능한 모든 명령과 사용법을 표시
|
||
CONFIG CONFIG 설정 모드 진입 (Wi-Fi/MQTT 연결·I²C 폴링 일시 중지)
|
||
EXIT EXIT 또는 CONFIG OFF 설정 모드 종료, 정상 동작 재개
|
||
LIST LIST 저장된 Wi-Fi AP 후보 목록 표시(최대 6개)
|
||
ADD ADD ssid,password AP 후보 추가
|
||
EDIT EDIT index ssid,password AP 후보 수정
|
||
DELETE DELETE index AP 후보 삭제
|
||
CLEAR CLEAR AP 후보 전체 삭제
|
||
MQTTSET MQTTSET server,user,pass,topic MQTT 설정 저장• server는 host 또는 host:port 형식• topic은 베이스 토픽
|
||
MQTTINFO MQTTINFO 현재 MQTT 설정과 파생 토픽(status/config/command/…) 표시
|
||
REQINFO REQINFO REQID와 REQTIME 현재값 요약 표시
|
||
REQID REQID [start,end] 폴링 ID 범위 설정 또는 인자 없이 조회
|
||
REQTIME REQTIME [ms] 폴링 주기(ms) 설정 또는 인자 없이 조회 (하한 200 ms)
|
||
메모
|
||
• 모든 설정은 NVS에 영구 저장됩니다.
|
||
• REQTIME 간격마다 I²C를 읽고 유효 프레임이면 바로 MQTT 발행합니다.
|
||
• 슬레이브가 SENSOR/CONFIG 프레임을 번갈아 보낸다면, 특정 단일 토픽만 보면 체감 주기가 2 REQTIME처럼 보일 수 있습니다.
|
||
예시
|
||
CONFIG
|
||
ADD MyAP,myPw
|
||
MQTTSET qideun.com,,,"selimcns"
|
||
REQTIME 1000
|
||
REQID 1,16
|
||
EXIT
|
||
________________________________________
|
||
MQTT 토픽
|
||
아래 예시는 베이스 토픽이 selimcns인 경우입니다.
|
||
베이스 토픽은 MQTTSET …,<base> 로 변경하면 모든 파생 토픽이 함께 바뀝니다.
|
||
퍼블리시(ESP32 → 브로커)
|
||
• selimcns/status — 센서값 JSON
|
||
• {
|
||
• "EC":123, "pH":6.54,
|
||
• "airTemperature":23.45, "airHumidity":55.67,
|
||
• "ADC0":0, "ADC1":0, "ADC2":0,
|
||
• "soilTemp1":21.34, "soilTemp2":22.01,
|
||
• "l_minute":0, "pumpPin":0, "valvePin":0,
|
||
• "waterLevelPin":0, "rainSensor":0
|
||
• }
|
||
• selimcns/config — 구성(설정 프레임) JSON
|
||
• {
|
||
• "currentMode":0,
|
||
• "cycleTime":0,
|
||
• "cycleRestartDelay":0,
|
||
• "valveDelay":0,
|
||
• "smStart":0, "smStop":0
|
||
• }
|
||
• selimcns/bridge — LWT (retain)
|
||
연결 시 "online" 발행, 비정상 종료 시 브로커가 "offline" 게시.
|
||
• selimcns/speed/response — 핑 응답(ECHO)
|
||
구독(브리지 ← 외부)
|
||
• selimcns/command — 명령 토픽
|
||
o 페이로드 형식: 문자열 "ID,VALUE" (쉼표로 구분된 10진 정수 2개, 공백 없음)
|
||
o 동작: ESP32가 I²C로 3바이트 [ID][VALUE LSB][VALUE MSB] 를 슬레이브에 전송
|
||
o 권장: retain 사용 금지(재접속 시 재실행 방지)
|
||
• selimcns/speed — 핑용 ECHO 입력
|
||
수신 페이로드를 그대로 selimcns/speed/response에 재전송
|
||
________________________________________
|
||
명령 ID 매핑 (슬레이브 receiveData() 기준)
|
||
ID 의미 VALUE (단위) 비고
|
||
1 모드 전환 0=MANUAL, 1=AUTO, 2=AI 전환 시 stopPumpSequence() 수행
|
||
2 펌프 제어 0=OFF, 1=ON AI 모드에서만 유효. 밸브 선개방+지연 후 ON
|
||
3 cycleTime 초 펌프 ON 유지 시간 (최대 65,535 s ≈ 18.2 h)
|
||
4 cycleRestartDelay 초 펌프 OFF 유지 시간
|
||
5 valveDelay 초 밸브 개방 후 펌프 ON까지 딜레이
|
||
6 smStart 0~1023 자동 모드 ON 임계 (3개 ADC 중 2개 초과)
|
||
7 smStop 0~1023 자동 모드 OFF 임계 (3개 ADC 중 2개 미만)
|
||
8 holdDuration 초 조건 유지 시간(채터링 방지)
|
||
설정 명령(3~8)을 보내면 슬레이브가 configData를 갱신·CRC 재계산 후 I²C로 내보내며,
|
||
브리지가 곧바로 <base>/config에 새 값을 퍼블리시합니다. 이를 간접 ACK 로 활용하세요.
|
||
________________________________________
|
||
사용 예시
|
||
# 자동 모드로 전환
|
||
mosquitto_pub -h qideun.com -t selimcns/command -m "1,1"
|
||
|
||
# 자동 모드 파라미터 설정
|
||
mosquitto_pub -h qideun.com -t selimcns/command -m "6,850" # smStart
|
||
mosquitto_pub -h qideun.com -t selimcns/command -m "7,600" # smStop
|
||
mosquitto_pub -h qideun.com -t selimcns/command -m "5,5" # valveDelay 5s
|
||
mosquitto_pub -h qideun.com -t selimcns/command -m "3,300" # cycleTime 5분
|
||
mosquitto_pub -h qideun.com -t selimcns/command -m "4,900" # restartDelay 15분
|
||
|
||
# AI 모드에서 펌프 ON → OFF
|
||
mosquitto_pub -h qideun.com -t selimcns/command -m "1,2" # AI 모드
|
||
mosquitto_pub -h qideun.com -t selimcns/command -m "2,1" # 펌프 ON
|
||
mosquitto_pub -h qideun.com -t selimcns/command -m "2,0" # 펌프 OFF
|
||
|
||
# 상태/설정 모니터링
|
||
mosquitto_sub -h qideun.com -t selimcns/status
|
||
mosquitto_sub -h qideun.com -t selimcns/config
|
||
________________________________________
|
||
참고 & 주의사항
|
||
• 베이스 토픽은 MQTTSET의 마지막 인자로 설정합니다. 변경 시 모든 파생 토픽이 자동 갱신됩니다.
|
||
• REQTIME은 I²C 폴링 주기입니다. 슬레이브가 SENSOR/CONFIG를 번갈아 보낼 경우, 특정 단일 토픽 기준 체감 주기가 2 × REQTIME처럼 보일 수 있습니다. 필요 시 REQTIME을 절반으로 조정하거나(간단), 코드에서 한 사이클에 2회 폴링하도록 변경할 수 있습니다.
|
||
• 명령 토픽은 retain 금지를 권장합니다(재접속 시 동일 명령 재적용 방지).
|
||
• 타이밍 명령(3,4,5,8)의 단위는 초, 내부에서는 ms로 변환되어 사용됩니다.
|
||
• smStart > smStop(히스테리시스)을 권장합니다.
|
||
• 네트워크가 끊기거나 CRC 에러가 나면 해당 주기의 MQTT 발행은 스킵됩니다(로그 확인).
|