

환경 모니터링은 현대 농업, 스마트 온실, 연구실 및 정밀 농업에서 중요한 역할을 합니다. 많은 IoT 프로젝트가 기본적인 센서 통합을 보여 주지만, 맞춤형 하드웨어, 임베디드 펌웨어, 무선 통신 및 실시간 데이터 시각화를 결합한 완전한 엔드투엔드 솔루션을 제공하는 프로젝트는 많지 않습니다.
이 프로젝트에서 저는 SenseView라는 플랫폼을 설계하고 구축했습니다. 이 플랫폼은 ESP32-C6 마이크로컨트롤러와 Zigbee 무선 통신을 중심으로 하는 모듈형 IoT 환경 모니터링 플랫폼입니다. 시스템은 온도, 습도, 대기압, 광도, 토양 수분, 이산화탄소(CO₂), 배터리 전압 등의 환경 변수를 지속적으로 측정한 후, 데이터를 무선으로 중앙 게이트웨이에 전송합니다.
데이터를 클라우드 서비스로 직접 전송하는 대신, 이 플랫폼은 다음으로 구성된 확장 가능한 엣지-클라우드 아키텍처를 사용합니다: Zigbee2MQTT, Mosquitto MQTT, Telegraf, InfluxDB, 및 Grafana. 이를 통해 실시간 시각화, 과거 데이터 분석 및 장기 데이터 저장이 가능합니다.
센서, 전원 관리 회로, 배터리 모니터링 및 통신 인터페이스를 소형의 모듈형 장치에 통합하기 위해 맞춤형 2층 PCB를 설계했습니다. 이 프로젝트는 저전력 동작, 확장성, 추가 센서 또는 향후 IoT 배포 환경과의 손쉬운 통합을 중점적으로 다룹니다.
이 프로젝트는 원래 플라즈마 처리 종자 연구를 위한 IoT 기반 환경 모니터링에 관한 석사 학위 논문의 일부로 개발되었습니다. 생물학적 실험은 본 작업의 범위에 포함되지 않았지만, 완성된 플랫폼은 농업, 연구실, 온실, 환경 모니터링 및 다양한 기타 IoT 애플리케이션에 적합한 유연한 모니터링 시스템으로 활용할 수 있습니다.
주요 구성 요소
소프트웨어

제작을 시작하기 전에 시스템 작동 방식을 간단히 살펴보겠습니다.
SenseView는 맞춤형 하드웨어, 임베디드 펌웨어, Zigbee 무선 통신 및 로컬 데이터 파이프라인을 결합하여 환경 상태를 실시간으로 모니터링합니다.
ESP32-C6 센서 노드는 여러 센서에서 데이터를 수집하고 Zigbee를 통해 무선으로 전송합니다. 데이터는 Zigbee 코디네이터가 수신한 뒤 MQTT를 통해 전달되고, InfluxDB에 저장되며, 마지막으로 Grafana 대시보드를 사용해 시각화됩니다.
이 모듈형 아키텍처를 사용하면 향후 추가 센서나 여러 센서 노드로 시스템을 쉽게 확장할 수 있습니다.
시스템 개요
센서
↓
ESP32-C6
↓
Zigbee
↓
MQTT
↓
InfluxDB
↓
Grafana
다음 단계에서는 시스템의 각 부분을 자세히 살펴보겠습니다.




SenseView 센서 노드는 ESP32-C6 를 중심으로 구성되며, 환경 및 식물 모니터링을 위해 네 개의 센서를 결합합니다:
이 중 BME680, TSL2591 및 SCD40은 I²C 버스를 공유하며토양 수분 센서와 배터리 모니터는 ESP32-C6의 아날로그 입력을 사용합니다. 또한 이 노드는 관개 밸브를 제어하기 위한 GPIO 출력을 제공합니다.
펌웨어에서 사용하는 주요 핀 할당은 다음과 같습니다:
배선 참고: 전체 배선 및 핀 배치도는 SenseView GitHub repository의 회로도를 참조하세요.
센서의 원시 ADC 값은 보정된 건조 및 습윤 기준값을 사용하여 수분 백분율로 변환됩니다. 배터리 전압은 ADC 입력을 통해 측정되며, 펌웨어에 정의된 전압 분배기 및 보정 계수를 사용하여 계산됩니다.
그런 다음 ESP32-C6은 이러한 측정값을 처리하고 시스템의 나머지 부분에서 사용하는 Zigbee 엔드포인트를 통해 제공합니다.

