경상북도 구미시 봉곡북로 65

명품빌딩 3층, (주)네오텍

Send Your Mail At:

semineotech@gmail.com

미세먼지 알리미

사무실의 공기 상태를 알려주는 시스템을 제작합니다.

미세먼지 알리미

개요

요즘 미세먼지가 야외 활동을 하는데 주요한 변수가 되었습니다.

사무실 공기 상태를 알려주는 시스템을 만들어 봅니다.

시스템성과 동작

WEMOS D1 R2 보드가 미세먼지 센서와 CO2 센서를 읽어 서버에 전송합니다.

서버는 센서 데이터를 데이터베이스에 저장하며, 하루에 한 번 공기 정보를 알립니다.

또한, 공기 상태가 나쁠 경우 즉각 메일을 발송합니다.

미세먼지 센서

미세먼지 센서는 PMS5003을 사용합니다.

매뉴얼과 소스 코드는 아래 링크를 참고했습니다.

아래는 WEMOS 보드와 PMS5003 센서 연결도입니다.

RX와 RESET은 사용하지 않았습니다.

CO2 센서

CO2 센서는 MH-Z19를 사용합니다.

데이터시트와 소스 코드는 아래 링크를 참고했습니다.

WEMOS 보드와의 연결도입니다.

RX는 사용하지 않았습니다.

SoftwareSerial 사용

SoftwareSerial RX를 사용할 때 동작 중 watchdog reset이 발생하는 문제가 종종 발생합니다.

수신되는 데이터가 많을 경우 자주 발생하므로, WEMOS 보드 두 대를 사용해 미세먼지 센서와 CO2 센서를 하나씩 연결했습니다.

서버 데이터베이스

WEMOS 보드는 센서 정보를 MQTT를 이용해 전송합니다.

MQTT 브로커는 사내 서버를 이용했습니다.

서버는 Firebase를 이용하며, Node.js로 작성했습니다.

Firebase 사용법은 Firebase 페이지에 자세히 설명되어 있으며, 아래 블로그는 정리가 잘 되어 있어 도움이 되었습니다.

Firestorage 저장 문제

Firebase에 deploy 후 Firestorage에 저장이 되지 않는 문제가 있었습니다.

로컬에서 테스트할 때는 잘 동작합니다.

몇 가지 인증 방식을 사용해 테스트를 했는데, 아래 인증 코드를 사용했을 때 정상 동작합니다.

	var config = {
	    apiKey: "xxxxxxxxxxxxxxxxxxxxxx",
	    authDomain: "project_id.firebaseapp.com",
	    databaseURL: "https://project_id.firebaseio.com",
	    projectId: "project_id",
	    storageBucket: "project_id.appspot.com",
	    messagingSenderId: "340030656901"
	};
	firebase.initializeApp(config);
	const db = firebase.firestore();

서버 동작 멈춤

Firebase에 deploy한 서버 코드는 30분간 MQTT 메시지를 수신한 후 센서 정보의 평균을 데이터베이스에 저장합니다.

그런데,  몇 시간 경과된 후 서버가 동작을 하지 않는 문제가 발생했습니다.

테스트를 위해 추가한 http GET API를 호출하면, 동작을 계속합니다.

Firebase에 제약 사항이 있을 것으로 예상되지만, 관련된 문서를 찾지 못했습니다.

문제 개선을 위해 사내 테스트 PC에서 매 분마다 http GET API를 호출하게 했습니다.

알림

알림 메일은 Mailgun을 이용해 발송합니다.

e-mail 10,000개는 무료로 발송할 수 있으며, Cloud platform에서 SMTP port 지원 여부에 상관 없이 사용할 수 있어서 편리합니다.

denis