728x90
반응형
Garmin Edge 1040에서 Connect IQ로 직접 구현한 가로형 커스텀 데이터필드 화면

가민을 오래 쓰다 보면 결국 한 번쯤은 “내가 원하는 데이터만 한 화면에 크게 볼 수 없을까?”라는 생각을 하게 됩니다.

자전거에서는 속도·케이던스·파워·심박·현재시간을 한 화면에 모으고 싶고, 마라톤에서는 현재 페이스·랩 페이스·심박·거리·경과시간의 우선순위를 바꾸고 싶으며, 철인3종에서는 종목별로 필요한 데이터가 완전히 달라집니다.

저도 Garmin Edge 1040을 출퇴근용으로 쓰면서 예전 Edge 1000에 있던 가로형 화면이 아쉬워 직접 Connect IQ 데이터필드를 만들어봤습니다. 처음에는 단순히 화면을 90도로 돌리면 될 줄 알았는데 실제로 해보니 SDK 설치, Java 환경, 디바이스 패키지, PRG 빌드, 센서 접근 권한과 실제 기기 디버깅까지 생각보다 손볼 부분이 많았습니다.

핵심부터 말하면
Garmin Connect IQ를 지원하는 기기라면 Edge뿐 아니라 fēnix, Forerunner, epix, Enduro, Venu, Instinct 등에서도 커스텀 Data Field를 직접 개발할 수 있습니다. 다만 Edge처럼 직사각형 화면과 Fenix·Forerunner처럼 원형 화면은 해상도와 레이아웃 구조가 다르기 때문에 같은 코드를 그대로 복사하는 것이 아니라 화면 크기에 맞춰 분기해야 합니다.

Garmin Connect IQ는 자전거 속도계만을 위한 기능이 아니다

Garmin Edge 기본 세로 화면과 트레이닝 메뉴

가민의 Connect IQ는 단순히 워치페이스를 받는 스토어가 아닙니다.

Garmin Developers 기준으로 Data Field, Device App, Watch Face, Widget/Glance 등 여러 형태의 앱을 만들 수 있는 개발 플랫폼입니다.

2026년 8월 기준 최신 Connect IQ SDK는 9.2.0이며, Garmin은 Data Field에서 활동 정보를 새롭게 표시하거나 ANT+ 센서에 접근할 수 있도록 API를 제공합니다.

Garmin 기기 내 Connect IQ 스토어 메뉴

그래서 같은 Connect IQ라도 사용자에 따라 활용 방향이 꽤 다릅니다.

사용자 대표 Garmin 커스텀 화면에 넣기 좋은 데이터 설계 포인트
로드·그래블·MTB 라이더 Edge 540·840·1040·1050 등 속도, 파워, 케이던스, 심박, 거리, 경사, 시간, 센서 상태 주행 중 큰 숫자와 시인성 우선
마라톤·러닝 Forerunner 255·265·955·965·570·970 등 현재 페이스, 거리, 심박, 케이던스, 랩, 경과시간 손목을 짧게 보는 상황이라 숫자 수를 줄이는 것이 중요
철인3종·멀티스포츠 Forerunner 955·965·970, fēnix 7·8 등 바이크 파워·속도, 런 페이스·심박, 구간시간 종목별 프로필과 데이터 화면을 따로 설계
트레일·등산·울트라 fēnix, Enduro, epix, Instinct 계열 거리, 경과시간, 심박, 고도 관련 데이터, 배터리 장시간 사용과 화면 전력소모 고려

Garmin 공식 Compatible Devices 목록을 보면 Connect IQ는 Edge뿐 아니라 fēnix와 Forerunner의 여러 세대에 폭넓게 적용됩니다.

예를 들어 Forerunner 970은 454×454 원형 AMOLED, Forerunner 965도 454×454 원형 화면이며, fēnix 8 계열은 모델에 따라 416×416·454×454 AMOLED 또는 260×260·280×280 MIP 화면을 사용합니다.

반면 Edge 1040은 282×470 직사각형 화면입니다.

Edge 가로화면과 Fenix·Forerunner 커스텀 화면은 접근이 다르다

Edge 1040에서 제가 원했던 것은 기기를 물리적으로 90도 돌려 가로형 계기판으로 쓰는 것이었습니다.

이 경우 논리적인 470×282 가로 좌표를 실제 282×470 화면 좌표로 바꿔 그리는 식으로 구현할 수 있습니다.

