세상을 바꾼 아이디어들은 형태에 변형에 따라 다양한 모습으로 진화해왔다. 기존에 있는 것들에 새로운 기능을 추가하거나 아니면 빼거나. 그것도 아니라면 완전하게 다른 시각에서 접근하기도 했다. 이 모든 것은 작은 시도에서 출발한다. 이 작은 출발도 그러하기를 바라본다. 프로젝트는 다음의 순서에 따라 진행했다.
*전통적인 프로젝트 진행 방식과는 다를 수 있다.
●제품컨셉구상
●사양 정의
●구현
●제품 디자인
●제작 및 시연
1. 제품 컨셉 구상
지난번 프로젝트에서 기능을 축소해 시간만 표시하는 작은 인테리어 소품을 고민했다. 가장 중요한 점은 시간 설정 및 유지에 불편함이 없어야 한다는 점. 이를 기술적으로 해결하기 위한 방법은 있다.
하나, GPS 모듈을 통해 GPS의 시간을 받아 온다. 둘, 네트워크를 통해 타임 서버에서 시간을 받아 온다. 셋, 직접 시간을 입력하고 RTC(Real Time Clock)으로 시간을 유지한다.
이중 가장 간편한 방법은 GPS 모듈을 통해 GPS의 시간을 받아 오는 것이다. 하지만 이 프로젝트의 이름이 GPS Clock이 아닌 이유는 ‘사양 정의’ 부분에서 자세하게 설명한다. 이 프로젝트의 정확한 이름은 다음과 같다.
GPS Logger
2. 사양 정의
인터페이스를 결정하기에 앞서 GPS 모듈에 대한 사전 시험을 진행했다. 그리고 당황을 금치 못했다. 처음 써보는 부품이니 당연한 일이었다.
‘실내에서는 GPS 신호가 도달하기 어렵다.’
어차피 손에 들어온 GPS 모듈이었다. 이참에 제대로 해보자는 생각이 들었다. 스마트 워치가 제공하는 운동 기능을 모방한 형태의 제품을 만들어 보면 좋겠다고 생각했다. 이미 이전 프로젝트를 진행하면서 보유한 부품을 최대한 활용하기로 했다. 사양은 다음과 같다.
·하드웨어
MCU : ESP32 (WiFi, Bluetooth 내장)
LCD : TFT LCD 2.4인치 (SD card 인터페이스 포함)
GPS : GY-NEO6MV2
Power : 3.7V 배터리(18650) * 2EA
Weather clock에서 지원해야 하는 기능은 다음과 같다.
구분
설명
·필수 기능
GPS 모듈 통신
GPS 시간 및 정보 화면 출력(JPG 이미지 출력)
GPS 데이터 기록을 위한 화면 터치 제어
GPS 데이터 저장을 위한 SD 카드 제어
··부가 기능
서버 통신 중 로고 띄우기(GIF 이미지 출력)
3. 구현
구현 내용은 추후 각 단계별로 상세하게 정리해서 올릴 예정이다. 실제 구현은 라이브러리 내에서 제공하는 모든 예제를 활용했다. 사용한 라이브러리만 기능 별로 간단하게 정리한다.
·필수 기능
ㄱ. GPS 모듈 통신 : Tiny GPS
GPS 통신은 모듈의 칩에서 자동으로 해준다. ESP32에서 할 일은 시리얼 통신으로 데이터를 받아오는 것이다. 데이터 파싱도 제공하는 라이브러리에서 자동으로 해준다.
ㄴ. GPS 시간 및 정보 화면 출력(JPG 이미지 출력) : TFT_eSPI
JPG 출력은 예제만으로 문제없다. 다만 화면 구성 및 이미지 버튼 처리가 조금 성가셨다. 프로젝트 진행 중에 아두이노에 적용 가능한 GUI 라이브러리가 있는 것을 확인했다. 추후 다른 프로젝트 진행 시에 적용해볼까 한다.
ㄷ. GPS 데이터 기록을 위한 화면 터치 제어 : Adafruit TouchScreen
이 부분이 조금 성가시다. 구글의 도움을 받아 터치 동작까지는 확인했으나 Arduino Uno(아두이노 우노)에서 동작과 다르다. 핀맵에도 문제가 없었다. 며칠을 헤매고 나서야 원인을 찾을 수 있었다.
/**
감압식 터치 값은 각 ADC 핀을 통한 전압 차로 확인한다.
LCD에 공급되는 3.3V를 기준으로 변환된 디지털 값을 map 함수를 통해 실제 좌표 값으로 변환하게 된다.
그렇다. Arduino Uno 나 ESP32 나 LCD에 공급되는 3.3V 값은 달라지지 않기 때문에
0 ~ 1023의 디지털 값이 발생하게 된다.
ESP32는 0 ~ 4095 영역의 공간 중 0 ~ 1023 공간만 사용하게 되는 것이다.
해결할 수 있는 방법은 하나다.
ESP32 ADC 해상도를 제한하는 것.
친절하게도 기본으로 제공되는 간단한 함수로 해결이 가능하다.
*/
analogReadResolution(10); // ADC 해상도 범위를 10bit로 설정.
ㄹ. GPS 데이터 저장을 위한 SD 카드 제어 : ESP32 Dev Module 예제.
ESP32에서 SD카드를 사용하려면 FAT32로 포맷해야 한다. SD 인식 및 제어는 예제를 활용하면 어렵지 않다.
··부가 기능.
ㄱ. 서버 통신 중 로고 띄우기(GIF 이미지 출력) : AnimatedGIFs_SD_Master