참고 스압주의.
previously..
https://mrtroll.tistory.com/576
블루투스 10hz 외장 GPS 자작기(DIY) - (1) 준비물편
7개월만에 블로그에 새로운 포스트를 올리게 되었네요. 그동안 언더백 출전도하고, 늙으막에 학교도 다니고, 개인일도 한다고 시간가는줄 몰랐네요. (덕분에 블로그 방문자는 바닥을 박박 기고
mrtroll.tistory.com
- 프롤로그
지금으로부터 5년전 쯤. 알리에서 산 부품들로 10hz 외장 gps를 자작한 적이 있었다. 818XT인가 그제품이 비싸서 직접 자작하기로 하고 시작했던건데, 아직까지도 잘 쓰고 있다.
최근 chatgpt 유료버전을 결제하면서 AI의 힘으로 개인적으로 찾기 어려웠던 해외정보를 AI가 많이 알려주기 시작하면서, 25hz급 외장 GPS를 만들어보면 어떨까 하는 마음이 들었다. (chatgpt 유료결제가 아까워서 뭐라도 뽑아 먹고 싶다고 생각했던것도 큰 듯 ㅋㅋ)
2020년 자작당시에 10hz급 GPS에 블루투스 모듈과 uart 통신이 115200bps급으로 되어야 안정적으로 동작한다는건 알고 있었고, 그 이상을 도전할때 여러가지 문제가 꽃핀다는 사실은 대충 주변인들에게 들어 알고 있었다.
하지만 chatgpt는 도전가능하고 할 수 있다고 하기에 도전을 시작했다.
중간 삽질 안보고 싶으신 분은 맨 뒤 최종정리 편으로 이동하세요.
- 부품선정
25hz급 gps는 알리에서 바로 검색해서 찾았다.

1.5만원정도에 아주 쉽게 구매함. 물론 100퍼 잘될거란 보장은 없었고, 이후에도 상당한 삽질을 많이 했다. 그래도 25hz급 gps모듈이 10달러면 매우 저렴하지 아니한가..
GPS 스펙은 다음과 같다.


chatgpt에게 처음 물어봤던건 25hz급 gps에 붙일 블루투스 모듈이었다. 일반적인 hc 06같은 걸 이야기했으나, 검색해보니 115200이상의 baudrate에서는 지연이 발생하거나 비정상 동작한다는 글이 있었다.
그래서 다른 제품을 물색했고, 이 이후 버전인 jdy-30 또는 jdy-31 같은 제품을 추천해줘서 구매.
(미리 말하면 이 제품은 불량인지 AT 메시지 통신도 못하고 실패했다)
그리고 두 부품이 도착한 날, 본 자작기는 시작되었다.



- 1차 삽질 : GPS모듈+JDY-31
부품이 왔는데 고민할게 뭐 있을까. 그냥 도전하는거다. 세팅!
일단 제일 심플하게.
1. GPS모듈에서 25hz 세팅해주고, baudrate를 230400bps로 설정
2. 블루투스모듈도 동일하게 baudrate를 230400bps로 설정하면 끝!
[1] GPS 설정

GPS는 U-center 프로그램을 이용해서 설정해주면 되고, gps와 PC를 연결하기 위해 USB-TTL에 GPS와 연결해준다. 나중에 편의를 위해 아두이노 킷에 들어있던 케이블들을 활용해서 gps에 달아주었다.
※ 여기서 약간 삽질하여 돌아간 내용.
홈페이지에 M10계열부터는 u-center2를 사용하라했는데, 프로그램 설치 직후 로그인창에서 아무런 반응이 없다. 국내에서 링크가 막혔나 아님 내가 시도하던때에 서버가 작업중이었을라나 모르겠다. 그래서 그냥 u-center 기존 버전을 사용했다는 점.
일단 가장 기본적인 세팅부터.

최오의 baudrate는 38400이고 여러가지 정보가 쭉쭉 들어오는 것을 알 수 있다.

포트 설정으로 이동해서 baudrate를 230400으로 바꾸고 send를 눌러준다.
그럼 바로 gps가 230400으로 동작하기에 다시 u center쪽에서 gps가 연결된 com포트와 통신할 baudrate를 변경해준다. (최초 38400->230400)
그럼 다시 이후 세팅이 가능해진다.
그 다음은 25hz로 동작시키기 위한 세팅이다. 처음에 기존 configuration view에서 못찾아서, generation 0 advanced configuration view에서 설정했다.

value값에 40ms에 해당하는 40을 입력해주고, set in ram, set in bbr, set in flash를 모두 한번씩 눌러준 다음, send config changes를 툴러준다. 그럼 메모리, BBR, 플래시까지 모두 동일 세팅으로 맞춰주고 그 반영 내역을 가운데 트리창에서 확인 할 수 있다.

그리고 최대의 위성을 잡아보기 위해 일단 켤주 있는 모든 GNSS 설정을 다 켜준다. (최종세팅에는 GPS와 QZSS만 썼음)
마지막으로 넘쳐나는 메시지 지옥에서 벗어나기 위해 NMEA-GGA와 NMEA-RMC의 메시지만 나오도록 바꿔주고 나머지는 다 OFF시켰다. (이 부분은 과거에 10hz때 안했던 부분)
기본적인 설정은 전에 한 번 해봤다고 뭔가 수월하게 슉슉 진행했던거 같다.
[2] 블루투스모듈(JDY-31) 설정
그리고 이제 JDY 블루투스 모듈을 셋업하려고 AT 명령어를 치려고해보았는데..
과거와 달라진점은 과거엔 아두이노 IDE를 이용해서 코드를 업로드 하는 방식으로 했었는데, 좀 공부해보니까 전혀 그럴 필요가 없었다. usb-ttl이 있으면 그냥 바로 붙일 수 있다. 다만 결선하기가 귀찮으니까 빵판을 이용했을뿐.
usb-ttl과 jdy-31 모듈을 다음과 같이 결선.
vcc - vcc
rx - tx
tx - rx
gnd - gnd
당연하게도 모듈끼리 통신하려면 각각 rx-tx를 교차시켜서 연결해줘야 통신이 된다.
그리고 컴에 연결해서 의기양양하게 터미널 프로그램을 실행시켜보았는데..
결론적으로 중국에서 날라온 jdy-31은 어떠한 baudrate에도 응답하지 않았다. 쩝.
중간에 jdy-31은 AT - OK 받는 AT명령 자체에는 반응을 안한다기에, 다시 모든 baudrate를 선택해가며 AT+VERSION을 눌러 확인했지만, 결과는 실패.
찾다보니 EN 핀이 있으면 여기다 5볼트를 인가해줘야지 될 수도 있다는 GPT의 말에 VCC와 EN이 점프되도록 해놓고 다시 PC와 통신을 시도하였으나 그냥 대차게 실패함. 여기서부터 살짝 멘붕의 조짐이..


EN핀 꼽고 다시 모든 baudrate에서 통신을 시도하였으나 결과는 똑같았다. (ㅅㅂ)
- 2차 삽질 : JDY-31 → HC-06 변경
집에 예전에 사둔 HC-06이 몇개 있었다. 그래서 JDY-31은 문제가 있구나! 하고 HC-06으로 일단 GPS라도 테스트를 해보자는 심정으로 이녀석도 AT모드를 접속.
AT에 OK 응답이 와서 신나게 baudrate를 변경하려고했는데.. AT+BAUD5 이런 AT+BAUDn 명령어에 error(0) 응답을 준다. 으어........
chatgpt는 여기서 이상한 소리를 하나 했던 것으로 기억한다. 일부 hc-06 제품은 설정변경이 안될 수도 있다고... (낚임) 암튼 그래서 어떻게하나 하다가 시간이 늦어 자러 갔다. 잘려고 누워서 생각해보니 문득 흘려서 본 글에 "HC-06"의 버전에 따라 AT 명령어 셋이 다를 수도 있다는 말이 불현듯 떠올랐다. 그래서 다음날 확인해 봐야지 하고 잠듬..
다음날 눈뜨자마자 바로 AT+VERSION 명령어로 보니 3.0_2017xxxx 버전이었다. 그래서 뒤져보니 이녀석은 AT+BAUDn이 아니라 AT+UART=115200,0,0 과 같은 형태로 명령어를 줘야 반영이 되는것이었다.

인터넷에도 보면 HC-05가 이렇다, HC-06도 그렇다 말이 많은데, 버전별로 다를 수 있으니 자신이 어떤 제품을 사는지 잘 알고 구매하는게 제일 좋을듯. ㅡㅡ^
아무튼 HC-06에 Baudrate를 설정할 수 있게 되었으니 바로 HC-06에 230400 설정하고 이름도 바꿔주고 바로 테스트를 시작했다.
- 3차 삽질 : 설정 지옥




기초적인 결선을 마치고 테스트를 하는데, 어딘가 찜찜하다. 처음에 25hz가 나왔었는데, 그 뒤로 hz가 자꾸 떨어지는거다. 그리고 블루투스 모듈에 접근하는데까지 너무나 시간이 오래걸렸다.
본능적으로 느껴지는 건 어딘가 병목이 있는 것 같다였다. 근데 잘 될때와 안될때가 반복되니 환장할 노릇.
GPS를 PC에 물려서 시리얼 모니터로 확인했을 때는 정상적으로 메시지가 우다다다 나왔었기 때문에 나의 추정은 블루투스 모듈이 다 처리를 못하는것 같다는 생각이었다. (결론은 GPS도 블투모듈도 둘다 과부하였다. 그래서 삽질이 더 길어짐)
나의 추정대로 블루투스 모듈이 병목/과부하가 있다고 생각했으니 이제 HC-06을 460800 baudrate로 올려서 테스트 하는것. 이때에도 그냥 단순히 baudrate를 올리면 해결되지 않을까 생각을 했었다.
설정은 잘 먹혔으니까 잘 되겠지? 하면서 연결해보니 잘 되는 척 하기는 하는데 뭔가 이상했다. 이때부터 baudrate를 올리고 내리고, gps의 hz를 바꿔가면서 계속 뭐가 원인인지를 확인했다.
나의 수많은 실험에 결과는 다음과 같다.
HC-06은 230400bps에서 gps 14.3hz까지가 안정적으로 버틸 수 있는 마지노선이다. 15.1hz정도로만 올려도 바로 레이스 크로노상에서 hz유지가 안되는 현상을 보였다. 그래서 14.3hz에 타협하는게 최선인가 싶었다.
(물론 틀린말은 아니지만 이때까지만해도 그냥 블투 모듈의 문제이지 gps도 과부하가 있을거라고 생각을 못했다)
- 4차 삽질 : HC-06 → ESP32
지난 삽질에 약간 심신이 지쳐있었다. 14.3hz가 최선이라니 25hz gps를 사서 이게 맞나 싶었다. 고작 1.5만원수준의 지출이었지만 그래도 25hz로 나온 gps를 14.3hz로 쓰려니 뭔가 억울하고 분명히 다른 방법이 있지 않을까 싶었다.
처음에 chatgpt랑 이야기할 때 esp32를 이용해보는게 어떠냐고 이야기를 했던게 떠올랐다.
과거에 누가 esp32를 이용하면 코딩도 해야되고 상당히 귀찮다는 정도의 기억만 있었는데, 이제 나에겐 유로 gpt가 있으니 물어보고 각도기를 좀 대봐야겠다고 생각했다.
gpt는 어려운거 아니니 바로 하면 된다고 각이 잘 나온다는 식으로 알려줬다. 그래서 바로 아두이노 박스를 뒤져서 블링블링한 esp32 칩을 꺼냈다.

[1] 1차 멘붕
처음에 너무 많은 핀을 보고 잠시 멘붕이 왔었다. 이게 다 뭐지. 그리고 3.3볼트를 줘야한다는데 이거 어떻게 해야되지? 그러다 esp32 모듈 자체에 마이크로usb 전원이 들어가고, 여기서 5v를 뽑아서 gps한테 공급해 줄 수 있다는 것을 알게 되었다. 그래서 뒤에 사진을 보면 결선이 좀 달라지는 과정이 보일 것이다. (그 전에는 usb A타입 단자쪽에서 전원을 받아서 gps와 블투 모듈에 조인해서 공급해주고 있었다)
[2] 2차 멘붕
아두이노IDE를 이용해서 esp32코드를 줘야하는데, IDE를 2.x버전을 다운받아 다 설치하고 시간이 많이 걸리는 esp관련 라이브러리랄지 다 다운받아 설치하고 컴파일 돌려보려고했더니 왠걸 오류가.
이유는 윈도우 로그인 계정명이 한글이라서 발생했다. 결국 개발환경만 잡는데 2시간 이상 소모됨.
결론적으로는 IDE 1.8.x 버전에 portable 설정으로 해결했다.
[3] 3차 멘붕
esp32에 gpt가 준 코드를 넣고 신나게 gps랑 붙여봤더니 hc-06때와는 다르게 접속하는데 누르자마자 바로바로 블투가 붙어주니 esp3가 확실히 더 처리속도가 좋구나 싶어서 신이났다. 그래서 다시 gps 설정을 25hz로 변경하고 통신이 원활하시라고 baudrate를 460800으로 올려줬다.

이 세팅으로 레이스 크로노에 접속하니까 위성정보에서 hz가 안정되긴하나 가끔씩 hz가 떨어졌다 복구되는 것을 발견했다. 이 원인이 처음에는 블루투스 모듈의 코드 최적화가 안되어서 그렇다고 착각했다. (사실은 gps문제였다 or 둘다 맞았다)
그래서 gpt 옆구리를 찔러서 여러가지 방식으로 구현을 더 해보라고 시키고 계속 업로드를 해줬는데, 왠걸 점점 성능이 더 악화되는 것을 확인. 아 정말 이게 맞나 싶어서 짜증이 났다. 그리고 될거 같은데 될듯 될듯 안되는 느낌에 자꾸 더 빠져들고 있었다.
gpt가 코드를 잘 못짜서 악화되었다고 생각하여 처음에 살짝만 불안정하던 코드로 esp32에 업로드하고 다시 테스트를 했는데 왠걸 얘도 아까처럼의 결과가 안나오는 거다. ㅈㅅ089ㅕㄷㅂ마ㅣㄹㄴ머ㅏㅣㄹㅇㅁ너ㅣ알ㄴ
그리고 곰곰히 레이스크로노를 지켜보면서 아까와 다른 점이 뭘까 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민 고민고민하다가 다음 가정을 하게된다.
"아까는 위성수가 적었는데, 지금은 위성이 많네? 위성수가 gps에 연산량을 늘리고 부하를 줘서 병목이나 성능저하를 일으키나?"
반복되는 테스트로 gps에 전원이 차단되는 시간이 줄어들면서 warm 이나 hot start를 할일이 많아지다보니 gps를 더 많이 잡게 된 것이다. 느낌상으로는 11~12개의 위성이 잡히면 한번씩 튀는 느낌.
그래서 최종적으로 결정한건 gnss설정을 바꿔서 gps(미국), qzss(일본) 설정만 남기고 나머지를 disable 하기로 한다.
- 5차 삽질의 끝.

GPS 설정에 들어가서 위성도 줄이는 김에 이것저것 더 세밀하게 불필요한 옵션들을 다 껐다. 그리고 떨리는 마음으로 결선하고 전원을 인가.
레이스크로노 위성정보 창의 구석에 적힌 hz표시가 "25hz"에서 1분이 넘는 시간동안 단 한번도 25 밑으로 내려오지 않는 기염을 토했다. 드디어 25hz를!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
하지만 잡힌 위성이 집안에서 테스트하는데도 8~9개씩 나오니, 혹시라도 개활지에 나가면 12개 이상 잡히면 또 증상이 재발하진 않을까 싶은 생각이 들었다. 그래서 20hz로 내려서 최종 세팅을 마무리 하기로 한다. 25hz를 마음 불안하게 쓰느니 20hz에서 안정적으로만 돌아가도 10hz보다 2배 아닌가!

레이스 크로노의 로그를 익스포트에서 해보니 1분이 넘는 시간동안 20hz가 딱 고정되어 동작하는 감격을 다시 맛봤다. 25hz도 되는데 어찌보면 당연. 집안에서 재는거라 DOP는 좀 높은편이긴하지만 이건 밖에 나가 계속 움직이다보면 점점 좋아질거라는 걸 안다.
이제 적절한 케이스 만들어주고 실전 테스트 후 끝내자.
- 실전 차량 테스트



다이소에 4개 천원짜리 작은 통이 얼추 잘 맞을거 같아서 사다 붙였다. 배선에 텐션이 살짝 들어가게 눌리긴하지만 큰 문제는 없을 것 같다. GPS 안테나 부분도 밖으로 잘 뽑아주고 실전에 투입해본다.
가족끼리 밥먹으러 가면서 차에 물려서 돌려본 결과 당연하지만 차량 네비에 표시되는거보다 더 빨리 반응하는 나의 훌륭한 gps. 위성은 최대 12개까지 잡혔지만 지하차도를 통과하는 일부 구간을 제외하고는 20hz를 놓지지 않았다.
또한 DOP도 1.초반때까지 내려와서 잘 유지되고 가끔은 1언더로도 내려갔었다. 이만하면 기존의 10hz gps와 거의 동등한 신뢰성을 가졌으면서도 20hz가 안정적으로 동작된다고 봐도 무방할 것 같다.
최종 설정을 아래와 같이 정리하고 거의 만3일이 걸린 삽질을 마친다.
- 최종정리
ㅁ 하드웨어
1. GPS : Quescan G10A-F30 모델 (UBX-M10050-KB 칩셋 사용) 스펙상 25hz 지원
2. 블루투스 모듈 : ESPRESSIF esp32-wroom-32 (집에서 굴러다니던 것 재활용)
ㅁ 설정값
1. 통신 BAUDRATE : 460800
2. GPS hz : 50ms (20hz)
3. esp32 코드 : 아두이노IDE 1.8.x 버전 포터블버전으로 전환 후, gpt가 짜준코드를 업로드
4. 그외 설정
- GPS 설정에서 GNSS는 GPS, QZSS 제외하고 모드 제거
- NMEA 설정 관련하여 GGA, RMC 메시지를 제외하고는 모두 안나오게 막음
- 불필요 포트로 메시지 안나가도록 커스터 마이징.
이상으로 도시락폭탄, 아 아니 20hz 지원하는 자작 GPS 제작기 끝.
'IT Life' 카테고리의 다른 글
대륙의 LTE 라우터 (aka 도시락, 에그) 사용기 (2) | 2024.11.19 |
---|---|
QCY 멜로버즈 프로 (MeloBuds Pro) 간단 사용기 (0) | 2024.10.30 |
대륙의 열화상 카메라 TOOLTOP T7 256*192 C타입 사용기 (feat 안드로이드) (0) | 2024.10.28 |
콘센트만 있는 방에 랜선 포설 ep.2 (4) | 2024.03.18 |
다얼유 DAREU A104 PRO FLEX 넌클릭 키보드 개봉기 (0) | 2024.03.05 |
콘센트 전원을 이용한 인터넷 전력선 모뎀 PLC 모뎀 사용기 (0) | 2024.03.03 |
갤럭시 GALAX RTX 3070 써멀 재도포 작업 및 온도측정 (0) | 2023.11.06 |