최종프로젝트에서 뭘 했는지 시간이 지나 까먹기 전에, 기록 차원에서 글을 남겨 본다.

 

0. 기술 스택 변경 

도저히 진도가 나가지 않는 Node Js 기반의 서버 활용을 그만두고, JSP/Servlet 기반으로 돌아가기로 했다.

간단한 기능 구현 조차도 자꾸 막히고, 시간은 촉박하게 다가오는지라 만장일치로 변경하게 되었다.

일단 전반적인 숙련도가 너무 부족해서 기능 구현을 위해선 끊임없이 배워야 하는데, 하나 해결하면 막히고 하나 해결하면 막히고...정말 미칠 뻔 했다.

 

1. 개발환경 재 셋팅

앞서 사용했던 라즈베리파이를 DB Server로 사용하고 있기에 그에 맞춰 JDBC 드라이버를 변경해서 사용했다.

드라이버로는 mariadb-java-client-2.7.4 사용, 프로젝트 내 WEB-INF/lib 폴더에 복사하여 사용.

 

연결코드는 다음과 같이 변하게 되었다.

ERD 다이어그램, device_seq로 기본 키가 잡혀있는데...이걸 신경 못 쓰고 넘어가 막판에 후회 진짜 많이 했다.

 

2. 센서별 테스트 

초기에는 ESP32 개발보드를 사용하기로 했었다.

다만 주력으로 사용하는 MQ 계열 센서, ZE08-CH2O 센서와의 라이브러리 호환성이 맞지 않고, 

Node MCU ESP-32S 보드의 경우, 보드 리버전에 따라 버그가 있는 경우가 있는데 하필 또 해당되는 보드라

업로드 할 때마다 버튼을 눌러 업로드 모드로 전환시켜줘야 코드가 들어간다고 한다.

 

그래서 결국 돌고 돌아 메가로 도착...

도착한 센서들을 같이 구매했던 도서, 구글 검색결과로 나오는 자료들과 함께 개별 테스트를 먼저 진행했다.

 

포름알데히드 센서의 경우 ZE08-CH2O라는 센서를 사용했는데

연결 방법엔 세가지가 있다..DAC, UART, DFRobot등등..

DAC 방식이 간단해서 그 방법으로 했는데, 멀쩡한 환경인데 자꾸만 Bad가 나와 UART 방식으로 선회,

또다른 문제 봉착으로 인해(코드 통합 시 측정이 진행되지 않음) 결국 DFRobot 방식 썼음.

 

3. MQTT 통신 접목

 

자꾸만 멘토분이 이야기하는 방향과 기술이 멀어저가던 중, 팀장 형이 MQTT에 대해 공부해보더니 이걸 써보자고 했다.

그래서 ESP 8266에서 돌아가게 할려고...꼬박 하루를 고생하던 중 펌웨어 업데이트를 다음과 같이 진행했더니 써먹을 수 있게 되었다.

 

https://mie96.tistory.com/entry/%EA%B4%91%EC%A3%BC%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%95%99%EC%9B%90-ESP-8266-%EB%AA%A8%EB%93%88%EC%9D%84-%EC%89%BD%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EA%B0%80%EC%9D%B4%EB%93%9C

 

(광주빅데이터학원) ESP-8266 모듈을 쉽게 사용하기 위한 가이드

2차 프로젝트에서 기존 1차에서 쓰던 방식 (AT 커맨드를 통해 ESP-8266 모듈을 직접 제어하고, GET 방식으로 센서 값 전송) 을 그대로 쓸려다 MQTT 통신을 써 볼려니 문제가 생겼다. ESP8266과 ESP 01 어댑

mie96.tistory.com

PubSubClient 라이브러리에서도 통신기능을 위해 와이파이 라이브러리를 가져다 쓰니 작업이 필수였다. 

 

MQTT 통신의 경우 다음과 같은 도식도를 따른다.

 

우리 시스템의 경우

아두이노에서 각종 환경센서에 대한 정보를 Sensor/total라는 topic으로 publish 하면, 

중간에 라즈베리파이가 이를 중계해주고, 웹 서버에서 topic를 구독해서 값을 받아오게끔 했다.

타 팀이 하고 있던 통합 모니터링 시스템에서는 이러한 topic를 구독만 해 오면 값을 받아올 수 있게 되는 것이다.

 