개발 보드 프로토타입으로 센서 노드를 검증한 후, 주요 하드웨어를 더 작고 안정적인 플랫폼에 통합하기 위해 KiCad로 맞춤형 2층 PCB를 설계했으며 이를 통해 보다 컴팩트하고 신뢰성 높은 플랫폼을 구현했습니다.
이 PCB에는 ESP32-C6와 센서 연결부, 배터리/전원 회로, 아날로그 입력, I²C 인터페이스 및 확장 헤더가 통합되어 있습니다. 이를 통해 느슨하게 연결된 프로토타입 배선을 대체하고, 반복적인 테스트 및 배포에 적합한 더욱 견고한 플랫폼을 구현했습니다.
그 후 PCB를 제조하고 조립하여 SenseView 프로토타입에 사용했습니다. 전체 KiCad 프로젝트, Gerber 파일 및 BOM 은 하드웨어를 검토하거나 재현하려는 누구나 이용할 수 있도록 GitHub repository에 포함되어 있습니다.

SenseView 펌웨어는 Arduino framework 를 사용하여 개발되었으며, 센서 데이터 수집, 데이터 처리, Zigbee 통신 및 로컬 제어 기능을 담당합니다.
시작 과정에서 펌웨어는 I²C 버스, ADC 입력, 센서 및 Zigbee 엔드포인트를 초기화합니다. BME680, TSL2591 및 SCD40은 I²C를 통해 통신하며, 토양 수분과 배터리 전압은 ESP32-C6의 ADC 입력을 통해 측정됩니다.
펌웨어는 기본적인 센서 처리도 수행합니다. 토양 수분 측정값은 정의된 건조 및 습윤 기준값을 사용하여 보정된 백분율로 변환되며, TSL2591은 측정된 광량에 따라 게인을 조정합니다.
관개 로직: 펌웨어는 보정된 토양 수분 백분율을 정의된 임계값과 비교합니다. 수분이 임계값 아래로 떨어지면 관개 출력이 트리거됩니다. 이 빌드에서는 실제 밸브를 작동시키는 것이 논문의 범위를 벗어났으므로 해당 출력이 내장 LED를 구동합니다. 로직 자체(임계값 비교, GPIO 트리거)는 밸브나 릴레이를 구동하는 경우와 동일하므로, 관개 하드웨어를 추가하려는 경우 간단히 교체할 수 있습니다.
그런 다음 센서 값은 전송을 위해 전용 Zigbee 엔드포인트에 할당됩니다.
전체 펌웨어 소스는 GitHub 저장소에서 확인할 수 있습니다.

ESP32-C6는 Zigbee 센서 노드로 작동하며, 처리된 센서 측정값을 중앙 코디네이터로 무선 전송합니다.
이 프로젝트에서는 Sonoff Zigbee USB Dongle 을 Zigbee 코디네이터로 사용합니다. Zigbee2MQTT 는 호스트 컴퓨터에서 실행되어 Zigbee 네트워크를 관리하며, ESP32-C6 노드를 페어링하고 측정값을 수신할 수 있도록 합니다.
노드가 네트워크에 연결되면 Zigbee2MQTT는 MQTT를 통해 센서 데이터를 제공합니다. 이를 통해 무선 센서 노드와 다음 단계에서 사용되는 데이터 처리 파이프라인이 연결됩니다.
Zigbee2MQTT가 SenseView에서 측정값을 수신하면 데이터는 다음 파이프라인을 거칩니다:
Zigbee2MQTT → Mosquitto MQTT → Telegraf → InfluxDB
Mosquitto 는 MQTT 브로커로 작동하며 Zigbee2MQTT가 게시하는 메시지를 처리합니다. Telegraf 는 SenseView 데이터가 포함된 MQTT 토픽을 구독하고 수신 메시지를 처리합니다.
Telegraf 구성에서 중요한 부분은 구독할 MQTT 토픽 을 지정하는 것입니다. 이를 통해 Telegraf가 Zigbee2MQTT 데이터를 수신하여 InfluxDB에 기록할 수 있으며, InfluxDB는 동일한 Telegraf 구성에서 출력으로 설정됩니다.
InfluxDB는 측정값을 타임스탬프와 함께 시계열 데이터로 저장하므로 현재 값과 과거 추세를 모두 시각화할 수 있습니다.
무선 네트워크, 메시징 계층, 데이터 처리, 데이터베이스를 분리하면 시스템이 모듈화되고 추가 센서 노드로 확장하기가 쉬워집니다.

