상세 컨텐츠

본문 제목

코아 미세 S3 센서 리뷰 및 데이터 활용(파이썬 시리얼통신 usb csv)

공기질

by 기여자 2022. 1. 18. 14:46

본문

환경부 성능인증 1등급 미세먼지측정기 코아미세 S3 이산화탄소 VOCS

구매이유


편리하게 사용할 수 있는 이산화탄소, 미세먼지 센서가 필요해서 상용 제품을 구매했다.

하지만 데이터를 csv로 내보낼 수 있다고 하여 샀으나 미세먼지 정보만 불러올 수 있었다.

Untitled

이게 무슨...

직접 센서를 사다가 만들 수도 있지만 소프트웨어를 공부했으니 직접 만들어보기로 했다.

가능성 탐색


이미 유료프로그램으로 모든 정보를 제공한다 했으니 기기 자체에서 시리얼통신으로 정보를 전송할 것이라 생각했다.

Serial Monitor 프로그램 3종

이 블로그를 참고하고 Hercules Serial Monitor 프로그램을 다운받아

Untitled

장치관리자에서 usb직렬장치 COM5로 연결된 것을 확인

Untitled

&&&|4|9|24|770|877|0|0|1374|438|90|10|2|0|
&&&|3|9|22|787|597|0|0|1677|524|94|6|2|0|
&&&|3|8|21|788|497|0|0|1545|487|93|4|2|0|

위와같이 시리얼로 전송 받음을 확인했다.

센서 데이터 저장 프로그램 제작


우선 시리얼 통신으로 값을 읽어오며 저장하는 코드가 있는지 탐색했다.

데이터 csv 파일로 저장하기

바로 사용한 코드이나 이경우 필요하지 않은 데이터가 많아 데이터 정제 작업이 추가로 필요할 수 있다.

import serial

import datetime as dt

import csv

csv2 = ['time', 'temp']
ser = serial.Serial('/dev/ttyACM0', 9600)
ser.close()
ser.open()
try:
    while True:
        data = ser.readline().decode()
        i = dt.datetime.now().strftime('%H:%M:%S')
        with open("out.csv", 'a') as fp: #a는 추가가 가능, w모드는 덮어쓰기임
            wr = csv.writer(fp, dialect='excel')
            wr.writerow([i, data])
except KeyboardInterrupt:
    ser.close()
    print("serial connection closed")

위 코드는 위 블로그의 코드중 핵심 로직만 따온 코드로 이 코드를 센서에 맞게 수정하기로 했다.

또한, 데이터가 무엇을 의미하는지 확인했다.

극초미세먼지, 초미세먼지, 미세먼지, 이산화탄소, VOCx 순으로 저장됨을 알 수 있다.

Untitled

시리얼 통신으로 받은 데이터 csv로 저장 파이썬코드


import serial

import datetime as dt

import csv

csv2 = ['time', 'temp']
ser = serial.Serial('/dev/ttyACM0', 9600)
ser.close()
ser.open()
try:
    while True:
        data = ser.readline().decode() #데이터를 한줄 씩 읽어온다
        split_data = data.split('|') #각 한줄에 구분자인 | 로 쪼갠다
        print(split_data)
        i = dt.datetime.now().strftime('%Y/%m/%d - %H:%M:%S') #현재 시간을 문자열로 변환 및 저장
        with open("out.csv", 'a') as fp: #a는 추가가 가능, w모드는 덮어쓰기임
            wr = csv.writer(fp, dialect='excel')
            # wr.writerow([i, data]+split_data) #전체 데이터 저장

            wr.writerow([i, split_data[1], split_data[2], split_data[3], split_data[4], split_data[5]])
            # 연월일시분초, 극초미세먼지, 초미세먼지, 미세먼지, 이산화탄소, VOCx
except KeyboardInterrupt:
    ser.close()
    print("serial connection closed")

위 코드를 사용하면 out.csv에 데이터가 추가됨을 확인할 수 있다.

참고자료


파이썬(Python) 문자열을 나눌 수 있는 split 함수

데이터 csv 파일로 저장하기

'공기질' 카테고리의 다른 글

기화식 가습기 청소 방법  (4) 2022.10.31
저전력 CO2센서 연결기(COZIR-AX5000)  (0) 2021.08.12

관련글 더보기