vidigummy KAU/2020 4차 산업혁명 소프트웨어 경진대회

개발과정 2

vidi 2020. 10. 29. 13:17

 문제가 생겼다. 재료를 받고 RF 통신으로 통신을 하려던 계획이 RF 통신 모듈의 오류로 인해 제대로 작동이 되지 않은 것이다. 물론 우리가 제대로 못 한 것도 있겠지만,  거의 20시간을 붙잡았는데도 불가능 하였다. 하지만 우리에겐 시간도, 돈도 없었기 때문에 동방에 남아있는 블루투스 모듈을 사용하려 했지만 이 또한 실패하였고, 결국 UART Serial 통신을 사용하여 아두이노와 라즈베리 파이의 통신을 할 수 밖에 없었다. ( 이는 n to 1 통신이 아닌 1 to 1 통신이 되었다는 말이다. 이를 진행하며 제품의 효율성이 낮아지는걸 용납할 수 없었던 나로서는 매우 큰 슬픔으로 다가왔다.)

 어쨌든 나의 프로그램 자체는 n to 1통신을 지향하여 제작한 프로그램이었기에, 아두이노 제작을 맡은 동료에게 하나가 바뀌더라도 n개의 아두이노 상태를 보내달라 요청하였고, 그대로 진행하였다.

 소스코드는 다음과 같다. (앞서 설명한 Program 1과 Program 2를 합쳐서 진행했다.)

#-*s-coding:utf-8 -*-
import serial
import time
import firebase_admin
from firebase_admin import db
from firebase_admin import credentials

cred = credentials.Certificate('mykey.json')
firebase_admin.initialize_app(cred,{'databaseURL': 'HTTPS://nundullmurrylaundry.firebaseio.com/'})
ser = serial.Serial("/dev/ttyACM3",9600)
cnt = 0
references = ['Sec1/M1','Sec1/M2','Sec1/M3']
before = []
now = []
for i in range(3):
 ref = db.reference(references[i])
 ref.update({"H":-1})
 ref.update({"M":-1})
 ref.update({"R":0})
print("DB reset done")
while 1:
 #초기 설정 해 주기
 input = ser.readline()
 input = input.decode('utf-8')
 state_list = input.split()
 if(cnt == 0):
  f = open("./testfile.txt","w")
  for i in range(3):
   f.writelines("-1,-1\n")
  cnt += 1
  print ("testfile reset\n")
 else:
  f = open("./testfile.txt","r")
  lines = f.readlines()
  ##read .txt file to know how was before
  for line in lines:
   if line is not "":
    if "-1" in line:
     before.append('0')
    else:
     before.append('1')
  #before is "0" or "1"
  print ("reading text file is done\n")
  f.close()
  f = open("./testfile.txt","w")
  if(len(state_list) == 3):
   print ("checking the value\n")
   for i in range(3):
    ref = db.reference(references[i])
    if state_list[i] is not before[i]:
     if state_list[i] is '1':
      now = time.gmtime(time.time())
      output = ""
      output += str(now.tm_hour+9)
      output += ","
      output += str(now.tm_min)
      f.writelines(output+"\n")
      print (output+"\n")
      print (str(i)+"번째 아두이노 켜짐!\n")
      ref.update ({"H":now.tm_hour+9})
      ref.update ({"M":now.tm_min})
      ref.update ({"R":1})
     else:
      output = "-1,-1\n"
      f.writelines(output)
      print (str(i)+"번째 아두이노 꺼짐!\n")
      ref.update({"H":-1})
      ref.update({"M":-1})
      ref.update({"R":0})
    else:
     f.writelines(lines[i])
  else:
   for i in range(3):
    f.writelines("-1, -1\n")
   print ("--------------------\n")
   print (state_list)
   print (before)
   print ("--------------------\n")
  f.close()
 before = []
 now = []

 # print(now.tm_min)
 # print(now.tm_sec)

 

 아두이노의 통신값과 text file을 대조하는 중간중간 발생하는 index 에러를 잡는데 공을 많이 들인 것 같다. DB는 filebase의 RealTime DataBase를 사용하였는데, 공식 라이브러리를 사용하여 큰 문제는 없었다. 다시 보니까 좀 많이 더러운 것 같다. 그래도 putty를 이용한 개발이었으니 이정도면 만족스럽다고 생각하기도 하고....   

'vidigummy KAU > 2020 4차 산업혁명 소프트웨어 경진대회' 카테고리의 다른 글

결과  (0) 2020.10.29
개발 과정1  (0) 2020.10.29
시작  (0) 2020.10.29