측정값이 InfluxDB에 저장되면 Grafana 를 사용하여 실시간 모니터링 대시보드를 생성합니다.
SenseView 대시보드에는 다음 항목이 표시됩니다:
대시보드는 실시간 개요와 과거 추세를 모두 제공하므로 시간에 따른 환경 조건, 토양 수분 및 배터리 잔량의 변화를 모니터링할 수 있습니다.
하드웨어를 조립하고 소프트웨어를 구성한 후, 전체 SenseView 시스템을 센서 수집부터 데이터 시각화까지테스트했습니다.
센서 노드는 ESP32-C6가 측정값을 올바르게 수집하고, Zigbee를 통해 전송하며, Zigbee2MQTT가 수신하고, MQTT 및 데이터 처리 파이프라인을 거쳐 InfluxDB에 저장한 뒤 최종적으로 Grafana에 표시하는지 확인하기 위해 테스트했습니다.
또한 시스템은 여러 센서 노드 를 사용하여 노드와 중앙 게이트웨이 간의 무선 통신 및 데이터 보고를 확인했습니다.
완성된 SenseView 노드는 3.7 V LiPo 배터리로 작동했으며, 실제 작동 시간을 평가하기 위해 서로 다른 보고 간격으로 테스트했습니다. 두 테스트 모두 동일한 배터리를 사용하여 보고 모드 간 직접 비교가 가능하도록 했습니다.
두 가지 작동 모드를 비교했습니다:
이처럼 작동 시간이 크게 향상된 결과는 보고 주기와 슬립 동작이 배터리 구동 시스템에 얼마나 큰 영향을 미치는지 보여줍니다. 잠시 깨어나 데이터를 보고한 후 다시 슬립하는 방식이 라디오와 센서를 계속 활성화해 두는 것보다 훨씬 효율적입니다.
따라서 이 프로토타입은 SenseView가 배터리로 구동되는 Zigbee 환경 모니터링 노드로 작동할 수 있음을 입증했으며, 향후 버전에서 추가적인 전력 최적화(예: 더 긴 슬립 간격, 저전력 센서 듀티 사이클링)가 가능함도 보여주었습니다.


SenseView는 맞춤형 하드웨어, 임베디드 펌웨어, Zigbee 통신, 완전한 IoT 데이터 파이프라인을 하나의 환경 모니터링 플랫폼으로 통합합니다.
최종 시스템은 환경 측정값을 수집하고, 이를 무선으로 전송하며, 데이터를 시계열 측정값으로 저장하고, Grafana를 통해 결과를 표시할 수 있습니다.
케이스: 센서 노드를 수용하는 파란색 케이스는 SolidWorks 로 설계하고 3D 프린팅하여 PCB, 배터리 및 센서를 장착하면서도 장치를 충분히 컴팩트하게 유지해 화분에 직접 부착할 수 있도록 했습니다. 케이스 설계 파일은 아직 GitHub 저장소에 포함되어 있지 않으며, 향후 업데이트에서 추가될 수 있습니다.
이 프로젝트는 오픈 소스이며, GitHub 저장소에는 펌웨어, KiCad PCB 설계, 회로도 및 지원 프로젝트 파일이 포함되어 있습니다.
GitHub: https://github.com/niksaw/SenseView-IoT
휴대폰으로 프로젝트를 살펴보고 싶으신가요?
QR 코드를 스캔하여 SenseView GitHub 저장소를 바로 열어 보세요.
프로젝트를 기반으로 무언가를 만들고 싶다면 GitHub 저장소에서 시작하는 것이 가장 좋습니다.
원문: https://www.instructables.com/SenseView-an-ESP32-C6Based-Zigbee-IoT-Platform-for/