하지만 fēnix나 Forerunner는 원형 워치이기 때문에 굳이 화면을 90도로 돌리는 개념보다 원형 화면의 안전영역에 데이터를 어떻게 배치할 것인가가 더 중요합니다. 즉 동일한 Data Field 프로젝트라도 화면의 폭과 높이, 원형/직사각형 여부에 따라 레이아웃을 분리하는 편이 좋습니다.

function onUpdate(dc) {
    var w = dc.getWidth();
    var h = dc.getHeight();

    if (w == h) {
        // fēnix / Forerunner 등 원형 워치용 UI
        drawRoundLayout(dc, w, h);
    } else {
        // Edge 등 직사각형 기기용 UI
        drawRectangleLayout(dc, w, h);
    }
}

이런 식으로 만들면 하나의 프로젝트에서 라이더용 Edge 화면과 러너·철인3종용 워치 화면을 각각 설계하는 것도 가능합니다.

다만 실제 지원 대상은 manifest의 제품 목록과 각 기기의 Connect IQ API 레벨을 기준으로 관리해야 합니다.

Connect IQ SDK Manager 설치부터 시작

Garmin Developers Connect IQ SDK 다운로드 공식 페이지

먼저 Garmin Developers에서 Connect IQ SDK Manager를 내려받습니다.

Windows, macOS, Linux용 설치 파일을 제공하며 개발자 계정으로 로그인해야 SDK와 기기 패키지를 내려받을 수 있습니다.

Garmin Connect IQ SDK Manager 로그인 화면

SDK Manager를 처음 실행하면 Garmin 개발자 계정 로그인이 필요합니다. 기존 Garmin 계정으로 진행할 수 있으며 최초 설정 과정에서 SDK Manager 업데이트 방식을 선택합니다.

Connect IQ SDK Manager 자동 업데이트 설정 화면

SDK와 기기 패키지를 함께 설치해야 한다

Connect IQ SDK Manager에서 다양한 Garmin 기기 패키지를 내려받는 화면

여기서 중요한 부분이 하나 있습니다.

Connect IQ SDK만 설치했다고 끝이 아니라 내가 빌드할 Garmin 기기의 Device Package도 설치해야 합니다. 이 과정 때문에 실제로 Edge뿐 아니라 fēnix, Forerunner, Enduro, Venu 등 다양한 제품이 개발 목록에 나타납니다.

Garmin Edge 1040 1040 Solar를 포함한 Connect IQ 지원 기기 다운로드 목록

예를 들어 자전거용으로 Edge 1040 / 1040 Solar를 선택할 수도 있고, 달리기용 Forerunner나 멀티스포츠용 fēnix를 대상으로 추가할 수도 있습니다.

여러 제품을 배포할 계획이라면 처음부터 각 모델의 화면 해상도와 API Level을 확인해 두는 것이 좋습니다.

Connect IQ 9.2.0 SDK 설치 완료 및 Current SDK 확인 화면

설치가 끝난 뒤에는 사용할 SDK가 Current SDK로 지정되어 있는지 확인합니다.

2026년 8월 기준 Garmin Developers에서 안내하는 최신 버전은 Connect IQ 9.2.0입니다.

Connect IQ SDK Manager Devices 탭에서 Edge Fenix Forerunner 기기 패키지를 확인하는 화면

Java가 없으면 Monkey C 빌드부터 막힌다

Connect IQ SDK를 설치하고 곧바로 PRG를 만들려고 하면 Windows 환경에 따라 Java가 없어 막히는 경우가 있습니다.

저 역시 처음 빌드할 때 아래처럼 java 명령을 찾지 못한다는 메시지가 떴습니다.

Monkey C PRG 빌드 중 Java 명령을 찾지 못해 실패한 Windows 터미널 화면

이 상태에서는 Edge 패키지가 잘못된 것이 아니라 Java 실행 환경이 없는 것입니다.

Garmin의 현재 Connect IQ 명령줄 개발 환경은 Java가 필요하므로 JDK를 설치하고 PATH를 확인해야 합니다.

Eclipse Temurin JDK 17 Windows 다운로드 페이지

Windows에서는 OpenJDK 계열을 사용할 수 있으며, 저는 Temurin JDK 17 LTS 환경으로 진행했습니다.

설치할 때는 64비트 Windows용 JDK 패키지를 선택합니다.

Eclipse Temurin JDK 17 설치 중 PATH와 JAVA_HOME 설정 화면

설치 옵션에서 PATH 등록과 JAVA_HOME을 함께 설정해 두면 이후 명령 프롬프트에서 java -version으로 정상 설치 여부를 확인하기 쉽습니다.

Monkey C 프로젝트는 어떤 구조로 만들까?

