집에서 미세먼지 상태에 따른 환기 타임을 알기 위해 샤오미 PM2.5 미세먼지 측정기를 사용하고 있는데

외부의 미세먼지 상태를 보기 위해서는 항상 문을 열어놓아야 하는 단점이 있었다.

 

[샤오미] 샤오미 PM2.5 미세먼지 측정기로 집에서 상시 미세먼지 측정 설치기 (feat. Vicxxo 거치대)

 

[샤오미] 샤오미 PM2.5 미세먼지 측정기로 집에서 상시 미세먼지 측정 설치기 (feat. Vicxxo 거치대)

요즘 미세먼지가 너무 심하다보니 와이프님의 미세먼지에 대한 관심이 급 증가하고 계심 미세먼지 어플의 경우 실시간 결과도 아니고 측정소가 있는 위치 기준의 결과이기 때문에 아기를 데리고 외출을 하기 위해..

nonaka.tistory.com

결국 외부 미세먼지 상태를 측정하기 위해 알리에서 미세먼지 센서를 알아보았는데 내가 찾는 조건은 아래와 같았다.

1. PM2.5, PM10 측정 가능 및 성능이 좋아야 함 

2. 설치가 간단해야 함 ( 납땜 No )

3. 집에 있는 라즈베리파이와 연동 가능해야 함

4. 측정 정보를 받아오기 편해야 함

 

이 조건에 맞는건 Nova PM Sensor SDS011이었는데 특징은 아래와 같다.

Nova PM Sensor SDS011 특징

1. PM2.5, PM10 측정 가능

2. 센서 성능에 대한 평이 괜찮음

3. 라즈베리파이와 USB로 연결하면 설치 끝

4. 측정 결과를 받아오기 위한 Python 스크립트가 Git에 공유되고 있음

5. 가격은 18불에 배송은 2주 정도 걸렸음

6. 자세한 정보는 구매 링크 참고 - 구매 링크

 

US $18.0 |Nova PM sensor SDS011 High precision laser pm2.5 air quality detection sensor module Super dust dust sensors, digital

Smarter Shopping, Better Living! Aliexpress.com

www.aliexpress.com

Nova PM Sensor SDS011 설치

- 패키지의 센서와 USB 선을 연결하고 USB를 라즈베리파이에 꼽으면 설치가 끝난다.

- Nova PM Sensor는 미세먼지 측정을 하기 위해 공기 흡입구로 공기를 빨아들이는데, 제조사에서는 아래와 같이 팬이 아래로 가도록 설치해야 한다고 설명하고 있다.

- 외부 공기 측정을 위해서는 바깥에 센서를 놓고 측정해야하지만 SDS011의 경우 공기 흠입구를 통해서 측정하기 때문에 공기흡입구에 집에 남는 아기 빨대(그로미미 빨대)를 꼽고 샷시의 배수구멍을 이용하여 설치하였다.

- 샷시에 고정은 스트로폼 박스 뚜껑을 샷시에 맞게 잘라내서 스탠드로 사용하고, 센서 외부 케이스는 다이소에서 천원짜리 반찬통에 빨때 크기에 맞게 구멍을 뚫어서 사용했다.

- USB는 연장선을 사용해서 라즈베리파이까지 연결

라즈베리파이 + Nova PM sensor SDS011 미세먼지 수치 측정하기

1. Git에서 파이썬 스크립트 받아오기

pi@pizero:~/Downloads $ git clone https://github.com/zefanja/aqi.git
Cloning into 'aqi'...
remote: Enumerating objects: 38, done.
remote: Counting objects: 100% (38/38), done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 69 (delta 15), reused 18 (delta 5), pack-reused 31
Unpacking objects: 100% (69/69), done.
pi@pizero:~/Downloads $

2. 해당 스크립트를 vi로 열고 자신이 원하는 설정으로 변경

pi@pizero:~/Downloads $ vi ./aqi/python/aqi.py

 

3. 주요 설정 값

..........
# 결과 파일 저장 위치
JSON_FILE = '/var/www/html/aqi.json'

..........
if __name__ == "__main__":
    cmd_set_sleep(0)
    cmd_firmware_ver()
    cmd_set_working_period(PERIOD_CONTINUOUS)
    cmd_set_mode(MODE_QUERY);
    while True:
        cmd_set_sleep(0)
	# 15회 측정 수행
        for t in range(15):   
            values = cmd_query_data();
            if values is not None and len(values) == 2:
              print("PM2.5: ", values[0], ", PM10: ", values[1])
              # 1번 수행 후 2초 Sleep
              time.sleep(2)   

        # open stored data
        try:
            with open(JSON_FILE) as json_data:
                data = json.load(json_data)
        except IOError as e:
            data = []

        # check if length is more than 100 and delete first element
        # 결과 값은 최대 100개까지 저장
        if len(data) > 100:
            data.pop(0)

        # append new values
        jsonrow = {'pm25': values[0], 'pm10': values[1], 'time': time.strftime("%d.%m.%Y %H:%M:%S")}
        data.append(jsonrow)

        # save it
        with open(JSON_FILE, 'w') as outfile:
            json.dump(data, outfile)

        if MQTT_HOST != '':
            pub_mqtt(jsonrow)

        print("Going to sleep for 1 min...")
        cmd_set_sleep(1)
        # 15번 측정 후 1분간 Sleep
        time.sleep(60)      

