아두이노 나노 33 IoT: 다중 파라미터 수질 센서 (EC, pH, ORP) - BLE & PWA 지원
부품 및 소모품
아두이노 나노 33 IoT
1개
Microfire LLC 아이솔레이티드 EC 프로브 인터페이스
1개
Microfire LLC 아이솔레이티드 ISE 프로브 인터페이스
2개
프로젝트 개요
무엇을 만들 것인가?
EC(전기전도도), pH, ORP(산화환원전위), 온도를 측정하는 장치를 제작합니다. 수영장이나 수경재배 시스템 모니터링에 활용할 수 있습니다. 블루투스 저전력(BLE)으로 통신하며, 웹 블루투스(Web Bluetooth)를 통해 웹페이지에서 데이터를 표시합니다. 더 나아가 프로그레시브 웹 앱(PWA)으로 변환하여 웹에서 설치 가능한 앱처럼 사용할 수 있습니다.
EC/pH/ORP/온도: 가장 일반적인 수질 측정 항목입니다. EC는 수경재배에서 영양액 농도를, pH는 물의 산성/염기성을, ORP는 물의 살균 능력을 판단하는 데 사용됩니다.
블루투스 저전력(BLE): 정보를 무선으로 주고받는 프로토콜입니다. 이 프로젝트에 사용된 아두이노 나노 33 IoT에는 WiFi와 BLE 인터페이스가 내장되어 있습니다.
웹 블루투스(Web Bluetooth): 구글 크롬과 오페라 브라우저에 구현된 API 세트로, 웹페이지가 BLE 기기와 직접 통신할 수 있게 해줍니다.
프로그레시브 웹 앱(PWA): 일반 앱처럼 동작하는 웹페이지입니다. 안드로이드, 아이폰, 데스크톱에서 각각 다르게 처리되므로 세부 사항은 별도 학습이 필요합니다.
하드웨어 구성
조립 전 한 가지 해결해야 할 점이 있습니다. uFire ISE 센서 보드들은 동일한 I2C 주소를 사용하므로, 두 개를 사용할 경우 하나의 주소를 변경해야 합니다. 이 프로젝트에서는 ISE 보드 중 하나를 ORP 측정에 사용하며, 여기 안내에 따라 주소를 0x3e로 변경합니다.
주소 변경 후 하드웨어 연결은 간단합니다. 모든 센서가 Qwiic 커넥트 시스템을 사용하므로 체인 형태로 연결하면 됩니다. 센서 하나를 나노 33에 연결하기 위해 Qwiic-수컷 변환 케이블이 필요합니다. 선은 색상으로 구분되어 있습니다: 검정(GND), 빨강(3.3V 또는 5V), 파랑(SDA, A4 핀), 노랑(SCL, A5 핀).
이 프로젝트에서는 온도 정보를 EC 센서에서 가져오므로, EC 보드에 온도 센서를 반드시 연결하세요. 모든 보드가 온도 측정이 가능합니다. EC, pH, ORP 프로브를 해당 센서에 BNC 커넥터로 연결하는 것도 잊지 마세요. 방수 처리를 위해 케이스가 있다면 내부 장착을 권장합니다.
소프트웨어 구조
소프트웨어는 두 부분으로 나뉩니다: 나노 33에 올릴 펌웨어와 웹페이지.
기본 흐름은 다음과 같습니다:
웹페이지가 BLE를 통해 나노 33에 연결
웹페이지가 텍스트 기반 명령 전송 (측정 요청, 액션 실행 등)
나노 33이 명령을 수신해 실행하고 JSON 형식으로 응답
웹페이지가 응답을 받아 UI 업데이트
이 구조로 측정, 캘리브레이션 등 필요한 모든 기능을 웹페이지에서 수행할 수 있습니다.
BLE 서비스와 특성
BLE 기본 개념부터 살펴보겠습니다. 비유하자면 서비스는 '책', 특성은 '페이지'입니다. 페이지는 내용 변경이 가능하고 변경 시 알림을 받을 수 있습니다.
BLE 기기는 여러 서비스를 가질 수 있습니다. 표준화된 서비스(Tx Power, 연결 끊김 등)부터 인슐린, 맥박 산소 측정 같은 특수 서비스까지 다양합니다. 직접 정의도 가능하며 UUID로 식별합니다. UUID는 UUIDTools.com 같은 곳에서 생성할 수 있습니다.
value_update는 수신된 JSON으로 UI를 업데이트하며, 5초마다 정보를 갱신하는 타이머도 설정됩니다. ec.js, ph.js, orp.js에는 측정 및 캘리브레이션 명령 함수들이 있습니다.
실행하려면 HTTPS로 서빙해야 합니다. 로컬에서는 serve-https 같은 도구를 사용하세요. 펌웨어 업로드, 하드웨어 연결, 웹페이지 서빙이 완료되면 작동을 확인할 수 있습니다.
PWA 변환
웹페이지를 앱으로 만들기 위한 단계:
웹페이지 설치 가능
설치 후 오프라인 접근 가능
일반 앱처럼 아이콘으로 실행
1. manifest.json 생성: App Manifest Generator 같은 도구 활용. 애플리케이션 범위(Application scope), 시작 URL(Start URL), 표시 모드(Display Mode - Standalone 권장) 설정이 중요합니다. 파일을 index.html과 같은 루트에 배치.
2. 서비스 워커: 오프라인 캐싱용으로 사용. 구글 예제를 참고해 캐시할 파일 목록만 수정하면 됩니다. 자체 도메인 파일만 캐시 가능.