GarminCustomField/
├─ manifest.xml
├─ monkey.jungle
├─ developer_key.der
├─ source/
│  ├─ CustomFieldApp.mc
│  └─ CustomFieldView.mc
└─ resources/
   ├─ strings/
   └─ drawables/

Data Field 프로젝트의 기본 구조는 생각보다 단순합니다.

manifest.xml에서 앱 유형과 지원 기기를 지정하고, source 폴더에 Monkey C 코드를 넣습니다. 여러 Garmin 제품을 지원하려면 지원 제품 ID와 화면 레이아웃을 기기별로 관리해야 합니다.

라이딩·러닝 공통 데이터는 Activity.Info에서 받기

function compute(info) {
    if (info == null) {
        return;
    }

    var speed = info.currentSpeed;
    var cadence = info.currentCadence;
    var heartRate = info.currentHeartRate;
    var distance = info.elapsedDistance;
    var elapsed = info.elapsedTime;

    // 모든 값은 기기·활동·센서 상태에 따라 null일 수 있으므로
    // 실제 앱에서는 반드시 null 체크 후 사용
}

자전거 라이더라면 속도·케이던스·심박·거리·주행시간을 중심으로 구성하고, 러너라면 속도를 페이스 형식으로 변환해 보여주는 식으로 활용할 수 있습니다.

철인3종에서는 바이크와 런에서 우선순위가 완전히 다르기 때문에 각 활동 프로필별로 데이터 화면을 분리하는 것이 실용적입니다.

내 운동에 맞춘 화면은 이렇게 구성하는 것이 좋다

로드·그래블·MTB 라이더

주행 중에는 작은 숫자를 오래 읽기 어렵기 때문에 현재속도·파워·케이던스를 크게 두고, 거리·심박·현재시간은 두 번째 우선순위로 배치하는 편이 좋습니다. 출퇴근이라면 파워보다 현재시간을 크게 두는 것도 꽤 편합니다.

마라톤·러닝

러너라면 화면을 보는 시간이 더 짧기 때문에 데이터 수를 줄이는 것이 중요합니다. 현재 페이스, 랩 페이스, 심박, 거리, 경과시간 정도를 중심으로 구성하고 훈련 목적에 따라 케이던스를 추가할 수 있습니다. Forerunner 965·970처럼 454×454 AMOLED 화면은 공간이 넉넉하지만, 구형 MIP 모델은 해상도가 작으므로 같은 레이아웃을 그대로 쓰기 어렵습니다.

철인3종·듀애슬론

철인3종은 한 화면으로 모든 종목을 해결하려 하기보다 바이크 구간과 런 구간을 각각 최적화하는 편이 낫습니다. 바이크에서는 파워·속도·케이던스가 중요하고, 런에서는 페이스·심박·거리·랩이 더 중요합니다. 멀티스포츠 프로필에서 Connect IQ 필드 사용 가능 여부와 배치는 기기별로 실제 프로필에서 확인하는 것이 안전합니다.

Edge 1040에서는 가로형 데이터필드도 직접 만들 수 있다

Edge 1040의 화면은 282×470 직사각형입니다. 제가 테스트한 방식은 전체 화면을 이미지로 만들어 회전시키는 것이 아니라, 가상의 가로 좌표를 실제 세로 프레임버퍼 좌표로 직접 바꾸는 방식입니다.

// 논리 가로 좌표 (x, y, w, h)를
// Edge 실제 282 x 470 화면으로 직접 변환
private function landscapeRect(dc, x, y, w, h) {
    var px = 282 - y - h;
    var py = x;

    dc.fillRectangle(px, py, h, w);
}

이렇게 하면 Edge 1040 자체 펌웨어의 화면 방향을 바꾸는 것은 아니지만, Connect IQ Data Field 페이지 안에서는 가로형 계기판처럼 보이게 만들 수 있습니다. 지도, 설정, ClimbPro 같은 기본 Garmin UI까지 가로로 바뀌는 것은 아닙니다.

센서 배터리와 SRAM AXS 정보도 확장 가능

Connect IQ Data Field는 ANT+ 센서에 접근할 수 있습니다.

따라서 Garmin 케이던스 센서처럼 ANT+로 연결된 센서가 Battery Status를 전송한다면 배터리 상태를 읽을 수 있고, SRAM AXS 같은 전자변속 시스템도 Shifting API를 이용해 구성품 상태를 확인할 수 있습니다.

