반응형
이번 프로젝트는 미리 만들어 놓은 아두이노에서 온도 습도 가스 등등의 값들을 측정해서 serial 통신으로 1초 간격으로 보내주는데 받은 값을 파이썬으로 mongodb에 저장하는 파이썬 프로그램을 만들 것이다.
저장값은 robo 프로그램으로 확인할 것이다.
아래 값은 아두이노에서 보내는 값들이다 이중에 온도와 습도를 의미하는 Tv와 Hv 값을 가져오겠다.
As0
Vs10
Es0
Cs400
Ts4000
Hs0
Lv0
Cv1129
Tv6855
Hv1561
Vv0
Ev400
Dv3
파이썬 코드를 통해 이해해보자
코드 >>
from pymongo import MongoClient
from time import sleep
import serial
import time
class SertoDB_OOP():
def __init__(self):
self.cur_time = ""
def db_start(self):
my_client = MongoClient("mongodb://localhost:27017/")
db = my_client['Measurement']
self.db_col = db.data
def serial_start(self):
try:
self.ser = serial.Serial('com18', 115200)
self.stop_flag = False
except:
print("연결오류 : 연결 상태를 확인 해주세요")
self.stop_flag = True
time.sleep(1)
def data_collect(self):
while not self.stop_flag:
if self.ser.readable():
res = self.ser.readline()
res_decode = res.decode()
print(res_decode)
if (res_decode[0:2] == "As"):
self.alarm_set = res_decode[2:-1]
elif(res_decode[0:2] == "Vs"):
self.tvoc_set = res_decode[2:-1]
elif(res_decode[0:2] == "Es"):
self.co2eq_set = res_decode[2:-1]
elif(res_decode[0:2] == "Cs"):
self.co2_set = res_decode[2:-1]
elif(res_decode[0:2] == "Ts"):
self.temp_set = res_decode[2:-1]
elif(res_decode[0:2] == "Hs"):
self.humid_set = res_decode[2:-1]
elif(res_decode[0:2] == "Lv"):
self.alarm_on = res_decode[2:-1]
elif(res_decode[0:2] == "Cv"):
self.co2_val = res_decode[2:-1]
elif(res_decode[0:2] == "Tv"):
self.temp_val_raw = res_decode[2:-1]
self.temp_val = round((float(self.temp_val_raw)/100 - 40.0),2)
elif(res_decode[0:2] == "Hv"):
self.humid_val_raw = res_decode[2:-1]
self.humid_val = round((float(self.humid_val_raw)/100),2)
elif(res_decode[0:2] == "Vv"):
self.tvoc_val = res_decode[2:-1]
elif(res_decode[0:2] == "Ev"):
self.co2eq_val = res_decode[2:-1]
elif(res_decode[0:2] == "Dv"):
self.device_id = res_decode[2:-1]
self.cur_time = time.strftime("%y%m%d_%H%M%S")
post = {
"Time": self.cur_time,
"Temperature": self.temp_val,
"Humidity": self.humid_val,
}
self.db_col.insert_one(post)
oop = SertoDB_OOP()
oop.db_start()
oop.serial_start()
oop.data_collect()
class 내부에 self를 사용해서 함수간에 변수들을 사용했다.
우선 mongodb를 연결하고 다음으로 serial 통신을 연결하였다.
다음으로 serial에서 나오는 값들 중에 temperature, humidity 값만을 가져와서 db에 시간 값과 같이 저장하였다.
결과는 아래와 같이 나왔다. 매 초당 온도와 습도가 db에 저장된 것을 확인했다.
반응형
'파이썬(Python) > 웹서버' 카테고리의 다른 글
파이썬(Python)으로 스마트폰/웹서버에 메세지 보내기 받기(Slack, Application, Smart phone message)#1 (0) | 2022.06.14 |
---|---|
아두이노에서 온도값 주면 db에서 저장한 값을 webGUI에서 그래프로 출력하기 (0) | 2020.12.29 |
mongodb 두개의 프로그램으로 쓰면서 읽기 (0) | 2020.12.17 |
flask, pyserial 동시에 사용하기 (2) | 2020.12.17 |
post form 으로 보낸 데이터 mongodb에 저장하기 (0) | 2020.12.14 |