4. 수행을 하면 아래와 같이 측정값이 출력되는데, 결과 파일이 없다면 아래와 같이 에러가 발생한다.

pi@pizero:~/Downloads $ ./aqi/python/aqi.py
Y: 18, M: 11, D: 16, ID: 0x8b94, CRC=OK
PM2.5:  0.0 , PM10:  0.0
PM2.5:  0.4 , PM10:  0.6
PM2.5:  0.5 , PM10:  0.5
PM2.5:  0.5 , PM10:  0.6
PM2.5:  0.6 , PM10:  0.8
PM2.5:  0.7 , PM10:  0.9
PM2.5:  0.7 , PM10:  2.0
PM2.5:  0.6 , PM10:  1.8
PM2.5:  0.7 , PM10:  2.8
PM2.5:  0.7 , PM10:  2.7
PM2.5:  0.8 , PM10:  2.8
PM2.5:  0.7 , PM10:  2.6
PM2.5:  0.7 , PM10:  2.8
PM2.5:  0.8 , PM10:  2.7
PM2.5:  0.8 , PM10:  2.6
Traceback (most recent call last):
  File "./aqi/python/aqi.py", line 140, in <module>
    with open(JSON_FILE, 'w') as outfile:
IOError: [Errno 2] No such file or directory: '/var/www/html/aqi.json'

5. 비어있는 json 파일을 생성하고 수행하면 된다.

pi@pizero:~/Downloads $ sudo mkdir -p /var/www/html
pi@pizero:~/Downloads $ sudo chown pi:pi /var/www/html
pi@pizero:~/Downloads $ echo [] > /var/www/html/aqi.json
pi@pizero:~/Downloads $ ./aqi/python/aqi.py
Y: 18, M: 11, D: 16, ID: 0x8b94, CRC=OK
PM2.5:  0.8 , PM10:  2.4
PM2.5:  0.8 , PM10:  2.3
PM2.5:  0.8 , PM10:  2.1
PM2.5:  0.9 , PM10:  1.9
PM2.5:  0.9 , PM10:  2.1
PM2.5:  0.9 , PM10:  2.2
PM2.5:  0.9 , PM10:  2.3
PM2.5:  0.9 , PM10:  2.1
PM2.5:  0.8 , PM10:  2.1
PM2.5:  0.8 , PM10:  2.1
PM2.5:  0.9 , PM10:  2.1
PM2.5:  0.9 , PM10:  2.0
PM2.5:  0.9 , PM10:  2.4
PM2.5:  0.9 , PM10:  1.8
PM2.5:  0.9 , PM10:  1.7
Going to sleep for 1 min...
pi@pizero:~/Downloads $ cat /var/www/html/aqi.json
[{"pm10": 1.7, "pm25": 0.9, "time": "11.07.2019 08:42:45"}]

6. aqi.py 스크립트는 계속 수행되도록 되어 있는데, 나는 해당 결과를 파일이 아닌 MySQL DB에 insert하도록 수정하고, crontab에 등록해서 매분 미세먼지 수치를 남겨서 웹에서 조회하고 있다.

'IOT' 카테고리의 다른 글

[IOT] 라즈베리파이 라즈비안 (Raspbian) 설치 방법  (0) 2019.07.11

미세먼지 센서 연동을 위한 라즈베리파이에 라즈비안 설치 방법 정리

 

라즈베리파이 라즈비안 설치 방법

1. 라즈베리파이 다운로드 사이트 접속

https://www.raspberrypi.org/downloads/

 

Raspberry Pi Downloads - Software for the Raspberry Pi

Download free software for the Raspberry Pi, including NOOBS, Raspbian, and third-party operating system images. Beginners should start with NOOBS.

www.raspberrypi.org

2. Raspbian 선택

3. 원하는 패키지 선택하여 다운로드

 - 무난하게 제일 용량이 큰 Desktop UI와 추천 패키지가 포함된 이미지를 받는 것 추천

4. 라즈비안을 설치할 SD카드를 넣고 이미지 굽기 ( BalenaEtcher 프로그램 사용 )

BalenaEtcher 다운로드 : https://www.balena.io/etcher/

 

balena - Home

Infrastructure to develop, deploy, and manage connected devices at scale

www.balena.io

 - Select image에 다운로드 받은 라즈비안 img 파일 선택

 - Select Target에 설치하고 싶은 SD카드 선택 후 Flash

5. SD카드에 라즈비안OS가 다 설치되면 해당 SD카드를 라즈베리파이에 넣고 부팅

+ Recent posts