주의
센서 배터리가 항상 정확한 0~100% 숫자로 제공되는 것은 아닙니다. Connect IQ의 BatteryStatus는 NEW·GOOD·OK·LOW·CRITICAL 같은 단계와 전압 정보를 제공할 수 있으며, 센서가 해당 정보를 보내지 않으면 화면에 값이 나오지 않을 수 있습니다.

AXS처럼 여러 구성품을 가진 시스템은 component identifier가 여러 개 들어올 수 있습니다. 다만 코드에서 첫 번째 ID를 무조건 왼쪽 쉬프터, 두 번째를 오른쪽 쉬프터라고 단정하는 방식은 피하는 편이 좋습니다. 실제 장치에서 어떤 ID가 어떤 배터리인지 확인한 뒤 라벨링하는 것이 안전합니다.

PRG 파일 빌드 후 Garmin에 직접 설치

Monkey C 빌드 후 output 폴더에 생성된 Garmin PRG 실행 파일

Monkey C 빌드가 정상적으로 끝나면 .prg 실행 파일이 생성됩니다. gen, mir, debug XML 등은 개발 중간 산출물이고 실제 Garmin에 넣을 파일은 PRG입니다.

개인 테스트를 위한 사이드로드라면 USB로 Garmin 기기를 PC에 연결하고 Garmin/Apps 폴더에 PRG를 복사합니다.

장치가 MTP 방식으로 보이는 경우 Windows 탐색기에서 내부 저장소의 Garmin → Apps 폴더로 이동하면 됩니다.

Garmin Edge에서 사이드로드한 Connect IQ 데이터필드 설치 확인 메시지

Edge 1040에서는 새 Connect IQ 데이터필드를 인식하면 데이터필드 설정 안내가 표시될 수 있습니다.

활동 프로필의 데이터 화면에서 Connect IQ 항목을 찾아 직접 만든 Data Field를 선택합니다.

Garmin Edge Connect IQ 데이터필드 로딩 화면

새 필드를 적용한 직후에는 잠시 로딩이 나타날 수 있습니다. 실제 운동 중 사용하기 전에는 센서 연결 여부와 값 갱신이 정상인지 실내에서 먼저 테스트하는 편이 좋습니다.

Connect IQ 앱 실행 중 Garmin Edge 전원 옵션 안내 화면

직접 만든 Data Field가 Timer로 돌아가거나 안 뜰 때

이 과정에서 가장 답답했던 부분은 컴파일이 성공했다고 실제 Garmin에서도 정상 실행된다는 보장이 없다는 것이었습니다.

PRG는 만들어졌는데 Data Field를 선택하면 기본 Timer로 되돌아가거나 화면이 사라지는 경우 실제 기기에서 런타임 예외가 발생했을 가능성이 있습니다.

이럴 때는 Garmin 내부의 Garmin/Apps/Logs/CIQ_LOG.YAML을 확인하는 것이 가장 빠릅니다.

로그에는 앱 이름, 펌웨어 버전, Stack 주소 등이 기록되며 debug 정보와 대조하면 어느 부분에서 죽는지 추적할 수 있습니다.

증상 먼저 확인할 항목
PRG 빌드 자체가 안 됨 Java, Current SDK, Device Package, developer key
기기에 앱이 안 보임 manifest 제품 ID, PRG 복사 위치, 재부팅
선택하면 Timer로 돌아감 CIQ_LOG.YAML 런타임 오류 확인
센서 배터리만 -- 표시 ANT 권한, 센서 Battery Status 지원, 페어링 상태
Fenix·Forerunner에서 화면 잘림 원형 화면 안전영역, 해상도별 레이아웃, Device Reference

Garmin 기기별 화면 해상도가 다른 이유가 중요한 이유

Connect IQ 개발에서 가장 흔한 실수 중 하나가 내 Garmin에서 잘 뜬 화면이 다른 Garmin에서도 똑같이 뜰 것이라고 생각하는 것입니다.

  • Edge 1040 / 1040 Solar : 282×470 직사각형
  • Edge 1050 : 480×800 직사각형
  • Forerunner 965·970 : 454×454 원형 AMOLED
  • Forerunner 570 42mm : 390×390 원형 AMOLED
  • Forerunner 570 47mm : 454×454 원형 AMOLED
  • fēnix 8 43mm : 416×416 원형 AMOLED
  • fēnix 8 47·51mm : 454×454 원형 AMOLED
  • fēnix 8 Solar 계열 : 모델에 따라 260×260 또는 280×280 MIP

