환경부 성능인증 1등급 미세먼지측정기 코아미세 S3 이산화탄소 VOCS
편리하게 사용할 수 있는 이산화탄소, 미세먼지 센서가 필요해서 상용 제품을 구매했다.
하지만 데이터를 csv로 내보낼 수 있다고 하여 샀으나 미세먼지 정보만 불러올 수 있었다.
이게 무슨...
직접 센서를 사다가 만들 수도 있지만 소프트웨어를 공부했으니 직접 만들어보기로 했다.
이미 유료프로그램으로 모든 정보를 제공한다 했으니 기기 자체에서 시리얼통신으로 정보를 전송할 것이라 생각했다.
이 블로그를 참고하고 Hercules Serial Monitor 프로그램을 다운받아
장치관리자에서 usb직렬장치 COM5로 연결된 것을 확인
&&&|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|
위와같이 시리얼로 전송 받음을 확인했다.
우선 시리얼 통신으로 값을 읽어오며 저장하는 코드가 있는지 탐색했다.
바로 사용한 코드이나 이경우 필요하지 않은 데이터가 많아 데이터 정제 작업이 추가로 필요할 수 있다.
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 순으로 저장됨을 알 수 있다.
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에 데이터가 추가됨을 확인할 수 있다.
기화식 가습기 청소 방법 (4) | 2022.10.31 |
---|---|
저전력 CO2센서 연결기(COZIR-AX5000) (0) | 2021.08.12 |