RS-485 가스 센서 연동 LED 모니터링 시스템
ESP32C/C++ArduinoModbus RTURS-485MQTTLED 매트릭스FreeRTOS
가연성 가스, 산소, 황화수소, 일산화탄소 센서의 측정값을 수집해 LED 화면에 표시하고 MQTT로 전송하는 모니터링 시스템을 개발했습니다. ESP32에서 RS-485 센서 통신, 화면 출력, 네트워크 연결 상태를 처리하는 구조를 구성했습니다.


개발 범위
- ESP32 기반 센서 수집·표시 펌웨어 개발
- Modbus RTU 데이터 파싱, CRC 검사, 타임아웃과 재시도 처리
- 가스명·측정값·단위를 구분하는 4분할 화면 구성
- Wi-Fi·MQTT 연동과 JSON 데이터 전송
- 설정한 임계값에 따른 색상 변경·깜빡임 표시
주요 구현 내용
센서 수집과 화면 표시
4종 가스 센서를 Modbus RTU로 순차 조회하고, 각 센서의 이름·값·단위를 LED 화면에 표시했습니다. 센서 폴링은 500ms, 화면 값 갱신은 1초 주기로 설정했습니다.
| 센서 | 표시 정보 |
|---|---|
| COMB | 가연성 가스 농도, %LEL |
| O2 | 산소 농도, %Vol |
| H2S | 황화수소 농도, ppm |
| CO | 일산화탄소 농도, ppm |
CRC-16 검증, 최대 3회 재시도, 타임아웃 처리를 구성했습니다. 센서 수집과 화면 렌더링을 RTOS 태스크로 분리하고, 오프스크린 버퍼에서 프레임을 준비해 갱신하도록 했습니다.
네트워크 연동과 상태 표시
수집한 데이터를 JSON으로 구성해 MQTT 브로커로 전송합니다. Wi-Fi·MQTT 연결이 끊어지면 재연결하도록 했으며, 데이터 버퍼링과 연결 복구 후 전송, Watchdog 처리를 적용했습니다. 설정한 임계값 조건에 따라 표시 색상과 깜빡임을 바꾸고, 부저 연동을 확장할 수 있는 구조를 구성했습니다.
시스템 구성
[4종 가스 센서]
↓ RS-485 통신
[ESP32 제어 보드]
├→ LED 드라이버 → [128×64 LED Matrix]
└→ WiFi → MQTT Broker → [IoT 플랫폼]
| 구분 | 사용 기술·구성 |
|---|---|
| MCU | ESP32 |
| 표시 장치 | RGB LED 매트릭스, 4분할 표시 |
| 센서 연결 | RS-485 출력 가스 센서 4종, RS-485–TTL 변환기 |
| 펌웨어 | C/C++, Arduino Framework, Arduino IDE |
| 센서 통신 | ModbusMaster, Modbus RTU |
| 화면 처리 | Adafruit GFX Library, 프레임버퍼 |
| 네트워크 | Wi-Fi Library, PubSubClient, MQTT |
| 멀티태스킹 | FreeRTOS |
| 전원 구성 | ESP32 5V, 센서용 별도 전원 |
구현 화면

4종 가스의 측정값을 구분해 표시하는 LED 화면입니다.

가스 센서와 RS-485 통신 인터페이스 구성입니다. 센서 데이터 수집, 현장 표시, 서버 전송을 연결하는 펌웨어 구현에 초점을 맞췄습니다.