그래서 공개 배포를 목표로 한다면 화면 좌표를 전부 고정값으로 박기보다 dc.getWidth(), dc.getHeight()를 이용하고 화면별 레이아웃 함수를 나누는 것이 좋습니다. 또한 오래된 Forerunner나 fēnix까지 지원 범위를 넓히면 메모리 제한과 색상 수, API Level도 함께 낮춰야 할 수 있습니다.

Connect IQ 개발이 라이더·러너에게 의외로 재미있는 이유

처음에는 Edge 가로모드 하나 때문에 시작했지만 실제로 해보니 Connect IQ의 장점은 단순히 화면을 예쁘게 바꾸는 데 있지 않았습니다. 내 운동 방식에 맞춰 데이터 우선순위를 직접 설계할 수 있다는 점이 가장 큽니다.

예를 들어 출퇴근 라이더라면 현재시간을 가장 크게, 장거리 라이더라면 평균속도와 남은 거리, 인터벌 라이더라면 파워와 랩 데이터를 크게 배치할 수 있습니다. 마라톤에서는 페이스와 랩을 중심으로, 철인3종에서는 바이크와 런의 화면을 완전히 다르게 구성할 수 있습니다.

화면이 작은 스포츠워치일수록 제조사가 정해둔 기본 레이아웃을 그대로 쓰는 경우가 많은데, Connect IQ를 이용하면 그 제약을 꽤 많이 줄일 수 있습니다.

가민 지도·GPS 속도계 관련 같이 보면 좋은 글

FAQ|Garmin Connect IQ 커스텀 데이터필드

가민 Edge가 아니어도 Connect IQ Data Field를 만들 수 있나요?

네. Connect IQ를 지원하는 fēnix, Forerunner, epix, Enduro, Venu, Instinct 등 다양한 Garmin 기기에서 Data Field 개발이 가능합니다. 다만 제품별 해상도·화면 모양·API Level이 달라 Device Reference 확인이 필요합니다.

Edge 1040 가로모드는 정식 Landscape 설정인가요?

아닙니다. Edge 1040 시스템 UI 자체를 가로로 바꾸는 기능이 아니라 Connect IQ Data Field를 가로형 좌표로 직접 그려 주행 데이터 화면만 가로처럼 사용하는 방식입니다.

Forerunner나 Fenix도 화면을 가로로 돌릴 수 있나요?

원형 워치는 물리적인 가로·세로 전환보다 원형 화면에 맞춘 전용 Data Field 레이아웃을 만드는 것이 일반적입니다. Edge 가로화면 코드를 그대로 적용하는 방식은 적합하지 않습니다.

마라톤용으로 현재 페이스와 랩 페이스를 직접 배치할 수 있나요?

가능합니다. Connect IQ Data Field에서 활동 데이터를 이용해 러닝 화면을 구성할 수 있습니다. 다만 사용할 수 있는 항목과 상세 API는 기기·활동 유형·센서에 따라 다를 수 있으므로 개발 시 실제 대상 기기에서 확인해야 합니다.

Garmin 센서나 SRAM AXS 배터리를 정확한 퍼센트로 표시할 수 있나요?

항상 가능한 것은 아닙니다. ANT+ BatteryStatus가 제공하는 상태나 전압은 읽을 수 있지만 센서가 정확한 0~100% 값을 보내지 않는 경우도 있습니다. 수신되는 원본 상태를 기준으로 표시하는 것이 안전합니다.

직접 만든 PRG를 다른 사람에게 그냥 배포해도 되나요?

개인 테스트는 사이드로드 방식으로 할 수 있지만 여러 사용자에게 정식 배포하려면 Garmin Connect IQ 스토어 등록과 Garmin의 앱 배포·검토 절차를 확인하는 것이 좋습니다.

공식 개발 문서

정리
Garmin Connect IQ는 Edge의 자전거 데이터 화면을 꾸미는 데서 끝나는 기능이 아닙니다. 라이더, 마라톤 러너, 트레일러너, 철인3종 선수까지 자신이 실제로 보는 데이터를 직접 설계할 수 있는 플랫폼입니다. 다만 여러 Garmin을 지원하려면 화면 해상도, 화면 모양, API Level, 센서 지원 여부를 기기별로 나눠 설계해야 합니다.

※ 본문에 사용한 Edge 1040 화면과 설치 과정 이미지는 실제 Connect IQ 커스텀 Data Field 제작 및 사이드로드 테스트 과정에서 촬영한 화면입니다. SDK와 기기 펌웨어가 업데이트되면 메뉴와 API 지원 범위가 달라질 수 있으므로 최신 Garmin Developers 문서를 함께 확인하는 것을 권장합니다.

반응형
그리드형