반대로 각 센서별로 제어하기 위해 마일스 함수를 사용하고, 센서별로 토픽을 각각 만들어 publish 했고, 반대로 웹에선 이러한 내용을 구독한 후, 토픽을 실어 (측정 주기) 보내면 적용되게끔 했다.

 

4. Broker Server 구축 및 통신 테스트 

 

다음과 같은 명령어를 차례대로 입력해 설치를 했다. 

$ wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
$ sudo apt-key add mosquitto-repo.gpg.key 
$ cd /etc/apt/sources.list.d/
$ sudo wget http://repo.mosquitto.org/debian/mosquitto-bullseye.list
$ sudo apt-get update
$ sudo apt-get install mosquitto mosquitto-clients

+로컬 네트워크 환경이면 별다른 설정 필요 없으나 외부에서 접속 시 설정파일 수정이 필수다!

 

mosquitto_sub -t sensor/#

#의 경우 해당 토픽 아래의 모든 내용을 가져오는 명령이다.

 

원래는 센서별로 토픽을 지정했으나, 분류하는 과정이 복잡하고, 오류가 자꾸 발생해서 JSON 형식으로 토픽을 보내도록 했다. 

 

mid는 원래 +"mid_1" 식으로 붙혔는데, 자바에서 파싱할 때는 괜찮았으나 통합모니터링시스템의 Node Js 환경에선

문제가 발생해 "\"mid_1\"" 식으로 수정했다.

 

 

5. 외형 조립 및 발표 준비 

 

조립이야 어렵진 않았다. 플라스틱 케이스에 폼 양면테이프 사용.

 

하지만 발표 준비가 진짜 어려웠는데, 6인의 팀원이 절반 절반 나눠 3인은 프론트엔드 (PC/모바일 웹), 3인은 IoT 파트를 담당해서 진행하다보니 프론트엔드 팀은 IoT를 아예 모르고, IoT 팀은 프론트엔드 파트에 약점이 생겨버릴 수 밖에 없었다.

 발표자가 프론트엔드 팀이였는데, 할 말이 너무 많아 IoT 팀원들이 같이 붙어서 원고 봐주고 설명해줬는데도

말을 줄이자니 이해하기 어려울 것 같고, 그렇다고 넣자니 발표자가 대본 암기하기 어려울 것 같고...

그래서 대본을 들고 올라갔는데 불이 꺼지는 바람에 대본도 보기 힘들었다고 한다. 발표자가 진짜 고생이 많았지..

 

 

6. 대망의 발표 당일

 

02:11:04 부터 보면 된다. 팀원 소개 시간 때 내 역활에 대해서 잘 써 놨는데 너무 떨린 나머지 얼버무리고 말았다. 어휴..

 

 

 

7. 후기

 

 그냥...일주일만 더 빨리 Node Js 포기하고 JSP/Servlet으로 선회할껄 그랬다. 개발 범위 설정과 시간 분배에 성공해서 

남들 프로젝트할 때 미리 끝내고 다른 조 도와주고, 발표준비했던 1차 프로젝트와는 달리, 개발 범위 설정과 시간 분배에

실패했던 것 같다. 멘토의 방향을 잘못 이해하다보니 MQTT 도입도 늦어졌고, 기능 구현도 쉽지는 않았다.

일단 예제도 없고, 심화로 갈려니 정말...머리 터지는 줄 알았다. 

사실 만든 것도 버그 투성이다. ESP8266을 쓴 건 좋은데 너무 불안정하고, 웹서버에서 넘어오는 토픽도 받아질 때도 있고 자기 맘대로 동작한다. 이것저것 코드를 다 집어넣어놔 분리시켜 라이브러리화 시키면 좋은데 C++과 자바의 클래스 구조에는 차이도 있고, 분리해보려는 데 시간이 너무 촉박했다. 

 사실 DB도 1차처럼 내가 좀 봐줬어야 하는데 (기기번호(자동증가 컬럼)으로 식별하기 보단 기기 SN로 구별하는 게 좋은데, 신경 못 쓴 사이에 기기번호로 식별하도록 모든 VO, DAO가 짜여져서 그 부분이 좀 아쉬웠음) 그러질 못했다.

 

운이 좋아 최우수상까지 수상했지만 시간관리 측면에서 참 생각이 많아진 프로젝트였다. 

 

 

 

 

+ Recent posts