<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Devcafe</id>
	<title>데브카페 - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Devcafe"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Devcafe"/>
	<updated>2026-08-19T07:16:12Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=West%EB%A1%9C_%EB%A1%9C%EC%BB%AC_%EC%A7%81%EC%A0%91_%EC%BB%B4%ED%8C%8C%EC%9D%BC&amp;diff=2559</id>
		<title>West로 로컬 직접 컴파일</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=West%EB%A1%9C_%EB%A1%9C%EC%BB%AC_%EC%A7%81%EC%A0%91_%EC%BB%B4%ED%8C%8C%EC%9D%BC&amp;diff=2559"/>
		<updated>2026-08-19T06:53:47Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* west로 로컬 직접 컴파일 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== west로 로컬 직접 컴파일 ==&lt;br /&gt;
=== 툴체인 준비 (최초 1회) ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pip install west --break-system-packages&lt;br /&gt;
# Zephyr SDK 설치 필요 (없으면):&lt;br /&gt;
# https://docs.zephyrproject.org/latest/develop/getting_started/index.html 참고&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== west workspace 초기화 ===&lt;br /&gt;
&lt;br /&gt;
config/west.yml이 매니페스트이므로, 그걸 기준으로 west workspace를 초기화합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
cd shortkey_firmware ## 펌웨어 대상 루트디렉토리로 이동 &lt;br /&gt;
west init -l config&lt;br /&gt;
west update&lt;br /&gt;
west zephyr-export&lt;br /&gt;
pip install -r zephyr/requirements-base.txt --break-system-packages&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 빌드 ===&lt;br /&gt;
&lt;br /&gt;
* boards/shields/shortkey가 루트의 zephyr/module.yml을 통해 모듈로 인식되게 하려면, &lt;br /&gt;
* 빌드 시 ZEPHYR_EXTRA_MODULES로 이 저장소 루트를 명시적으로 넘겨줘야 합니다. &lt;br /&gt;
* 그리고 config/ 안의 keymap/conf/overlay(예: config/boards/arm/nice_nano_v2.overlay)를 적용하려면 ZMK_CONFIG로 config 경로를 지정합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
west build -p -b nice_nano_v2 -- \&lt;br /&gt;
  -DSHIELD=shortkey \&lt;br /&gt;
  -DZMK_CONFIG=$(pwd)/config \&lt;br /&gt;
  -DZEPHYR_EXTRA_MODULES=$(pwd)&lt;br /&gt;
-p : pristine build (처음 또는 구조 바꿀 때마다 권장)&lt;br /&gt;
-DSHIELD=shortkey : boards/shields/shortkey 사용&lt;br /&gt;
-DZMK_CONFIG=.../config : config/shortkey.conf, config/boards/arm/nice_nano_v2.overlay 등 반영&lt;br /&gt;
-DZEPHYR_EXTRA_MODULES=.../shortkey_firmware : 루트의 zephyr/module.yml을 모듈로 인식시켜 boards/shields/shortkey 탐색 가능하게 함&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 결과물 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
ls build/zephyr/zmk.uf2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 파일을 부트로더 모드 진입한 보드 드라이브에 드래그 앤 드롭하면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 재빌드 시 ===&lt;br /&gt;
&lt;br /&gt;
설정만 바꿨다면 -p 없이:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
west build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
shield/board 자체를 바꾸면 다시 -p(pristine)로 빌드하세요.&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2558</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2558"/>
		<updated>2026-08-19T06:53:24Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* {:west로 로컬 직접 컴파일} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
boards\shields\Kconfig.shield&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
boards\shields\Kconfig.defconfig&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
/build.yml&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== config/west.yml ,  zephyr/module.yml 은 수정하지 않고 템플릿 그대로 사용한다. ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 펌웨어 컴파일 ==&lt;br /&gt;
&lt;br /&gt;
=== github 에 등록하기 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
git add .&lt;br /&gt;
git commit -m &amp;quot;Add fn25key macropad shield&amp;quot;&lt;br /&gt;
git push origin main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== github 에서 컴파일 작업 ===&lt;br /&gt;
# GitHub 저장소 페이지 → Actions 탭&lt;br /&gt;
# push 직후 워크플로우가 자동 실행됨 (초록 체크 = 성공, 빨간 X = 실패)&lt;br /&gt;
# 실패 시 로그 클릭해서 에러 확인 (대부분 devicetree 문법 오류나 핀 중복 사용)&lt;br /&gt;
&lt;br /&gt;
=== .uf2 파일 다운로드 ===&lt;br /&gt;
# 성공한 워크플로우 실행 클릭&lt;br /&gt;
# 하단 Artifacts 섹션에서 firmware 다운로드 (zip 안에 fn25key.uf2 등이 들어있음)&lt;br /&gt;
&lt;br /&gt;
=== 보드에 플래싱 ===&lt;br /&gt;
# Super Mini nRF52840 리셋 버튼 2번 빠르게 눌러 부트로더 모드 진입 → PC에 USB 드라이브(XIAO-SENSE 등)로 인식됨&lt;br /&gt;
# 다운로드한 .uf2 파일을 그 드라이브에 드래그 앤 드롭&lt;br /&gt;
# 자동으로 리부트되며 새 펌웨어로 동작 시작&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  로컬 빌드(west)로 하고 싶다면 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
pip install west --break-system-packages&lt;br /&gt;
west init -l config&lt;br /&gt;
west update&lt;br /&gt;
west zephyr-export&lt;br /&gt;
west build -p -b seeeduino_xiao_ble -- -DSHIELD=fn5x5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 결과물은 build/zephyr/zmk.uf2에 생성됩니다. &lt;br /&gt;
** Zephyr SDK(nRF 툴체인) 설치가 선행되어야 해서, 처음이라면 GitHub Actions 방식 추천.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{:west로 로컬 직접 컴파일}}&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2557</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2557"/>
		<updated>2026-08-19T06:52:58Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* {{:west로 로컬 직접 컴파일}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
boards\shields\Kconfig.shield&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
boards\shields\Kconfig.defconfig&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
/build.yml&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== config/west.yml ,  zephyr/module.yml 은 수정하지 않고 템플릿 그대로 사용한다. ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 펌웨어 컴파일 ==&lt;br /&gt;
&lt;br /&gt;
=== github 에 등록하기 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
git add .&lt;br /&gt;
git commit -m &amp;quot;Add fn25key macropad shield&amp;quot;&lt;br /&gt;
git push origin main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== github 에서 컴파일 작업 ===&lt;br /&gt;
# GitHub 저장소 페이지 → Actions 탭&lt;br /&gt;
# push 직후 워크플로우가 자동 실행됨 (초록 체크 = 성공, 빨간 X = 실패)&lt;br /&gt;
# 실패 시 로그 클릭해서 에러 확인 (대부분 devicetree 문법 오류나 핀 중복 사용)&lt;br /&gt;
&lt;br /&gt;
=== .uf2 파일 다운로드 ===&lt;br /&gt;
# 성공한 워크플로우 실행 클릭&lt;br /&gt;
# 하단 Artifacts 섹션에서 firmware 다운로드 (zip 안에 fn25key.uf2 등이 들어있음)&lt;br /&gt;
&lt;br /&gt;
=== 보드에 플래싱 ===&lt;br /&gt;
# Super Mini nRF52840 리셋 버튼 2번 빠르게 눌러 부트로더 모드 진입 → PC에 USB 드라이브(XIAO-SENSE 등)로 인식됨&lt;br /&gt;
# 다운로드한 .uf2 파일을 그 드라이브에 드래그 앤 드롭&lt;br /&gt;
# 자동으로 리부트되며 새 펌웨어로 동작 시작&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  로컬 빌드(west)로 하고 싶다면 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
pip install west --break-system-packages&lt;br /&gt;
west init -l config&lt;br /&gt;
west update&lt;br /&gt;
west zephyr-export&lt;br /&gt;
west build -p -b seeeduino_xiao_ble -- -DSHIELD=fn5x5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 결과물은 build/zephyr/zmk.uf2에 생성됩니다. &lt;br /&gt;
** Zephyr SDK(nRF 툴체인) 설치가 선행되어야 해서, 처음이라면 GitHub Actions 방식 추천.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={:west로 로컬 직접 컴파일}==&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=West%EB%A1%9C_%EB%A1%9C%EC%BB%AC_%EC%A7%81%EC%A0%91_%EC%BB%B4%ED%8C%8C%EC%9D%BC&amp;diff=2556</id>
		<title>West로 로컬 직접 컴파일</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=West%EB%A1%9C_%EB%A1%9C%EC%BB%AC_%EC%A7%81%EC%A0%91_%EC%BB%B4%ED%8C%8C%EC%9D%BC&amp;diff=2556"/>
		<updated>2026-08-19T05:50:04Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: 새 문서: == west로 로컬 직접 컴파일 == === 툴체인 준비 (최초 1회) ==== &amp;lt;source lang=bash&amp;gt;  pip install west --break-system-packages # Zephyr SDK 설치 필요 (없으면): # https://docs.zephyrproject.org/latest/develop/getting_started/index.html 참고 &amp;lt;/source&amp;gt;  === west workspace 초기화 ===  config/west.yml이 매니페스트이므로, 그걸 기준으로 west workspace를 초기화합니다.  &amp;lt;source lang=bash&amp;gt; cd shortkey_firmware ## 펌웨어 대상 루트디렉...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== west로 로컬 직접 컴파일 ==&lt;br /&gt;
=== 툴체인 준비 (최초 1회) ====&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pip install west --break-system-packages&lt;br /&gt;
# Zephyr SDK 설치 필요 (없으면):&lt;br /&gt;
# https://docs.zephyrproject.org/latest/develop/getting_started/index.html 참고&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== west workspace 초기화 ===&lt;br /&gt;
&lt;br /&gt;
config/west.yml이 매니페스트이므로, 그걸 기준으로 west workspace를 초기화합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
cd shortkey_firmware ## 펌웨어 대상 루트디렉토리로 이동 &lt;br /&gt;
west init -l config&lt;br /&gt;
west update&lt;br /&gt;
west zephyr-export&lt;br /&gt;
pip install -r zephyr/requirements-base.txt --break-system-packages&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 빌드 ===&lt;br /&gt;
&lt;br /&gt;
* boards/shields/shortkey가 루트의 zephyr/module.yml을 통해 모듈로 인식되게 하려면, &lt;br /&gt;
* 빌드 시 ZEPHYR_EXTRA_MODULES로 이 저장소 루트를 명시적으로 넘겨줘야 합니다. &lt;br /&gt;
* 그리고 config/ 안의 keymap/conf/overlay(예: config/boards/arm/nice_nano_v2.overlay)를 적용하려면 ZMK_CONFIG로 config 경로를 지정합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
west build -p -b nice_nano_v2 -- \&lt;br /&gt;
  -DSHIELD=shortkey \&lt;br /&gt;
  -DZMK_CONFIG=$(pwd)/config \&lt;br /&gt;
  -DZEPHYR_EXTRA_MODULES=$(pwd)&lt;br /&gt;
-p : pristine build (처음 또는 구조 바꿀 때마다 권장)&lt;br /&gt;
-DSHIELD=shortkey : boards/shields/shortkey 사용&lt;br /&gt;
-DZMK_CONFIG=.../config : config/shortkey.conf, config/boards/arm/nice_nano_v2.overlay 등 반영&lt;br /&gt;
-DZEPHYR_EXTRA_MODULES=.../shortkey_firmware : 루트의 zephyr/module.yml을 모듈로 인식시켜 boards/shields/shortkey 탐색 가능하게 함&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 결과물 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
ls build/zephyr/zmk.uf2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 파일을 부트로더 모드 진입한 보드 드라이브에 드래그 앤 드롭하면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 재빌드 시 ===&lt;br /&gt;
&lt;br /&gt;
설정만 바꿨다면 -p 없이:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
west build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
shield/board 자체를 바꾸면 다시 -p(pristine)로 빌드하세요.&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2555</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2555"/>
		<updated>2026-08-19T05:49:50Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* west로 로컬 직접 컴파일 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
boards\shields\Kconfig.shield&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
boards\shields\Kconfig.defconfig&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
/build.yml&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== config/west.yml ,  zephyr/module.yml 은 수정하지 않고 템플릿 그대로 사용한다. ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 펌웨어 컴파일 ==&lt;br /&gt;
&lt;br /&gt;
=== github 에 등록하기 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
git add .&lt;br /&gt;
git commit -m &amp;quot;Add fn25key macropad shield&amp;quot;&lt;br /&gt;
git push origin main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== github 에서 컴파일 작업 ===&lt;br /&gt;
# GitHub 저장소 페이지 → Actions 탭&lt;br /&gt;
# push 직후 워크플로우가 자동 실행됨 (초록 체크 = 성공, 빨간 X = 실패)&lt;br /&gt;
# 실패 시 로그 클릭해서 에러 확인 (대부분 devicetree 문법 오류나 핀 중복 사용)&lt;br /&gt;
&lt;br /&gt;
=== .uf2 파일 다운로드 ===&lt;br /&gt;
# 성공한 워크플로우 실행 클릭&lt;br /&gt;
# 하단 Artifacts 섹션에서 firmware 다운로드 (zip 안에 fn25key.uf2 등이 들어있음)&lt;br /&gt;
&lt;br /&gt;
=== 보드에 플래싱 ===&lt;br /&gt;
# Super Mini nRF52840 리셋 버튼 2번 빠르게 눌러 부트로더 모드 진입 → PC에 USB 드라이브(XIAO-SENSE 등)로 인식됨&lt;br /&gt;
# 다운로드한 .uf2 파일을 그 드라이브에 드래그 앤 드롭&lt;br /&gt;
# 자동으로 리부트되며 새 펌웨어로 동작 시작&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  로컬 빌드(west)로 하고 싶다면 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
pip install west --break-system-packages&lt;br /&gt;
west init -l config&lt;br /&gt;
west update&lt;br /&gt;
west zephyr-export&lt;br /&gt;
west build -p -b seeeduino_xiao_ble -- -DSHIELD=fn5x5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 결과물은 build/zephyr/zmk.uf2에 생성됩니다. &lt;br /&gt;
** Zephyr SDK(nRF 툴체인) 설치가 선행되어야 해서, 처음이라면 GitHub Actions 방식 추천.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{:west로 로컬 직접 컴파일}}==&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2554</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2554"/>
		<updated>2026-08-19T05:48:15Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 로컬 빌드(west)로 하고 싶다면 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
boards\shields\Kconfig.shield&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
boards\shields\Kconfig.defconfig&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
/build.yml&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== config/west.yml ,  zephyr/module.yml 은 수정하지 않고 템플릿 그대로 사용한다. ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 펌웨어 컴파일 ==&lt;br /&gt;
&lt;br /&gt;
=== github 에 등록하기 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
git add .&lt;br /&gt;
git commit -m &amp;quot;Add fn25key macropad shield&amp;quot;&lt;br /&gt;
git push origin main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== github 에서 컴파일 작업 ===&lt;br /&gt;
# GitHub 저장소 페이지 → Actions 탭&lt;br /&gt;
# push 직후 워크플로우가 자동 실행됨 (초록 체크 = 성공, 빨간 X = 실패)&lt;br /&gt;
# 실패 시 로그 클릭해서 에러 확인 (대부분 devicetree 문법 오류나 핀 중복 사용)&lt;br /&gt;
&lt;br /&gt;
=== .uf2 파일 다운로드 ===&lt;br /&gt;
# 성공한 워크플로우 실행 클릭&lt;br /&gt;
# 하단 Artifacts 섹션에서 firmware 다운로드 (zip 안에 fn25key.uf2 등이 들어있음)&lt;br /&gt;
&lt;br /&gt;
=== 보드에 플래싱 ===&lt;br /&gt;
# Super Mini nRF52840 리셋 버튼 2번 빠르게 눌러 부트로더 모드 진입 → PC에 USB 드라이브(XIAO-SENSE 등)로 인식됨&lt;br /&gt;
# 다운로드한 .uf2 파일을 그 드라이브에 드래그 앤 드롭&lt;br /&gt;
# 자동으로 리부트되며 새 펌웨어로 동작 시작&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  로컬 빌드(west)로 하고 싶다면 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
pip install west --break-system-packages&lt;br /&gt;
west init -l config&lt;br /&gt;
west update&lt;br /&gt;
west zephyr-export&lt;br /&gt;
west build -p -b seeeduino_xiao_ble -- -DSHIELD=fn5x5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 결과물은 build/zephyr/zmk.uf2에 생성됩니다. &lt;br /&gt;
** Zephyr SDK(nRF 툴체인) 설치가 선행되어야 해서, 처음이라면 GitHub Actions 방식 추천.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== west로 로컬 직접 컴파일 ==&lt;br /&gt;
=== 툴체인 준비 (최초 1회) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
pip install west --break-system-packages&lt;br /&gt;
# Zephyr SDK 설치 필요 (없으면):&lt;br /&gt;
# https://docs.zephyrproject.org/latest/develop/getting_started/index.html 참고&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== west workspace 초기화 ===&lt;br /&gt;
&lt;br /&gt;
config/west.yml이 매니페스트이므로, 그걸 기준으로 west workspace를 초기화합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
cd shortkey_firmware ## 펌웨어 대상 루트디렉토리로 이동 &lt;br /&gt;
west init -l config&lt;br /&gt;
west update&lt;br /&gt;
west zephyr-export&lt;br /&gt;
pip install -r zephyr/requirements-base.txt --break-system-packages&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 빌드 ===&lt;br /&gt;
&lt;br /&gt;
* boards/shields/shortkey가 루트의 zephyr/module.yml을 통해 모듈로 인식되게 하려면, &lt;br /&gt;
* 빌드 시 ZEPHYR_EXTRA_MODULES로 이 저장소 루트를 명시적으로 넘겨줘야 합니다. &lt;br /&gt;
* 그리고 config/ 안의 keymap/conf/overlay(예: config/boards/arm/nice_nano_v2.overlay)를 적용하려면 ZMK_CONFIG로 config 경로를 지정합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
west build -p -b nice_nano_v2 -- \&lt;br /&gt;
  -DSHIELD=shortkey \&lt;br /&gt;
  -DZMK_CONFIG=$(pwd)/config \&lt;br /&gt;
  -DZEPHYR_EXTRA_MODULES=$(pwd)&lt;br /&gt;
-p : pristine build (처음 또는 구조 바꿀 때마다 권장)&lt;br /&gt;
-DSHIELD=shortkey : boards/shields/shortkey 사용&lt;br /&gt;
-DZMK_CONFIG=.../config : config/shortkey.conf, config/boards/arm/nice_nano_v2.overlay 등 반영&lt;br /&gt;
-DZEPHYR_EXTRA_MODULES=.../shortkey_firmware : 루트의 zephyr/module.yml을 모듈로 인식시켜 boards/shields/shortkey 탐색 가능하게 함&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 결과물 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
ls build/zephyr/zmk.uf2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 파일을 부트로더 모드 진입한 보드 드라이브에 드래그 앤 드롭하면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 재빌드 시 ===&lt;br /&gt;
&lt;br /&gt;
설정만 바꿨다면 -p 없이:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
west build&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
shield/board 자체를 바꾸면 다시 -p(pristine)로 빌드하세요.&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2553</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2553"/>
		<updated>2026-08-18T23:47:04Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 사용법 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 (gpio) ===&lt;br /&gt;
* (뒷면) ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
   ROW0 ── GPIO4&lt;br /&gt;
   ROW1 ── GPIO5&lt;br /&gt;
   COL0 ── GPIO6&lt;br /&gt;
   COL1 ── GPIO7&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*  1N4148 다이오드 (검은 몸통에 흰 띠 있는 부분 = 캐소드) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
         COL0                COL1&lt;br /&gt;
          │                   │&lt;br /&gt;
  SW1 ────┼──●              SW2──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D1]│(캐소드→ROW0)     [D2]│(캐소드→ROW0)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW0 ────────┴──┘&lt;br /&gt;
          &lt;br /&gt;
  SW3 ────┼──●              SW4──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D3]│(캐소드→ROW1)     [D4]│(캐소드→ROW1)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW1 ────────┴──┘&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
* ESP32-C3 + BLE HID (Arduino)&lt;br /&gt;
==== Arduino + BLE Keyboard 라이브러리 (추천) ====&lt;br /&gt;
* 가장 검증되고 쉬운 방법입니다.&lt;br /&gt;
# 준비물&lt;br /&gt;
#:- Arduino IDE 설치&lt;br /&gt;
#:- ESP32 보드 패키지 설치&lt;br /&gt;
#:- ESP32-BLE-Keyboard 라이브러리 (T-vK 제작) &lt;br /&gt;
# Arduino IDE 설정&lt;br /&gt;
#: Arduino IDE 설치 =&amp;gt; https://www.arduino.cc/en/software/ &lt;br /&gt;
#:&amp;lt;source&amp;gt;&lt;br /&gt;
파일 → 환경설정 → 추가 보드 매니저 URL에 입력:&lt;br /&gt;
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json&lt;br /&gt;
&lt;br /&gt;
도구 → 보드 → 보드매니저 → &amp;quot;esp32&amp;quot; 검색 후 설치&lt;br /&gt;
도구 → 보드 → ESP32C3 Dev Module 선택&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# 라이브러리 설치&lt;br /&gt;
#:&amp;lt;source&amp;gt; 스케치 → 라이브러리 포함하기 → 라이브러리 관리&lt;br /&gt;
 검색: &amp;quot;ESP32 BLE Keyboard&amp;quot; (by T-vK) 설치&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# 예제 (2x2 매크로패드)&lt;br /&gt;
#:&amp;lt;SOURCE LANG=C&amp;gt;&lt;br /&gt;
#include &amp;lt;BleKeyboard.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BleKeyboard bleKeyboard(&amp;quot;Macro Pad&amp;quot;, &amp;quot;DIY&amp;quot;, 100);&lt;br /&gt;
&lt;br /&gt;
// 행/열 핀 설정 (ESP32-C3 Supermini 기준 예시)&lt;br /&gt;
const int rowPins[2] = {4, 5};&lt;br /&gt;
const int colPins[2] = {6, 7};&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  bleKeyboard.begin();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 2; i++) {&lt;br /&gt;
    pinMode(rowPins[i], OUTPUT);&lt;br /&gt;
    digitalWrite(rowPins[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  for (int i = 0; i &amp;lt; 2; i++) {&lt;br /&gt;
    pinMode(colPins[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (bleKeyboard.isConnected()) {&lt;br /&gt;
    for (int r = 0; r &amp;lt; 2; r++) {&lt;br /&gt;
      digitalWrite(rowPins[r], LOW);&lt;br /&gt;
      for (int c = 0; c &amp;lt; 2; c++) {&lt;br /&gt;
        if (digitalRead(colPins[c]) == LOW) {&lt;br /&gt;
          handleKey(r, c);&lt;br /&gt;
          delay(200); // 디바운스&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      digitalWrite(rowPins[r], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handleKey(int row, int col) {&lt;br /&gt;
  if (row == 0 &amp;amp;&amp;amp; col == 0) bleKeyboard.write(&#039;1&#039;);&lt;br /&gt;
  if (row == 0 &amp;amp;&amp;amp; col == 1) bleKeyboard.write(&#039;2&#039;);&lt;br /&gt;
  if (row == 1 &amp;amp;&amp;amp; col == 0) bleKeyboard.write(&#039;3&#039;);&lt;br /&gt;
  if (row == 1 &amp;amp;&amp;amp; col == 1) bleKeyboard.write(&#039;4&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 예제2 (단축키 입력 )&lt;br /&gt;
#:&amp;lt;SOURCE LANG=C&amp;gt;&lt;br /&gt;
#include &amp;lt;BleKeyboard.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BleKeyboard bleKeyboard(&amp;quot;MacroPad&amp;quot;, &amp;quot;DIY&amp;quot;, 100);&lt;br /&gt;
&lt;br /&gt;
const int keyPins[4] = {10, 5, 6, 7};&lt;br /&gt;
const int LED_PIN = 8;&lt;br /&gt;
&lt;br /&gt;
bool lastState[4] = {false, false, false, false};&lt;br /&gt;
unsigned long lastChange[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_MS = 5;&lt;br /&gt;
&lt;br /&gt;
unsigned long ledOffAt = 0;&lt;br /&gt;
&lt;br /&gt;
void ledBlink(int ms) {&lt;br /&gt;
  digitalWrite(LED_PIN, LOW);      // LOW = 켜짐&lt;br /&gt;
  ledOffAt = millis() + ms;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sendMacro(int idx) {&lt;br /&gt;
  switch (idx) {&lt;br /&gt;
    case 0:  // GPIO10 : Ctrl + Insert&lt;br /&gt;
      bleKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      bleKeyboard.press(KEY_INSERT);&lt;br /&gt;
      bleKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case 1:  // GPIO5 : Ctrl + F12&lt;br /&gt;
      bleKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      bleKeyboard.press(KEY_F12);&lt;br /&gt;
      bleKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case 2:  // GPIO6 : Ctrl + Alt + Insert&lt;br /&gt;
      bleKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      bleKeyboard.press(KEY_LEFT_ALT);&lt;br /&gt;
      bleKeyboard.press(KEY_INSERT);&lt;br /&gt;
      bleKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case 3:  // GPIO7 : Ctrl + F11&lt;br /&gt;
      bleKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      bleKeyboard.press(KEY_F11);&lt;br /&gt;
      bleKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// sendMacro를 잠시 이걸로 교체해서 테스트&lt;br /&gt;
// void sendMacro(int idx) {&lt;br /&gt;
//   bleKeyboard.print(idx + 1);   // 메모장에 1,2,3,4가 찍힘&lt;br /&gt;
// }&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  pinMode(LED_PIN, OUTPUT);&lt;br /&gt;
  digitalWrite(LED_PIN, HIGH);     // HIGH = 꺼짐&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(keyPins[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  bleKeyboard.begin();&lt;br /&gt;
&lt;br /&gt;
  // 부팅 완료 신호: 3회 깜빡&lt;br /&gt;
  for (int i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
    digitalWrite(LED_PIN, LOW);  delay(100);&lt;br /&gt;
    digitalWrite(LED_PIN, HIGH); delay(100);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  unsigned long now = millis();&lt;br /&gt;
&lt;br /&gt;
  if (ledOffAt &amp;amp;&amp;amp; now &amp;gt; ledOffAt) {&lt;br /&gt;
    digitalWrite(LED_PIN, HIGH);&lt;br /&gt;
    ledOffAt = 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (!bleKeyboard.isConnected()) {&lt;br /&gt;
    if (now % 1000 &amp;lt; 50) digitalWrite(LED_PIN, LOW);&lt;br /&gt;
    else if (!ledOffAt) digitalWrite(LED_PIN, HIGH);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    bool pressed = (digitalRead(keyPins[i]) == LOW);&lt;br /&gt;
&lt;br /&gt;
    if (pressed != lastState[i] &amp;amp;&amp;amp; (now - lastChange[i]) &amp;gt; DEBOUNCE_MS) {&lt;br /&gt;
      lastChange[i] = now;&lt;br /&gt;
      lastState[i] = pressed;&lt;br /&gt;
&lt;br /&gt;
      if (pressed) {&lt;br /&gt;
        sendMacro(i);&lt;br /&gt;
        ledBlink(50);&lt;br /&gt;
        Serial.printf(&amp;quot;KEY%d (GPIO%d)\n&amp;quot;, i + 1, keyPins[i]);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
=== &#039;&#039;&#039;예제3(USB 연결)&#039;&#039;&#039; ===&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;USB.h&amp;gt;&lt;br /&gt;
#include &amp;lt;USBHIDKeyboard.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
USBHIDKeyboard usbKeyboard;&lt;br /&gt;
&lt;br /&gt;
const int keyPins[4] = {10, 5, 6, 7};&lt;br /&gt;
bool lastState[4] = {false, false, false, false};&lt;br /&gt;
unsigned long lastChange[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_MS = 5;&lt;br /&gt;
&lt;br /&gt;
void sendMacro(int idx) {&lt;br /&gt;
  switch (idx) {&lt;br /&gt;
    case 0:&lt;br /&gt;
      usbKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      usbKeyboard.press(KEY_INSERT);&lt;br /&gt;
      usbKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
    case 1:&lt;br /&gt;
      usbKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      usbKeyboard.press(KEY_F12);&lt;br /&gt;
      usbKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
    case 2:&lt;br /&gt;
      usbKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      usbKeyboard.press(KEY_LEFT_ALT);&lt;br /&gt;
      usbKeyboard.press(KEY_INSERT);&lt;br /&gt;
      usbKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
    case 3:&lt;br /&gt;
      usbKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      usbKeyboard.press(KEY_F11);&lt;br /&gt;
      usbKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) pinMode(keyPins[i], INPUT_PULLUP);&lt;br /&gt;
  USB.begin();&lt;br /&gt;
  usbKeyboard.begin();&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  unsigned long now = millis();&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    bool pressed = (digitalRead(keyPins[i]) == LOW);&lt;br /&gt;
    if (pressed != lastState[i] &amp;amp;&amp;amp; (now - lastChange[i]) &amp;gt; DEBOUNCE_MS) {&lt;br /&gt;
      lastChange[i] = now;&lt;br /&gt;
      lastState[i] = pressed;&lt;br /&gt;
      if (pressed) sendMacro(i);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2552</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2552"/>
		<updated>2026-08-18T16:53:01Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 (gpio) ===&lt;br /&gt;
* (뒷면) ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
   ROW0 ── GPIO4&lt;br /&gt;
   ROW1 ── GPIO5&lt;br /&gt;
   COL0 ── GPIO6&lt;br /&gt;
   COL1 ── GPIO7&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*  1N4148 다이오드 (검은 몸통에 흰 띠 있는 부분 = 캐소드) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
         COL0                COL1&lt;br /&gt;
          │                   │&lt;br /&gt;
  SW1 ────┼──●              SW2──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D1]│(캐소드→ROW0)     [D2]│(캐소드→ROW0)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW0 ────────┴──┘&lt;br /&gt;
          &lt;br /&gt;
  SW3 ────┼──●              SW4──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D3]│(캐소드→ROW1)     [D4]│(캐소드→ROW1)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW1 ────────┴──┘&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
* ESP32-C3 + BLE HID (Arduino)&lt;br /&gt;
==== Arduino + BLE Keyboard 라이브러리 (추천) ====&lt;br /&gt;
* 가장 검증되고 쉬운 방법입니다.&lt;br /&gt;
# 준비물&lt;br /&gt;
#:- Arduino IDE 설치&lt;br /&gt;
#:- ESP32 보드 패키지 설치&lt;br /&gt;
#:- ESP32-BLE-Keyboard 라이브러리 (T-vK 제작) &lt;br /&gt;
# Arduino IDE 설정&lt;br /&gt;
#: Arduino IDE 설치 =&amp;gt; https://www.arduino.cc/en/software/ &lt;br /&gt;
#:&amp;lt;source&amp;gt;&lt;br /&gt;
파일 → 환경설정 → 추가 보드 매니저 URL에 입력:&lt;br /&gt;
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json&lt;br /&gt;
&lt;br /&gt;
도구 → 보드 → 보드매니저 → &amp;quot;esp32&amp;quot; 검색 후 설치&lt;br /&gt;
도구 → 보드 → ESP32C3 Dev Module 선택&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# 라이브러리 설치&lt;br /&gt;
#:&amp;lt;source&amp;gt; 스케치 → 라이브러리 포함하기 → 라이브러리 관리&lt;br /&gt;
 검색: &amp;quot;ESP32 BLE Keyboard&amp;quot; (by T-vK) 설치&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# 예제 (2x2 매크로패드)&lt;br /&gt;
#:&amp;lt;SOURCE LANG=C&amp;gt;&lt;br /&gt;
#include &amp;lt;BleKeyboard.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BleKeyboard bleKeyboard(&amp;quot;Macro Pad&amp;quot;, &amp;quot;DIY&amp;quot;, 100);&lt;br /&gt;
&lt;br /&gt;
// 행/열 핀 설정 (ESP32-C3 Supermini 기준 예시)&lt;br /&gt;
const int rowPins[2] = {4, 5};&lt;br /&gt;
const int colPins[2] = {6, 7};&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  bleKeyboard.begin();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 2; i++) {&lt;br /&gt;
    pinMode(rowPins[i], OUTPUT);&lt;br /&gt;
    digitalWrite(rowPins[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  for (int i = 0; i &amp;lt; 2; i++) {&lt;br /&gt;
    pinMode(colPins[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (bleKeyboard.isConnected()) {&lt;br /&gt;
    for (int r = 0; r &amp;lt; 2; r++) {&lt;br /&gt;
      digitalWrite(rowPins[r], LOW);&lt;br /&gt;
      for (int c = 0; c &amp;lt; 2; c++) {&lt;br /&gt;
        if (digitalRead(colPins[c]) == LOW) {&lt;br /&gt;
          handleKey(r, c);&lt;br /&gt;
          delay(200); // 디바운스&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      digitalWrite(rowPins[r], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handleKey(int row, int col) {&lt;br /&gt;
  if (row == 0 &amp;amp;&amp;amp; col == 0) bleKeyboard.write(&#039;1&#039;);&lt;br /&gt;
  if (row == 0 &amp;amp;&amp;amp; col == 1) bleKeyboard.write(&#039;2&#039;);&lt;br /&gt;
  if (row == 1 &amp;amp;&amp;amp; col == 0) bleKeyboard.write(&#039;3&#039;);&lt;br /&gt;
  if (row == 1 &amp;amp;&amp;amp; col == 1) bleKeyboard.write(&#039;4&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 예제2 (단축키 입력 )&lt;br /&gt;
#:&amp;lt;SOURCE LANG=C&amp;gt;&lt;br /&gt;
#include &amp;lt;BleKeyboard.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BleKeyboard bleKeyboard(&amp;quot;MacroPad&amp;quot;, &amp;quot;DIY&amp;quot;, 100);&lt;br /&gt;
&lt;br /&gt;
const int keyPins[4] = {10, 5, 6, 7};&lt;br /&gt;
const int LED_PIN = 8;&lt;br /&gt;
&lt;br /&gt;
bool lastState[4] = {false, false, false, false};&lt;br /&gt;
unsigned long lastChange[4] = {0, 0, 0, 0};&lt;br /&gt;
const unsigned long DEBOUNCE_MS = 5;&lt;br /&gt;
&lt;br /&gt;
unsigned long ledOffAt = 0;&lt;br /&gt;
&lt;br /&gt;
void ledBlink(int ms) {&lt;br /&gt;
  digitalWrite(LED_PIN, LOW);      // LOW = 켜짐&lt;br /&gt;
  ledOffAt = millis() + ms;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sendMacro(int idx) {&lt;br /&gt;
  switch (idx) {&lt;br /&gt;
    case 0:  // GPIO10 : Ctrl + Insert&lt;br /&gt;
      bleKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      bleKeyboard.press(KEY_INSERT);&lt;br /&gt;
      bleKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case 1:  // GPIO5 : Ctrl + F12&lt;br /&gt;
      bleKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      bleKeyboard.press(KEY_F12);&lt;br /&gt;
      bleKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case 2:  // GPIO6 : Ctrl + Alt + Insert&lt;br /&gt;
      bleKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      bleKeyboard.press(KEY_LEFT_ALT);&lt;br /&gt;
      bleKeyboard.press(KEY_INSERT);&lt;br /&gt;
      bleKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case 3:  // GPIO7 : Ctrl + F11&lt;br /&gt;
      bleKeyboard.press(KEY_LEFT_CTRL);&lt;br /&gt;
      bleKeyboard.press(KEY_F11);&lt;br /&gt;
      bleKeyboard.releaseAll();&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// sendMacro를 잠시 이걸로 교체해서 테스트&lt;br /&gt;
// void sendMacro(int idx) {&lt;br /&gt;
//   bleKeyboard.print(idx + 1);   // 메모장에 1,2,3,4가 찍힘&lt;br /&gt;
// }&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  pinMode(LED_PIN, OUTPUT);&lt;br /&gt;
  digitalWrite(LED_PIN, HIGH);     // HIGH = 꺼짐&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    pinMode(keyPins[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  bleKeyboard.begin();&lt;br /&gt;
&lt;br /&gt;
  // 부팅 완료 신호: 3회 깜빡&lt;br /&gt;
  for (int i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
    digitalWrite(LED_PIN, LOW);  delay(100);&lt;br /&gt;
    digitalWrite(LED_PIN, HIGH); delay(100);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  unsigned long now = millis();&lt;br /&gt;
&lt;br /&gt;
  if (ledOffAt &amp;amp;&amp;amp; now &amp;gt; ledOffAt) {&lt;br /&gt;
    digitalWrite(LED_PIN, HIGH);&lt;br /&gt;
    ledOffAt = 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (!bleKeyboard.isConnected()) {&lt;br /&gt;
    if (now % 1000 &amp;lt; 50) digitalWrite(LED_PIN, LOW);&lt;br /&gt;
    else if (!ledOffAt) digitalWrite(LED_PIN, HIGH);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 4; i++) {&lt;br /&gt;
    bool pressed = (digitalRead(keyPins[i]) == LOW);&lt;br /&gt;
&lt;br /&gt;
    if (pressed != lastState[i] &amp;amp;&amp;amp; (now - lastChange[i]) &amp;gt; DEBOUNCE_MS) {&lt;br /&gt;
      lastChange[i] = now;&lt;br /&gt;
      lastState[i] = pressed;&lt;br /&gt;
&lt;br /&gt;
      if (pressed) {&lt;br /&gt;
        sendMacro(i);&lt;br /&gt;
        ledBlink(50);&lt;br /&gt;
        Serial.printf(&amp;quot;KEY%d (GPIO%d)\n&amp;quot;, i + 1, keyPins[i]);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2551</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2551"/>
		<updated>2026-08-14T15:40:56Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* Arduino + BLE Keyboard 라이브러리 (추천) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 (gpio) ===&lt;br /&gt;
* (뒷면) ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
   ROW0 ── GPIO4&lt;br /&gt;
   ROW1 ── GPIO5&lt;br /&gt;
   COL0 ── GPIO6&lt;br /&gt;
   COL1 ── GPIO7&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*  1N4148 다이오드 (검은 몸통에 흰 띠 있는 부분 = 캐소드) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
         COL0                COL1&lt;br /&gt;
          │                   │&lt;br /&gt;
  SW1 ────┼──●              SW2──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D1]│(캐소드→ROW0)     [D2]│(캐소드→ROW0)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW0 ────────┴──┘&lt;br /&gt;
          &lt;br /&gt;
  SW3 ────┼──●              SW4──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D3]│(캐소드→ROW1)     [D4]│(캐소드→ROW1)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW1 ────────┴──┘&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
* ESP32-C3 + BLE HID (Arduino)&lt;br /&gt;
==== Arduino + BLE Keyboard 라이브러리 (추천) ====&lt;br /&gt;
* 가장 검증되고 쉬운 방법입니다.&lt;br /&gt;
# 준비물&lt;br /&gt;
#:- Arduino IDE 설치&lt;br /&gt;
#:- ESP32 보드 패키지 설치&lt;br /&gt;
#:- ESP32-BLE-Keyboard 라이브러리 (T-vK 제작) &lt;br /&gt;
# Arduino IDE 설정&lt;br /&gt;
#: Arduino IDE 설치 =&amp;gt; https://www.arduino.cc/en/software/ &lt;br /&gt;
#:&amp;lt;source&amp;gt;&lt;br /&gt;
파일 → 환경설정 → 추가 보드 매니저 URL에 입력:&lt;br /&gt;
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json&lt;br /&gt;
&lt;br /&gt;
도구 → 보드 → 보드매니저 → &amp;quot;esp32&amp;quot; 검색 후 설치&lt;br /&gt;
도구 → 보드 → ESP32C3 Dev Module 선택&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# 라이브러리 설치&lt;br /&gt;
#:&amp;lt;source&amp;gt; 스케치 → 라이브러리 포함하기 → 라이브러리 관리&lt;br /&gt;
 검색: &amp;quot;ESP32 BLE Keyboard&amp;quot; (by T-vK) 설치&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# 예제 (2x2 매크로패드)&lt;br /&gt;
#:&amp;lt;SOURCE LANG=C&amp;gt;&lt;br /&gt;
#include &amp;lt;BleKeyboard.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BleKeyboard bleKeyboard(&amp;quot;Macro Pad&amp;quot;, &amp;quot;DIY&amp;quot;, 100);&lt;br /&gt;
&lt;br /&gt;
// 행/열 핀 설정 (ESP32-C3 Supermini 기준 예시)&lt;br /&gt;
const int rowPins[2] = {4, 5};&lt;br /&gt;
const int colPins[2] = {6, 7};&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  bleKeyboard.begin();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 2; i++) {&lt;br /&gt;
    pinMode(rowPins[i], OUTPUT);&lt;br /&gt;
    digitalWrite(rowPins[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  for (int i = 0; i &amp;lt; 2; i++) {&lt;br /&gt;
    pinMode(colPins[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (bleKeyboard.isConnected()) {&lt;br /&gt;
    for (int r = 0; r &amp;lt; 2; r++) {&lt;br /&gt;
      digitalWrite(rowPins[r], LOW);&lt;br /&gt;
      for (int c = 0; c &amp;lt; 2; c++) {&lt;br /&gt;
        if (digitalRead(colPins[c]) == LOW) {&lt;br /&gt;
          handleKey(r, c);&lt;br /&gt;
          delay(200); // 디바운스&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      digitalWrite(rowPins[r], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handleKey(int row, int col) {&lt;br /&gt;
  if (row == 0 &amp;amp;&amp;amp; col == 0) bleKeyboard.write(&#039;1&#039;);&lt;br /&gt;
  if (row == 0 &amp;amp;&amp;amp; col == 1) bleKeyboard.write(&#039;2&#039;);&lt;br /&gt;
  if (row == 1 &amp;amp;&amp;amp; col == 0) bleKeyboard.write(&#039;3&#039;);&lt;br /&gt;
  if (row == 1 &amp;amp;&amp;amp; col == 1) bleKeyboard.write(&#039;4&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2550</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2550"/>
		<updated>2026-08-14T15:40:27Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* Arduino + BLE Keyboard 라이브러리 (추천) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 (gpio) ===&lt;br /&gt;
* (뒷면) ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
   ROW0 ── GPIO4&lt;br /&gt;
   ROW1 ── GPIO5&lt;br /&gt;
   COL0 ── GPIO6&lt;br /&gt;
   COL1 ── GPIO7&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*  1N4148 다이오드 (검은 몸통에 흰 띠 있는 부분 = 캐소드) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
         COL0                COL1&lt;br /&gt;
          │                   │&lt;br /&gt;
  SW1 ────┼──●              SW2──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D1]│(캐소드→ROW0)     [D2]│(캐소드→ROW0)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW0 ────────┴──┘&lt;br /&gt;
          &lt;br /&gt;
  SW3 ────┼──●              SW4──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D3]│(캐소드→ROW1)     [D4]│(캐소드→ROW1)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW1 ────────┴──┘&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
* ESP32-C3 + BLE HID (Arduino)&lt;br /&gt;
==== Arduino + BLE Keyboard 라이브러리 (추천) ====&lt;br /&gt;
* 가장 검증되고 쉬운 방법입니다.&lt;br /&gt;
# 준비물&lt;br /&gt;
#:- Arduino IDE 설치&lt;br /&gt;
#:- ESP32 보드 패키지 설치&lt;br /&gt;
#:- ESP32-BLE-Keyboard 라이브러리 (T-vK 제작) &lt;br /&gt;
# Arduino IDE 설정&lt;br /&gt;
#: Arduino IDE 설치 =&amp;gt; https://www.arduino.cc/en/software/ &lt;br /&gt;
#:&amp;lt;source&amp;gt;&lt;br /&gt;
파일 → 환경설정 → 추가 보드 매니저 URL에 입력:&lt;br /&gt;
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json&lt;br /&gt;
&lt;br /&gt;
도구 → 보드 → 보드매니저 → &amp;quot;esp32&amp;quot; 검색 후 설치&lt;br /&gt;
도구 → 보드 → ESP32C3 Dev Module 선택&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# 라이브러리 설치&lt;br /&gt;
#:&amp;lt;source&amp;gt; 스케치 → 라이브러리 포함하기 → 라이브러리 관리&lt;br /&gt;
 검색: &amp;quot;ESP32 BLE Keyboard&amp;quot; (by T-vK) 설치&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# 예제 (2x2 매크로패드)&lt;br /&gt;
&amp;lt;SOURCE LANG=CPP&amp;gt;&lt;br /&gt;
#include &amp;lt;BleKeyboard.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BleKeyboard bleKeyboard(&amp;quot;Macro Pad&amp;quot;, &amp;quot;DIY&amp;quot;, 100);&lt;br /&gt;
&lt;br /&gt;
// 행/열 핀 설정 (ESP32-C3 Supermini 기준 예시)&lt;br /&gt;
const int rowPins[2] = {4, 5};&lt;br /&gt;
const int colPins[2] = {6, 7};&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  bleKeyboard.begin();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 2; i++) {&lt;br /&gt;
    pinMode(rowPins[i], OUTPUT);&lt;br /&gt;
    digitalWrite(rowPins[i], HIGH);&lt;br /&gt;
  }&lt;br /&gt;
  for (int i = 0; i &amp;lt; 2; i++) {&lt;br /&gt;
    pinMode(colPins[i], INPUT_PULLUP);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (bleKeyboard.isConnected()) {&lt;br /&gt;
    for (int r = 0; r &amp;lt; 2; r++) {&lt;br /&gt;
      digitalWrite(rowPins[r], LOW);&lt;br /&gt;
      for (int c = 0; c &amp;lt; 2; c++) {&lt;br /&gt;
        if (digitalRead(colPins[c]) == LOW) {&lt;br /&gt;
          handleKey(r, c);&lt;br /&gt;
          delay(200); // 디바운스&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      digitalWrite(rowPins[r], HIGH);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handleKey(int row, int col) {&lt;br /&gt;
  if (row == 0 &amp;amp;&amp;amp; col == 0) bleKeyboard.write(&#039;1&#039;);&lt;br /&gt;
  if (row == 0 &amp;amp;&amp;amp; col == 1) bleKeyboard.write(&#039;2&#039;);&lt;br /&gt;
  if (row == 1 &amp;amp;&amp;amp; col == 0) bleKeyboard.write(&#039;3&#039;);&lt;br /&gt;
  if (row == 1 &amp;amp;&amp;amp; col == 1) bleKeyboard.write(&#039;4&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2549</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2549"/>
		<updated>2026-08-14T15:18:29Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* Arduino + BLE Keyboard 라이브러리 (추천) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 (gpio) ===&lt;br /&gt;
* (뒷면) ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
   ROW0 ── GPIO4&lt;br /&gt;
   ROW1 ── GPIO5&lt;br /&gt;
   COL0 ── GPIO6&lt;br /&gt;
   COL1 ── GPIO7&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*  1N4148 다이오드 (검은 몸통에 흰 띠 있는 부분 = 캐소드) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
         COL0                COL1&lt;br /&gt;
          │                   │&lt;br /&gt;
  SW1 ────┼──●              SW2──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D1]│(캐소드→ROW0)     [D2]│(캐소드→ROW0)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW0 ────────┴──┘&lt;br /&gt;
          &lt;br /&gt;
  SW3 ────┼──●              SW4──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D3]│(캐소드→ROW1)     [D4]│(캐소드→ROW1)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW1 ────────┴──┘&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
* ESP32-C3 + BLE HID (Arduino)&lt;br /&gt;
==== Arduino + BLE Keyboard 라이브러리 (추천) ====&lt;br /&gt;
* 가장 검증되고 쉬운 방법입니다.&lt;br /&gt;
# 준비물&lt;br /&gt;
#:- Arduino IDE 설치&lt;br /&gt;
#:- ESP32 보드 패키지 설치&lt;br /&gt;
#:- ESP32-BLE-Keyboard 라이브러리 (T-vK 제작) &lt;br /&gt;
# Arduino IDE 설정&lt;br /&gt;
#: Arduino IDE 설치 =&amp;gt; https://www.arduino.cc/en/software/ &lt;br /&gt;
#:&amp;lt;source&amp;gt;&lt;br /&gt;
파일 → 환경설정 → 추가 보드 매니저 URL에 입력:&lt;br /&gt;
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json&lt;br /&gt;
&lt;br /&gt;
도구 → 보드 → 보드매니저 → &amp;quot;esp32&amp;quot; 검색 후 설치&lt;br /&gt;
도구 → 보드 → ESP32C3 Dev Module 선택&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# 라이브러리 설치&lt;br /&gt;
#:&amp;lt;source&amp;gt; 스케치 → 라이브러리 포함하기 → 라이브러리 관리&lt;br /&gt;
 검색: &amp;quot;ESP32 BLE Keyboard&amp;quot; (by T-vK) 설치&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2548</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2548"/>
		<updated>2026-08-14T15:15:27Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* Arduino + BLE Keyboard 라이브러리 (추천) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 (gpio) ===&lt;br /&gt;
* (뒷면) ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
   ROW0 ── GPIO4&lt;br /&gt;
   ROW1 ── GPIO5&lt;br /&gt;
   COL0 ── GPIO6&lt;br /&gt;
   COL1 ── GPIO7&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*  1N4148 다이오드 (검은 몸통에 흰 띠 있는 부분 = 캐소드) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
         COL0                COL1&lt;br /&gt;
          │                   │&lt;br /&gt;
  SW1 ────┼──●              SW2──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D1]│(캐소드→ROW0)     [D2]│(캐소드→ROW0)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW0 ────────┴──┘&lt;br /&gt;
          &lt;br /&gt;
  SW3 ────┼──●              SW4──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D3]│(캐소드→ROW1)     [D4]│(캐소드→ROW1)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW1 ────────┴──┘&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
* ESP32-C3 + BLE HID (Arduino)&lt;br /&gt;
==== Arduino + BLE Keyboard 라이브러리 (추천) ====&lt;br /&gt;
* 가장 검증되고 쉬운 방법입니다.&lt;br /&gt;
# 준비물&lt;br /&gt;
#:- Arduino IDE 설치&lt;br /&gt;
#:- ESP32 보드 패키지 설치&lt;br /&gt;
#:- ESP32-BLE-Keyboard 라이브러리 (T-vK 제작) &lt;br /&gt;
# Arduino IDE 설정&lt;br /&gt;
#: Arduino IDE 설치 =&amp;gt; https://www.arduino.cc/en/software/ &lt;br /&gt;
#:&amp;lt;source&amp;gt;&lt;br /&gt;
파일 → 환경설정 → 추가 보드 매니저 URL에 입력:&lt;br /&gt;
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json&lt;br /&gt;
&lt;br /&gt;
도구 → 보드 → 보드매니저 → &amp;quot;esp32&amp;quot; 검색 후 설치&lt;br /&gt;
도구 → 보드 → ESP32C3 Dev Module 선택&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# 라이브러리 설치&lt;br /&gt;
#: 스케치 → 라이브러리 포함하기 → 라이브러리 관리&lt;br /&gt;
#: 검색: &amp;quot;ESP32 BLE Keyboard&amp;quot; (by T-vK) 설치&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2547</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2547"/>
		<updated>2026-08-14T15:12:23Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 펌웨어 플래싱 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 (gpio) ===&lt;br /&gt;
* (뒷면) ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
   ROW0 ── GPIO4&lt;br /&gt;
   ROW1 ── GPIO5&lt;br /&gt;
   COL0 ── GPIO6&lt;br /&gt;
   COL1 ── GPIO7&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*  1N4148 다이오드 (검은 몸통에 흰 띠 있는 부분 = 캐소드) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
         COL0                COL1&lt;br /&gt;
          │                   │&lt;br /&gt;
  SW1 ────┼──●              SW2──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D1]│(캐소드→ROW0)     [D2]│(캐소드→ROW0)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW0 ────────┴──┘&lt;br /&gt;
          &lt;br /&gt;
  SW3 ────┼──●              SW4──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D3]│(캐소드→ROW1)     [D4]│(캐소드→ROW1)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW1 ────────┴──┘&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
* ESP32-C3 + BLE HID (Arduino)&lt;br /&gt;
==== Arduino + BLE Keyboard 라이브러리 (추천) ====&lt;br /&gt;
* 가장 검증되고 쉬운 방법입니다.&lt;br /&gt;
# 준비물&lt;br /&gt;
#:- Arduino IDE 설치&lt;br /&gt;
#:- ESP32 보드 패키지 설치&lt;br /&gt;
#:- ESP32-BLE-Keyboard 라이브러리 (T-vK 제작) &lt;br /&gt;
# Arduino IDE 설정&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2546</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2546"/>
		<updated>2026-08-14T15:10:32Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 펌웨어 플래싱 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 (gpio) ===&lt;br /&gt;
* (뒷면) ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
   ROW0 ── GPIO4&lt;br /&gt;
   ROW1 ── GPIO5&lt;br /&gt;
   COL0 ── GPIO6&lt;br /&gt;
   COL1 ── GPIO7&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*  1N4148 다이오드 (검은 몸통에 흰 띠 있는 부분 = 캐소드) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
         COL0                COL1&lt;br /&gt;
          │                   │&lt;br /&gt;
  SW1 ────┼──●              SW2──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D1]│(캐소드→ROW0)     [D2]│(캐소드→ROW0)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW0 ────────┴──┘&lt;br /&gt;
          &lt;br /&gt;
  SW3 ────┼──●              SW4──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D3]│(캐소드→ROW1)     [D4]│(캐소드→ROW1)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW1 ────────┴──┘&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
* ESP32-C3 + BLE HID (Arduino)&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2545</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2545"/>
		<updated>2026-08-14T15:09:14Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 납땜 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 (gpio) ===&lt;br /&gt;
* (뒷면) ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
   ROW0 ── GPIO4&lt;br /&gt;
   ROW1 ── GPIO5&lt;br /&gt;
   COL0 ── GPIO6&lt;br /&gt;
   COL1 ── GPIO7&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*  1N4148 다이오드 (검은 몸통에 흰 띠 있는 부분 = 캐소드) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
         COL0                COL1&lt;br /&gt;
          │                   │&lt;br /&gt;
  SW1 ────┼──●              SW2──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D1]│(캐소드→ROW0)     [D2]│(캐소드→ROW0)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW0 ────────┴──┘&lt;br /&gt;
          &lt;br /&gt;
  SW3 ────┼──●              SW4──┼──●&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
         [D3]│(캐소드→ROW1)     [D4]│(캐소드→ROW1)&lt;br /&gt;
          │  │                   │  │&lt;br /&gt;
          └──┴───── ROW1 ────────┴──┘&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2544</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2544"/>
		<updated>2026-08-14T15:07:12Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* ESP32 C3 칩 구성도 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 (gpio) ===&lt;br /&gt;
* (뒷면) ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2543</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2543"/>
		<updated>2026-08-14T15:06:26Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* ESP32 C3 칩 구성도 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 ===&lt;br /&gt;
* (뒷면) ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2542</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2542"/>
		<updated>2026-08-14T15:06:09Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* ESP32 C3 칩 구성도 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 ===&lt;br /&gt;
* 뒷면 ESP32-C3 Supermini     &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2541</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2541"/>
		<updated>2026-08-14T15:05:45Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* ESP32 C3 칩 구성도 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 ===&lt;br /&gt;
* 뒷면 &lt;br /&gt;
&amp;lt;SOURCE&amp;gt;&lt;br /&gt;
                    ┌─────────────┐&lt;br /&gt;
                    │   USB-C     │&lt;br /&gt;
                    └─────────────┘&lt;br /&gt;
                 ┌───────────────────┐&lt;br /&gt;
            5V ● │                   │ ● IO5&lt;br /&gt;
           GND ● │                   │ ● IO6&lt;br /&gt;
           3V3 ● │                   │ ● IO7&lt;br /&gt;
           IO4 ● │      ESP32-C3     │ ● IO8&lt;br /&gt;
           IO3 ● │                   │ ● IO9&lt;br /&gt;
           IO2 ● │                   │ ● I1O&lt;br /&gt;
           IO1 ● │                   │ ● I20&lt;br /&gt;
           IO0 ● │                   │ ● I21&lt;br /&gt;
                 └───────────────────┘&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2540</id>
		<title>2x2 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=2x2_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2540"/>
		<updated>2026-08-14T13:50:52Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: 새 문서: == 2x2 매크로 키보드 만들기 ==  * 준비물 # ESP32 C3 Supermini # 1N4148 다이오드 (저항)  === ESP32 C3 칩 구성도 ===   === 납땜 ===   === 펌웨어 플래싱 ===   === 사용법 ===&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2x2 매크로 키보드 만들기 ==&lt;br /&gt;
&lt;br /&gt;
* 준비물&lt;br /&gt;
# ESP32 C3 Supermini&lt;br /&gt;
# 1N4148 다이오드 (저항)&lt;br /&gt;
&lt;br /&gt;
=== ESP32 C3 칩 구성도 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 납땜 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 펌웨어 플래싱 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 사용법 ===&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%ED%9C%B4%EB%8C%80%EC%9A%A9_%ED%82%A4%EB%B3%B4%EB%93%9C_%EC%A0%9C%EC%9E%91%EA%B8%B0&amp;diff=2539</id>
		<title>휴대용 키보드 제작기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%ED%9C%B4%EB%8C%80%EC%9A%A9_%ED%82%A4%EB%B3%B4%EB%93%9C_%EC%A0%9C%EC%9E%91%EA%B8%B0&amp;diff=2539"/>
		<updated>2026-08-14T13:47:56Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://github.com/kanefron5/keyboard-manual &lt;br /&gt;
&lt;br /&gt;
https://github.com/wannabecoffeenerd/HillSideView&lt;br /&gt;
&lt;br /&gt;
* 트랙볼(IBM 빨콩) 키보드 &lt;br /&gt;
https://github.com/infused-kim/kb_zmk_ps2_mouse_trackpoint_driver&lt;br /&gt;
&lt;br /&gt;
* 20키보드 제작방법&lt;br /&gt;
blob:https://makerworld.com/8a0d54aa-9d42-405d-9c09-4ee64951fae1&lt;br /&gt;
----&lt;br /&gt;
* [[5x5_매크로_키보드_만들기]]&lt;br /&gt;
* [[2x2 매크로 키보드 만들기]]&lt;br /&gt;
*: - ESP32 C3 Supermini 칩사용&lt;br /&gt;
*: - QMK&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%ED%9C%B4%EB%8C%80%EC%9A%A9_%ED%82%A4%EB%B3%B4%EB%93%9C_%EC%A0%9C%EC%9E%91%EA%B8%B0&amp;diff=2538</id>
		<title>휴대용 키보드 제작기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%ED%9C%B4%EB%8C%80%EC%9A%A9_%ED%82%A4%EB%B3%B4%EB%93%9C_%EC%A0%9C%EC%9E%91%EA%B8%B0&amp;diff=2538"/>
		<updated>2026-08-14T13:47:46Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://github.com/kanefron5/keyboard-manual &lt;br /&gt;
&lt;br /&gt;
https://github.com/wannabecoffeenerd/HillSideView&lt;br /&gt;
&lt;br /&gt;
* 트랙볼(IBM 빨콩) 키보드 &lt;br /&gt;
https://github.com/infused-kim/kb_zmk_ps2_mouse_trackpoint_driver&lt;br /&gt;
&lt;br /&gt;
* 20키보드 제작방법&lt;br /&gt;
blob:https://makerworld.com/8a0d54aa-9d42-405d-9c09-4ee64951fae1&lt;br /&gt;
----&lt;br /&gt;
* [[5x5_매크로_키보드_만들기]]&lt;br /&gt;
* [[2x2 매크로 키모드 만들기]]&lt;br /&gt;
*: - ESP32 C3 Supermini 칩사용&lt;br /&gt;
*: - QMK&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=2537</id>
		<title>대문</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=2537"/>
		<updated>2026-08-12T06:16:19Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 최근 등록/수정글 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{#metadata:key=데브카페}}&lt;br /&gt;
{{#metadata:key=파이썬}}&lt;br /&gt;
{{#metadata:key=프로그램개발}}&lt;br /&gt;
{{#metadata:key=autoit}}&lt;br /&gt;
{{#metadata:key=미디어위키}}&lt;br /&gt;
&lt;br /&gt;
= Welcome to DEV CAFE =&lt;br /&gt;
* {{CURRENTYEAR}}.{{CURRENTMONTHNAME}}.{{CURRENTDAY}}({{CURRENTDAYNAME}})  , 이세상 모든 개발에 대한 이야기 {{SERVER}}&lt;br /&gt;
&amp;lt;p sizes=&amp;quot;(max-width: 600px) 480px,800px&amp;quot;&amp;gt;&lt;br /&gt;
https://devcafe.co.kr/w/images/devcafe_main3.jpeg&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{틀:타이틀 라운드&lt;br /&gt;
|제목=[[:Category:python|파이썬]]: {{PAGESINCATEGORY: python}} 건 ,  [[:Category:미디어위키]] : {{PAGESINCATEGORY: 미디어위키}} 건 ,  [[:Category:autoit|오토잇]]: {{PAGESINCATEGORY: autoit}} 건,  [[:Category:linux|LINUX]]: {{PAGESINCATEGORY: linux}} 건, [[:Category:음악]]: {{PAGESINCATEGORY: 음악}} 건&lt;br /&gt;
|아이콘=emoji_objects&lt;br /&gt;
}}&lt;br /&gt;
== 최근 등록/수정글 ==&lt;br /&gt;
{{Special:RecentChanges|days=50}}&lt;br /&gt;
----&lt;br /&gt;
== IT/기술 ==&lt;br /&gt;
=== [[파이썬|파이썬 프로그래밍]] ===&lt;br /&gt;
==== 파이썬 설치 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=home&lt;br /&gt;
|내용=&#039;&#039;&#039;[[파이썬 설치]]&#039;&#039;&#039; &lt;br /&gt;
# [[Python 가상환경|파이썬 가상화]]&lt;br /&gt;
# [[pip 이용 파이썬 라이브러리 설치|파이썬 라이브러리 설치]]&lt;br /&gt;
# [[pip 이용 파이썬 라이브러리 설치#설치 패키지 추출|설치된 파이썬 라이브러리 추출하기]]&lt;br /&gt;
# [[Python whl 설치|.whl 파일 다운로드 설치법]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|내용=&#039;&#039;&#039;[[:category:Python|Python]] Foundation&#039;&#039;&#039; &lt;br /&gt;
# [[PYTHON 데이터형|파이썬 데이터형]]&lt;br /&gt;
# [[튜플 리스트 딕셔너리 차이점,특징,사용예시|튜플 리스트 딕셔너리]]&lt;br /&gt;
# [[파이썬 명명규칙]]&lt;br /&gt;
# [[파이썬 클래스]]&lt;br /&gt;
|아이콘이름=accessibility&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 파이썬 고급 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=flight_takeoff&lt;br /&gt;
|내용=&#039;&#039;&#039;[[파이썬 개발 추천기능 TOP10|파이썬 고급 기능 TOP 10]]&#039;&#039;&#039; &lt;br /&gt;
:# [[Python Cheat Sheet|파이썬 치트 쉬트 ]]&lt;br /&gt;
:# [[파이썬 config parser|파이썬 .ini 환경파일에 읽고쓰기]]&lt;br /&gt;
:# [[파이썬 로깅]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 응용 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=contacts&lt;br /&gt;
|내용=&#039;&#039;&#039; [[PyQt|파이썬 GUI 프로그램 개발(PyQt)]]&#039;&#039;&#039; &lt;br /&gt;
# [[Process memory share|쉐어 메모리 접근]]&lt;br /&gt;
# [[Python Cheat Sheet#Parallel Processing|병렬처리 프로세싱]]&lt;br /&gt;
# [[멀티프로세싱]]&lt;br /&gt;
# [[파이썬 스케줄러 모듈]]&lt;br /&gt;
# [[파이썬 장고]]&lt;br /&gt;
# [[flask]]&lt;br /&gt;
# [[Json 이용 키-값 추가 수정 삭제 방법|JSON 키값 수정/삭]]&lt;br /&gt;
# [[파이썬 mybatis xml sql 파싱 방법|XML 파싱(Mybatis)]]&lt;br /&gt;
# [[스케줄러 만들기]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 판다스(Pandas) 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=apps &lt;br /&gt;
|내용= &#039;&#039;&#039;[[:category:pandas|PANDAS]] Foundation&#039;&#039;&#039;&lt;br /&gt;
# [[pandas|판다스(pandas) 기초]]&lt;br /&gt;
## [https://pandas.pydata.org/docs/ pandas 공식문서]&lt;br /&gt;
## [https://realpython.com/pandas-dataframe/ 리얼 판다스 튜토리얼]&lt;br /&gt;
## [https://www.geeksforgeeks.org/pandas-tutorial/ 그릭스 판다스 튜토리얼]&lt;br /&gt;
## [https://towardsdatascience.com/?gi=196f5e0ef243 투왈즈 튜터리얼]&lt;br /&gt;
# 판다스 응용&lt;br /&gt;
## [[PANDAS 와 SQL 쿼리]]&lt;br /&gt;
## [[Pandas mysql insert]]&lt;br /&gt;
## [[Pandas 엑셀]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== [[:category:streamlit|스트림릿 (Streamlit)]] 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=insert_chart_outlined&lt;br /&gt;
|내용= &#039;&#039;&#039;[[Streamlit 기초]]&#039;&#039;&#039;&lt;br /&gt;
# [[Streamlit 개발 사이트|Streamlit 참고 사이트]]&lt;br /&gt;
# [[Streamlit Extention]]&lt;br /&gt;
# [[Streamlit 개발|Streamlit 프로그램]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 응용프로그램 개발 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=insert_chart_outlined&lt;br /&gt;
|내용= &#039;&#039;&#039;[[주식 자동매매 프로그램 개발]]&#039;&#039;&#039;&lt;br /&gt;
# [[대신증권 API 활용]]&lt;br /&gt;
# [[키움증권 api 매수매도|키움증권 API 활용]]&lt;br /&gt;
# [[개인 PC 텍스트 검색 채봇]]&lt;br /&gt;
# [[개인 PC 텍스트 검색 챗봇 웹 화면]]&lt;br /&gt;
# [[SQL 정리 툴|SQL Formater(정리)]]&lt;br /&gt;
}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== [[:category:java|JAVA 프로그래밍]] ===&lt;br /&gt;
==== [[Java openjdk 설치|JAVA 설치]] ====&lt;br /&gt;
==== [[JAVA 기초]] ====&lt;br /&gt;
# [[JAVA 명명 규칙]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== [[:category:autoit|Autotit 프로그래밍]] ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|아이콘이름=adb&lt;br /&gt;
|내용 = :&amp;lt;big&amp;gt;오토잇 프로그래밍 설치 및 기초 문법&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[Auotit 설치]]&lt;br /&gt;
# [[Autoit 기초 문법]]&lt;br /&gt;
# [[Autoit gui|Autoit GUI - 화면 제어 ]]&lt;br /&gt;
#:# [[Autoit GUI 컨트롤 스타일|GUI 컨트롤 스타일]]&lt;br /&gt;
#:# [[Handle의 class instance 값 구하는 방법|GUI 컨트롤 핸들 찾기]]&lt;br /&gt;
#:# [[Autoit 멀티 윈도우 컨트롤]]&lt;br /&gt;
#:# [[리스트뷰(그리드) 생성]]&lt;br /&gt;
#:# [[Autoit webview2|WEB 화면 UI개발]]&lt;br /&gt;
# [[Autoit 프로그램 개발]]&lt;br /&gt;
#:# [[Autoit sqlite|SQLite 디비 연결]]&lt;br /&gt;
#:# [[Autoit oracle connect|ORACLE 디비 연결]]&lt;br /&gt;
#:# [[Autoit 키보드 후킹|키보드 후킹]]&lt;br /&gt;
#:# [[Autoit 자동 업그레이드 프로그램 개발|자동 업데이트 프로그램 개발]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 에디터 활용법 ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|아이콘이름=view_quilt&lt;br /&gt;
|내용 = : &amp;lt;big&amp;gt;에디터 (editor)&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[Vscode 단축키]]&lt;br /&gt;
# [[서브라임 sublime 단축키|Sublime 단축키]]&lt;br /&gt;
## [[Sublime plugin 생성 방법|Sublime 플러그인 만들기]]&lt;br /&gt;
## [[sublime emmet]]&lt;br /&gt;
# [[Vi 명령어|vi 편집기]]&lt;br /&gt;
# [[Vi mode - ksh bash zsh]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 미디어위키 사용법 ==&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|배경색=#70BBF93E&lt;br /&gt;
|아이콘이름=school&lt;br /&gt;
|내용= &#039;&#039;&#039;미디어 설치 부터 활용 까지&#039;&#039;&#039; &lt;br /&gt;
# 미디어 위키 초보자 가이드 &lt;br /&gt;
## [[미디어위키 기본 사용법]] &lt;br /&gt;
## [[환경세팅 파일|환경설정(LocalSettings.php)]]&lt;br /&gt;
## [[스킨(테마) 추가/변경]]&lt;br /&gt;
## [[미디어위키 확장 기능]]&lt;br /&gt;
## [[미디어위키 예약어 와 변수]]&lt;br /&gt;
### [[미디어위키 예약어 와 변수#동작어_(Behavior_Switches)|미디어위키 동작 예약어]]&lt;br /&gt;
### [[미디어위키 예약어 와 변수#변수_(Variables)|미디어위키 변수 예약어]]&lt;br /&gt;
## 미디어위키 글쓰기 사용법&lt;br /&gt;
### [[미디어위키 기본 사용법#새글 쓰기|새글 쓰기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#대문 수정|첫페이지(대문) 수정]]&lt;br /&gt;
### [[미디어위키 기본 사용법#문단(Section)|목차 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#표(wiki table) 만들기|표 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#틀(Template) 만들기|틀 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#양식(Form) 만들기|폼 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#카테고리 만들기|카테고리 만들기]]&lt;br /&gt;
## 미디어 위키 환경설정&lt;br /&gt;
### [[스킨(테마) 추가/변경]]&lt;br /&gt;
### [[미디어위키 기본 사용법#대문 수정하기|대문 타이틀 글씨 숨기기]]&lt;br /&gt;
### [[특수 명령어]]&lt;br /&gt;
### [[환경세팅 파일|환경세팅 파일(LocalSettings.php)]]&lt;br /&gt;
### [[나눔고딕 웹폰트 설정하기]]&lt;br /&gt;
### [[반응형 이미지 사이즈 조절 방법]]&lt;br /&gt;
### [[스니펫-목차에 순번 붙이기]]&lt;br /&gt;
## 미디어위키 확장 프로그램 가이드&lt;br /&gt;
### [[Syntax Highlight|문법 하이라이트]]&lt;br /&gt;
### [[목차에 순번 붙이기|목차에 순번 붙이기(확장기능 설치)]]&lt;br /&gt;
### [[스니펫-목차에 순번 붙이기 |목차에 순번 붙이기(JS/CSS 이용)]] / [https://www.mediawiki.org/wiki/Manual:Table_of_contents#Auto-numbering 원본페이지 이동]&lt;br /&gt;
### [[페이지에 탭 만들기]]&lt;br /&gt;
### [[관련글 보기 기능 추가 ]]&lt;br /&gt;
### [[방문자 수 보기 기능 추가]]&lt;br /&gt;
### [[문서 목차 불러오기 기능 추가]] &lt;br /&gt;
### [[댓글 기능 추가]]&lt;br /&gt;
### [[미디어위키 유튜브 삽입|유튜브 삽입]]&lt;br /&gt;
### [[구글인증 로그인]]&lt;br /&gt;
### 검색기능 관련&lt;br /&gt;
###:1) [[시맨틱 미디어위키 설치]]&lt;br /&gt;
###:2) [[시맨틱 이용한 태그 달기]]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 3D 모델링 ==&lt;br /&gt;
=== [[초보자를 위한 모델링 프로그램 추천]]===&lt;br /&gt;
==== [[Blender 초보자 따라하기 ]] ====&lt;br /&gt;
==== [[Blender로 마우스 모델링]]====&lt;br /&gt;
==== [[Blender 버티컬 마우스 모델링]]====&lt;br /&gt;
=== [[mashmixer 모델링 편집틀 사용법]]===&lt;br /&gt;
=== 3D 프린터 ===&lt;br /&gt;
==== [[ 분리형_키보드_제작기_(split_keyboard_DIY)|커스텀 키보드 만들기 ]] ====&lt;br /&gt;
====[[휴대용 키보드 제작기]]====&lt;br /&gt;
&lt;br /&gt;
==== [[3D 프린터 추천 TOP 5]] ====&lt;br /&gt;
====[[3D 프린터 필라멘트 장단점 PLA PETG|3D 프린터 필라멘트 종류 와 장단점]]====&lt;br /&gt;
&lt;br /&gt;
==== [[뱀부랩 스튜디오 튜토리얼]] ====&lt;br /&gt;
==== [[3D 프린터로 메모 프린터 만들기|3D 프린터로 라인 프린터 만들기]] ====&lt;br /&gt;
==== [[3D 프린터 출력 제품 만족도 평가|3D프린터로 만든 제품 추천]] ====&lt;br /&gt;
==== [[3D 포르쉐911 RC카 만들기]] ====&lt;br /&gt;
&lt;br /&gt;
== 재테크 ==&lt;br /&gt;
=== 부동산 ===&lt;br /&gt;
=== 주식 ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|내용 = &amp;lt;big&amp;gt;주식 이야기&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[주식 용어]]&lt;br /&gt;
# [[주식거래시간|주식거래시간(한국/미국/중국)]]&lt;br /&gt;
# [[주식 수수료]]&lt;br /&gt;
# [[주식 금리|금리가 오를때/내릴때 주식 투자법]]&lt;br /&gt;
# [[신호등 분석법]]&lt;br /&gt;
# [[미국 배당주 추천|미국 추천 배당주 ]]&lt;br /&gt;
}}&lt;br /&gt;
* [[주식 금액별 호가 단위]]&lt;br /&gt;
* [[주식 시클리컬 가치주 투자법|시클리컬 가치주 투자법]]&lt;br /&gt;
** [[시클리컬 주요 산업별 대장주]]&lt;br /&gt;
* [[주식 테마주]]&lt;br /&gt;
==== 절세 계좌 투자 ====&lt;br /&gt;
# [[Isa 개인종합자산관리계좌|ISA 개인종합 계좌]] &lt;br /&gt;
# [[IRP 개인퇴직연금 계좌]] &lt;br /&gt;
# [[IRP 개인퇴직연금 계좌#IRP계좌 와 연금저축계좌의 차이|연금저축 계좌]]&lt;br /&gt;
# [[IRP ISA 연금저축펀트 최대 투자 금액|ISA IRP 연금저축펀드 비교 ]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 인물 ==&lt;br /&gt;
=== 근대사 ===&lt;br /&gt;
* [[노무현 명연설]]&lt;br /&gt;
* [[인간적인 국회의원 노회찬]]&lt;br /&gt;
* [[나의 스승 이어령]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 취미 ==&lt;br /&gt;
=== [[수영]] ===&lt;br /&gt;
== 휴식 ==&lt;br /&gt;
=== 휴양지 ===&lt;br /&gt;
==== [[서울_노원구_휴양림|서울_노원구_휴양림-&#039;&#039;&#039;수락 휴&#039;&#039;&#039;]]====&lt;br /&gt;
=== 물놀이/스파 ===&lt;br /&gt;
==== [[영종도 파라다이스 시티]] ====&lt;br /&gt;
==== [[경기도 계곡 추천]]====&lt;br /&gt;
==== [[가평 계곡 추천]] ====&lt;br /&gt;
==== [[전라도 계곡 추천]]====&lt;br /&gt;
==== [[경상도 계곡 추천]] ====&lt;br /&gt;
&lt;br /&gt;
=== 여행지 ===&lt;br /&gt;
=== 맛집 ===&lt;br /&gt;
==== [[인생 맛집 경기/서울]] ====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 음악 ==&lt;br /&gt;
=== 클래식 ===&lt;br /&gt;
* [[구스타프 말러]]&lt;br /&gt;
&lt;br /&gt;
=== 레젼드 ===&lt;br /&gt;
* [[존바이즈 베스트]]&lt;br /&gt;
* [[유키 구라모토]]&lt;br /&gt;
* [[조지 윈스턴]]&lt;br /&gt;
* [[김광석 베스트]]&lt;br /&gt;
* [[신해철 베스트]]&lt;br /&gt;
* [[김건모 베스트]]&lt;br /&gt;
* [[박혜경 베스트]]&lt;br /&gt;
* [[김필 베스트]]&lt;br /&gt;
&lt;br /&gt;
=== 기타 연습 ===&lt;br /&gt;
* [[메탈리카 기타 연습]]&lt;br /&gt;
* [[캐논 락버전]]&lt;br /&gt;
* [[smells like teen spirit - nirvana|Smells Teen Split-너바나 ]]&lt;br /&gt;
* [[Lover&#039;s concerto]]&lt;br /&gt;
[[category:devcafe]] &lt;br /&gt;
[[category:python]] &lt;br /&gt;
[[category:미디어위키]]&lt;br /&gt;
[[category:autoit]]&lt;br /&gt;
[[category:인물]]&lt;br /&gt;
[[category:역사]]&lt;br /&gt;
[[category:음악]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=2536</id>
		<title>대문</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=2536"/>
		<updated>2026-08-12T06:15:18Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{#metadata:key=데브카페}}&lt;br /&gt;
{{#metadata:key=파이썬}}&lt;br /&gt;
{{#metadata:key=프로그램개발}}&lt;br /&gt;
{{#metadata:key=autoit}}&lt;br /&gt;
{{#metadata:key=미디어위키}}&lt;br /&gt;
&lt;br /&gt;
= Welcome to DEV CAFE =&lt;br /&gt;
* {{CURRENTYEAR}}.{{CURRENTMONTHNAME}}.{{CURRENTDAY}}({{CURRENTDAYNAME}})  , 이세상 모든 개발에 대한 이야기 {{SERVER}}&lt;br /&gt;
&amp;lt;p sizes=&amp;quot;(max-width: 600px) 480px,800px&amp;quot;&amp;gt;&lt;br /&gt;
https://devcafe.co.kr/w/images/devcafe_main3.jpeg&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{틀:타이틀 라운드&lt;br /&gt;
|제목=[[:Category:python|파이썬]]: {{PAGESINCATEGORY: python}} 건 ,  [[:Category:미디어위키]] : {{PAGESINCATEGORY: 미디어위키}} 건 ,  [[:Category:autoit|오토잇]]: {{PAGESINCATEGORY: autoit}} 건,  [[:Category:linux|LINUX]]: {{PAGESINCATEGORY: linux}} 건, [[:Category:음악]]: {{PAGESINCATEGORY: 음악}} 건&lt;br /&gt;
|아이콘=emoji_objects&lt;br /&gt;
}}&lt;br /&gt;
= 최근 등록/수정글 =&lt;br /&gt;
{{Special:RecentChanges|days=50}}&lt;br /&gt;
----&lt;br /&gt;
== IT/기술 ==&lt;br /&gt;
=== [[파이썬|파이썬 프로그래밍]] ===&lt;br /&gt;
==== 파이썬 설치 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=home&lt;br /&gt;
|내용=&#039;&#039;&#039;[[파이썬 설치]]&#039;&#039;&#039; &lt;br /&gt;
# [[Python 가상환경|파이썬 가상화]]&lt;br /&gt;
# [[pip 이용 파이썬 라이브러리 설치|파이썬 라이브러리 설치]]&lt;br /&gt;
# [[pip 이용 파이썬 라이브러리 설치#설치 패키지 추출|설치된 파이썬 라이브러리 추출하기]]&lt;br /&gt;
# [[Python whl 설치|.whl 파일 다운로드 설치법]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|내용=&#039;&#039;&#039;[[:category:Python|Python]] Foundation&#039;&#039;&#039; &lt;br /&gt;
# [[PYTHON 데이터형|파이썬 데이터형]]&lt;br /&gt;
# [[튜플 리스트 딕셔너리 차이점,특징,사용예시|튜플 리스트 딕셔너리]]&lt;br /&gt;
# [[파이썬 명명규칙]]&lt;br /&gt;
# [[파이썬 클래스]]&lt;br /&gt;
|아이콘이름=accessibility&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 파이썬 고급 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=flight_takeoff&lt;br /&gt;
|내용=&#039;&#039;&#039;[[파이썬 개발 추천기능 TOP10|파이썬 고급 기능 TOP 10]]&#039;&#039;&#039; &lt;br /&gt;
:# [[Python Cheat Sheet|파이썬 치트 쉬트 ]]&lt;br /&gt;
:# [[파이썬 config parser|파이썬 .ini 환경파일에 읽고쓰기]]&lt;br /&gt;
:# [[파이썬 로깅]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 응용 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=contacts&lt;br /&gt;
|내용=&#039;&#039;&#039; [[PyQt|파이썬 GUI 프로그램 개발(PyQt)]]&#039;&#039;&#039; &lt;br /&gt;
# [[Process memory share|쉐어 메모리 접근]]&lt;br /&gt;
# [[Python Cheat Sheet#Parallel Processing|병렬처리 프로세싱]]&lt;br /&gt;
# [[멀티프로세싱]]&lt;br /&gt;
# [[파이썬 스케줄러 모듈]]&lt;br /&gt;
# [[파이썬 장고]]&lt;br /&gt;
# [[flask]]&lt;br /&gt;
# [[Json 이용 키-값 추가 수정 삭제 방법|JSON 키값 수정/삭]]&lt;br /&gt;
# [[파이썬 mybatis xml sql 파싱 방법|XML 파싱(Mybatis)]]&lt;br /&gt;
# [[스케줄러 만들기]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 판다스(Pandas) 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=apps &lt;br /&gt;
|내용= &#039;&#039;&#039;[[:category:pandas|PANDAS]] Foundation&#039;&#039;&#039;&lt;br /&gt;
# [[pandas|판다스(pandas) 기초]]&lt;br /&gt;
## [https://pandas.pydata.org/docs/ pandas 공식문서]&lt;br /&gt;
## [https://realpython.com/pandas-dataframe/ 리얼 판다스 튜토리얼]&lt;br /&gt;
## [https://www.geeksforgeeks.org/pandas-tutorial/ 그릭스 판다스 튜토리얼]&lt;br /&gt;
## [https://towardsdatascience.com/?gi=196f5e0ef243 투왈즈 튜터리얼]&lt;br /&gt;
# 판다스 응용&lt;br /&gt;
## [[PANDAS 와 SQL 쿼리]]&lt;br /&gt;
## [[Pandas mysql insert]]&lt;br /&gt;
## [[Pandas 엑셀]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== [[:category:streamlit|스트림릿 (Streamlit)]] 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=insert_chart_outlined&lt;br /&gt;
|내용= &#039;&#039;&#039;[[Streamlit 기초]]&#039;&#039;&#039;&lt;br /&gt;
# [[Streamlit 개발 사이트|Streamlit 참고 사이트]]&lt;br /&gt;
# [[Streamlit Extention]]&lt;br /&gt;
# [[Streamlit 개발|Streamlit 프로그램]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 응용프로그램 개발 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=insert_chart_outlined&lt;br /&gt;
|내용= &#039;&#039;&#039;[[주식 자동매매 프로그램 개발]]&#039;&#039;&#039;&lt;br /&gt;
# [[대신증권 API 활용]]&lt;br /&gt;
# [[키움증권 api 매수매도|키움증권 API 활용]]&lt;br /&gt;
# [[개인 PC 텍스트 검색 채봇]]&lt;br /&gt;
# [[개인 PC 텍스트 검색 챗봇 웹 화면]]&lt;br /&gt;
# [[SQL 정리 툴|SQL Formater(정리)]]&lt;br /&gt;
}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== [[:category:java|JAVA 프로그래밍]] ===&lt;br /&gt;
==== [[Java openjdk 설치|JAVA 설치]] ====&lt;br /&gt;
==== [[JAVA 기초]] ====&lt;br /&gt;
# [[JAVA 명명 규칙]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== [[:category:autoit|Autotit 프로그래밍]] ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|아이콘이름=adb&lt;br /&gt;
|내용 = :&amp;lt;big&amp;gt;오토잇 프로그래밍 설치 및 기초 문법&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[Auotit 설치]]&lt;br /&gt;
# [[Autoit 기초 문법]]&lt;br /&gt;
# [[Autoit gui|Autoit GUI - 화면 제어 ]]&lt;br /&gt;
#:# [[Autoit GUI 컨트롤 스타일|GUI 컨트롤 스타일]]&lt;br /&gt;
#:# [[Handle의 class instance 값 구하는 방법|GUI 컨트롤 핸들 찾기]]&lt;br /&gt;
#:# [[Autoit 멀티 윈도우 컨트롤]]&lt;br /&gt;
#:# [[리스트뷰(그리드) 생성]]&lt;br /&gt;
#:# [[Autoit webview2|WEB 화면 UI개발]]&lt;br /&gt;
# [[Autoit 프로그램 개발]]&lt;br /&gt;
#:# [[Autoit sqlite|SQLite 디비 연결]]&lt;br /&gt;
#:# [[Autoit oracle connect|ORACLE 디비 연결]]&lt;br /&gt;
#:# [[Autoit 키보드 후킹|키보드 후킹]]&lt;br /&gt;
#:# [[Autoit 자동 업그레이드 프로그램 개발|자동 업데이트 프로그램 개발]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 에디터 활용법 ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|아이콘이름=view_quilt&lt;br /&gt;
|내용 = : &amp;lt;big&amp;gt;에디터 (editor)&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[Vscode 단축키]]&lt;br /&gt;
# [[서브라임 sublime 단축키|Sublime 단축키]]&lt;br /&gt;
## [[Sublime plugin 생성 방법|Sublime 플러그인 만들기]]&lt;br /&gt;
## [[sublime emmet]]&lt;br /&gt;
# [[Vi 명령어|vi 편집기]]&lt;br /&gt;
# [[Vi mode - ksh bash zsh]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 미디어위키 사용법 ==&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|배경색=#70BBF93E&lt;br /&gt;
|아이콘이름=school&lt;br /&gt;
|내용= &#039;&#039;&#039;미디어 설치 부터 활용 까지&#039;&#039;&#039; &lt;br /&gt;
# 미디어 위키 초보자 가이드 &lt;br /&gt;
## [[미디어위키 기본 사용법]] &lt;br /&gt;
## [[환경세팅 파일|환경설정(LocalSettings.php)]]&lt;br /&gt;
## [[스킨(테마) 추가/변경]]&lt;br /&gt;
## [[미디어위키 확장 기능]]&lt;br /&gt;
## [[미디어위키 예약어 와 변수]]&lt;br /&gt;
### [[미디어위키 예약어 와 변수#동작어_(Behavior_Switches)|미디어위키 동작 예약어]]&lt;br /&gt;
### [[미디어위키 예약어 와 변수#변수_(Variables)|미디어위키 변수 예약어]]&lt;br /&gt;
## 미디어위키 글쓰기 사용법&lt;br /&gt;
### [[미디어위키 기본 사용법#새글 쓰기|새글 쓰기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#대문 수정|첫페이지(대문) 수정]]&lt;br /&gt;
### [[미디어위키 기본 사용법#문단(Section)|목차 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#표(wiki table) 만들기|표 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#틀(Template) 만들기|틀 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#양식(Form) 만들기|폼 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#카테고리 만들기|카테고리 만들기]]&lt;br /&gt;
## 미디어 위키 환경설정&lt;br /&gt;
### [[스킨(테마) 추가/변경]]&lt;br /&gt;
### [[미디어위키 기본 사용법#대문 수정하기|대문 타이틀 글씨 숨기기]]&lt;br /&gt;
### [[특수 명령어]]&lt;br /&gt;
### [[환경세팅 파일|환경세팅 파일(LocalSettings.php)]]&lt;br /&gt;
### [[나눔고딕 웹폰트 설정하기]]&lt;br /&gt;
### [[반응형 이미지 사이즈 조절 방법]]&lt;br /&gt;
### [[스니펫-목차에 순번 붙이기]]&lt;br /&gt;
## 미디어위키 확장 프로그램 가이드&lt;br /&gt;
### [[Syntax Highlight|문법 하이라이트]]&lt;br /&gt;
### [[목차에 순번 붙이기|목차에 순번 붙이기(확장기능 설치)]]&lt;br /&gt;
### [[스니펫-목차에 순번 붙이기 |목차에 순번 붙이기(JS/CSS 이용)]] / [https://www.mediawiki.org/wiki/Manual:Table_of_contents#Auto-numbering 원본페이지 이동]&lt;br /&gt;
### [[페이지에 탭 만들기]]&lt;br /&gt;
### [[관련글 보기 기능 추가 ]]&lt;br /&gt;
### [[방문자 수 보기 기능 추가]]&lt;br /&gt;
### [[문서 목차 불러오기 기능 추가]] &lt;br /&gt;
### [[댓글 기능 추가]]&lt;br /&gt;
### [[미디어위키 유튜브 삽입|유튜브 삽입]]&lt;br /&gt;
### [[구글인증 로그인]]&lt;br /&gt;
### 검색기능 관련&lt;br /&gt;
###:1) [[시맨틱 미디어위키 설치]]&lt;br /&gt;
###:2) [[시맨틱 이용한 태그 달기]]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 3D 모델링 ==&lt;br /&gt;
=== [[초보자를 위한 모델링 프로그램 추천]]===&lt;br /&gt;
==== [[Blender 초보자 따라하기 ]] ====&lt;br /&gt;
==== [[Blender로 마우스 모델링]]====&lt;br /&gt;
==== [[Blender 버티컬 마우스 모델링]]====&lt;br /&gt;
=== [[mashmixer 모델링 편집틀 사용법]]===&lt;br /&gt;
=== 3D 프린터 ===&lt;br /&gt;
==== [[ 분리형_키보드_제작기_(split_keyboard_DIY)|커스텀 키보드 만들기 ]] ====&lt;br /&gt;
====[[휴대용 키보드 제작기]]====&lt;br /&gt;
&lt;br /&gt;
==== [[3D 프린터 추천 TOP 5]] ====&lt;br /&gt;
====[[3D 프린터 필라멘트 장단점 PLA PETG|3D 프린터 필라멘트 종류 와 장단점]]====&lt;br /&gt;
&lt;br /&gt;
==== [[뱀부랩 스튜디오 튜토리얼]] ====&lt;br /&gt;
==== [[3D 프린터로 메모 프린터 만들기|3D 프린터로 라인 프린터 만들기]] ====&lt;br /&gt;
==== [[3D 프린터 출력 제품 만족도 평가|3D프린터로 만든 제품 추천]] ====&lt;br /&gt;
==== [[3D 포르쉐911 RC카 만들기]] ====&lt;br /&gt;
&lt;br /&gt;
== 재테크 ==&lt;br /&gt;
=== 부동산 ===&lt;br /&gt;
=== 주식 ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|내용 = &amp;lt;big&amp;gt;주식 이야기&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[주식 용어]]&lt;br /&gt;
# [[주식거래시간|주식거래시간(한국/미국/중국)]]&lt;br /&gt;
# [[주식 수수료]]&lt;br /&gt;
# [[주식 금리|금리가 오를때/내릴때 주식 투자법]]&lt;br /&gt;
# [[신호등 분석법]]&lt;br /&gt;
# [[미국 배당주 추천|미국 추천 배당주 ]]&lt;br /&gt;
}}&lt;br /&gt;
* [[주식 금액별 호가 단위]]&lt;br /&gt;
* [[주식 시클리컬 가치주 투자법|시클리컬 가치주 투자법]]&lt;br /&gt;
** [[시클리컬 주요 산업별 대장주]]&lt;br /&gt;
* [[주식 테마주]]&lt;br /&gt;
==== 절세 계좌 투자 ====&lt;br /&gt;
# [[Isa 개인종합자산관리계좌|ISA 개인종합 계좌]] &lt;br /&gt;
# [[IRP 개인퇴직연금 계좌]] &lt;br /&gt;
# [[IRP 개인퇴직연금 계좌#IRP계좌 와 연금저축계좌의 차이|연금저축 계좌]]&lt;br /&gt;
# [[IRP ISA 연금저축펀트 최대 투자 금액|ISA IRP 연금저축펀드 비교 ]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 인물 ==&lt;br /&gt;
=== 근대사 ===&lt;br /&gt;
* [[노무현 명연설]]&lt;br /&gt;
* [[인간적인 국회의원 노회찬]]&lt;br /&gt;
* [[나의 스승 이어령]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 취미 ==&lt;br /&gt;
=== [[수영]] ===&lt;br /&gt;
== 휴식 ==&lt;br /&gt;
=== 휴양지 ===&lt;br /&gt;
==== [[서울_노원구_휴양림|서울_노원구_휴양림-&#039;&#039;&#039;수락 휴&#039;&#039;&#039;]]====&lt;br /&gt;
=== 물놀이/스파 ===&lt;br /&gt;
==== [[영종도 파라다이스 시티]] ====&lt;br /&gt;
==== [[경기도 계곡 추천]]====&lt;br /&gt;
==== [[가평 계곡 추천]] ====&lt;br /&gt;
==== [[전라도 계곡 추천]]====&lt;br /&gt;
==== [[경상도 계곡 추천]] ====&lt;br /&gt;
&lt;br /&gt;
=== 여행지 ===&lt;br /&gt;
=== 맛집 ===&lt;br /&gt;
==== [[인생 맛집 경기/서울]] ====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 음악 ==&lt;br /&gt;
=== 클래식 ===&lt;br /&gt;
* [[구스타프 말러]]&lt;br /&gt;
&lt;br /&gt;
=== 레젼드 ===&lt;br /&gt;
* [[존바이즈 베스트]]&lt;br /&gt;
* [[유키 구라모토]]&lt;br /&gt;
* [[조지 윈스턴]]&lt;br /&gt;
* [[김광석 베스트]]&lt;br /&gt;
* [[신해철 베스트]]&lt;br /&gt;
* [[김건모 베스트]]&lt;br /&gt;
* [[박혜경 베스트]]&lt;br /&gt;
* [[김필 베스트]]&lt;br /&gt;
&lt;br /&gt;
=== 기타 연습 ===&lt;br /&gt;
* [[메탈리카 기타 연습]]&lt;br /&gt;
* [[캐논 락버전]]&lt;br /&gt;
* [[smells like teen spirit - nirvana|Smells Teen Split-너바나 ]]&lt;br /&gt;
* [[Lover&#039;s concerto]]&lt;br /&gt;
[[category:devcafe]] &lt;br /&gt;
[[category:python]] &lt;br /&gt;
[[category:미디어위키]]&lt;br /&gt;
[[category:autoit]]&lt;br /&gt;
[[category:인물]]&lt;br /&gt;
[[category:역사]]&lt;br /&gt;
[[category:음악]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=2535</id>
		<title>대문</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=2535"/>
		<updated>2026-08-12T06:01:59Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{#metadata:key=데브카페}}&lt;br /&gt;
{{#metadata:key=파이썬}}&lt;br /&gt;
{{#metadata:key=프로그램개발}}&lt;br /&gt;
{{#metadata:key=autoit}}&lt;br /&gt;
{{#metadata:key=미디어위키}}&lt;br /&gt;
&lt;br /&gt;
= Welcome to DEV CAFE =&lt;br /&gt;
* {{CURRENTYEAR}}.{{CURRENTMONTHNAME}}.{{CURRENTDAY}}({{CURRENTDAYNAME}})  , 이세상 모든 개발에 대한 이야기 {{SERVER}}&lt;br /&gt;
&amp;lt;p sizes=&amp;quot;(max-width: 600px) 480px,800px&amp;quot;&amp;gt;&lt;br /&gt;
https://devcafe.co.kr/w/images/devcafe_main3.jpeg&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{틀:타이틀 라운드&lt;br /&gt;
|제목=[[:Category:python|파이썬]]: {{PAGESINCATEGORY: python}} 건 ,  [[:Category:미디어위키]] : {{PAGESINCATEGORY: 미디어위키}} 건 ,  [[:Category:autoit|오토잇]]: {{PAGESINCATEGORY: autoit}} 건,  [[:Category:linux|LINUX]]: {{PAGESINCATEGORY: linux}} 건, [[:Category:음악]]: {{PAGESINCATEGORY: 음악}} 건&lt;br /&gt;
|아이콘=emoji_objects&lt;br /&gt;
}}&lt;br /&gt;
{{Special:RecentChanges|days=50}}&lt;br /&gt;
== IT/기술 ==&lt;br /&gt;
=== [[파이썬|파이썬 프로그래밍]] ===&lt;br /&gt;
==== 파이썬 설치 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=home&lt;br /&gt;
|내용=&#039;&#039;&#039;[[파이썬 설치]]&#039;&#039;&#039; &lt;br /&gt;
# [[Python 가상환경|파이썬 가상화]]&lt;br /&gt;
# [[pip 이용 파이썬 라이브러리 설치|파이썬 라이브러리 설치]]&lt;br /&gt;
# [[pip 이용 파이썬 라이브러리 설치#설치 패키지 추출|설치된 파이썬 라이브러리 추출하기]]&lt;br /&gt;
# [[Python whl 설치|.whl 파일 다운로드 설치법]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|내용=&#039;&#039;&#039;[[:category:Python|Python]] Foundation&#039;&#039;&#039; &lt;br /&gt;
# [[PYTHON 데이터형|파이썬 데이터형]]&lt;br /&gt;
# [[튜플 리스트 딕셔너리 차이점,특징,사용예시|튜플 리스트 딕셔너리]]&lt;br /&gt;
# [[파이썬 명명규칙]]&lt;br /&gt;
# [[파이썬 클래스]]&lt;br /&gt;
|아이콘이름=accessibility&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 파이썬 고급 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=flight_takeoff&lt;br /&gt;
|내용=&#039;&#039;&#039;[[파이썬 개발 추천기능 TOP10|파이썬 고급 기능 TOP 10]]&#039;&#039;&#039; &lt;br /&gt;
:# [[Python Cheat Sheet|파이썬 치트 쉬트 ]]&lt;br /&gt;
:# [[파이썬 config parser|파이썬 .ini 환경파일에 읽고쓰기]]&lt;br /&gt;
:# [[파이썬 로깅]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 응용 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=contacts&lt;br /&gt;
|내용=&#039;&#039;&#039; [[PyQt|파이썬 GUI 프로그램 개발(PyQt)]]&#039;&#039;&#039; &lt;br /&gt;
# [[Process memory share|쉐어 메모리 접근]]&lt;br /&gt;
# [[Python Cheat Sheet#Parallel Processing|병렬처리 프로세싱]]&lt;br /&gt;
# [[멀티프로세싱]]&lt;br /&gt;
# [[파이썬 스케줄러 모듈]]&lt;br /&gt;
# [[파이썬 장고]]&lt;br /&gt;
# [[flask]]&lt;br /&gt;
# [[Json 이용 키-값 추가 수정 삭제 방법|JSON 키값 수정/삭]]&lt;br /&gt;
# [[파이썬 mybatis xml sql 파싱 방법|XML 파싱(Mybatis)]]&lt;br /&gt;
# [[스케줄러 만들기]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 판다스(Pandas) 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=apps &lt;br /&gt;
|내용= &#039;&#039;&#039;[[:category:pandas|PANDAS]] Foundation&#039;&#039;&#039;&lt;br /&gt;
# [[pandas|판다스(pandas) 기초]]&lt;br /&gt;
## [https://pandas.pydata.org/docs/ pandas 공식문서]&lt;br /&gt;
## [https://realpython.com/pandas-dataframe/ 리얼 판다스 튜토리얼]&lt;br /&gt;
## [https://www.geeksforgeeks.org/pandas-tutorial/ 그릭스 판다스 튜토리얼]&lt;br /&gt;
## [https://towardsdatascience.com/?gi=196f5e0ef243 투왈즈 튜터리얼]&lt;br /&gt;
# 판다스 응용&lt;br /&gt;
## [[PANDAS 와 SQL 쿼리]]&lt;br /&gt;
## [[Pandas mysql insert]]&lt;br /&gt;
## [[Pandas 엑셀]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== [[:category:streamlit|스트림릿 (Streamlit)]] 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=insert_chart_outlined&lt;br /&gt;
|내용= &#039;&#039;&#039;[[Streamlit 기초]]&#039;&#039;&#039;&lt;br /&gt;
# [[Streamlit 개발 사이트|Streamlit 참고 사이트]]&lt;br /&gt;
# [[Streamlit Extention]]&lt;br /&gt;
# [[Streamlit 개발|Streamlit 프로그램]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 응용프로그램 개발 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=insert_chart_outlined&lt;br /&gt;
|내용= &#039;&#039;&#039;[[주식 자동매매 프로그램 개발]]&#039;&#039;&#039;&lt;br /&gt;
# [[대신증권 API 활용]]&lt;br /&gt;
# [[키움증권 api 매수매도|키움증권 API 활용]]&lt;br /&gt;
# [[개인 PC 텍스트 검색 채봇]]&lt;br /&gt;
# [[개인 PC 텍스트 검색 챗봇 웹 화면]]&lt;br /&gt;
# [[SQL 정리 툴|SQL Formater(정리)]]&lt;br /&gt;
}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== [[:category:java|JAVA 프로그래밍]] ===&lt;br /&gt;
==== [[Java openjdk 설치|JAVA 설치]] ====&lt;br /&gt;
==== [[JAVA 기초]] ====&lt;br /&gt;
# [[JAVA 명명 규칙]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== [[:category:autoit|Autotit 프로그래밍]] ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|아이콘이름=adb&lt;br /&gt;
|내용 = :&amp;lt;big&amp;gt;오토잇 프로그래밍 설치 및 기초 문법&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[Auotit 설치]]&lt;br /&gt;
# [[Autoit 기초 문법]]&lt;br /&gt;
# [[Autoit gui|Autoit GUI - 화면 제어 ]]&lt;br /&gt;
#:# [[Autoit GUI 컨트롤 스타일|GUI 컨트롤 스타일]]&lt;br /&gt;
#:# [[Handle의 class instance 값 구하는 방법|GUI 컨트롤 핸들 찾기]]&lt;br /&gt;
#:# [[Autoit 멀티 윈도우 컨트롤]]&lt;br /&gt;
#:# [[리스트뷰(그리드) 생성]]&lt;br /&gt;
#:# [[Autoit webview2|WEB 화면 UI개발]]&lt;br /&gt;
# [[Autoit 프로그램 개발]]&lt;br /&gt;
#:# [[Autoit sqlite|SQLite 디비 연결]]&lt;br /&gt;
#:# [[Autoit oracle connect|ORACLE 디비 연결]]&lt;br /&gt;
#:# [[Autoit 키보드 후킹|키보드 후킹]]&lt;br /&gt;
#:# [[Autoit 자동 업그레이드 프로그램 개발|자동 업데이트 프로그램 개발]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 에디터 활용법 ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|아이콘이름=view_quilt&lt;br /&gt;
|내용 = : &amp;lt;big&amp;gt;에디터 (editor)&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[Vscode 단축키]]&lt;br /&gt;
# [[서브라임 sublime 단축키|Sublime 단축키]]&lt;br /&gt;
## [[Sublime plugin 생성 방법|Sublime 플러그인 만들기]]&lt;br /&gt;
## [[sublime emmet]]&lt;br /&gt;
# [[Vi 명령어|vi 편집기]]&lt;br /&gt;
# [[Vi mode - ksh bash zsh]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 미디어위키 사용법 ==&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|배경색=#70BBF93E&lt;br /&gt;
|아이콘이름=school&lt;br /&gt;
|내용= &#039;&#039;&#039;미디어 설치 부터 활용 까지&#039;&#039;&#039; &lt;br /&gt;
# 미디어 위키 초보자 가이드 &lt;br /&gt;
## [[미디어위키 기본 사용법]] &lt;br /&gt;
## [[환경세팅 파일|환경설정(LocalSettings.php)]]&lt;br /&gt;
## [[스킨(테마) 추가/변경]]&lt;br /&gt;
## [[미디어위키 확장 기능]]&lt;br /&gt;
## [[미디어위키 예약어 와 변수]]&lt;br /&gt;
### [[미디어위키 예약어 와 변수#동작어_(Behavior_Switches)|미디어위키 동작 예약어]]&lt;br /&gt;
### [[미디어위키 예약어 와 변수#변수_(Variables)|미디어위키 변수 예약어]]&lt;br /&gt;
## 미디어위키 글쓰기 사용법&lt;br /&gt;
### [[미디어위키 기본 사용법#새글 쓰기|새글 쓰기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#대문 수정|첫페이지(대문) 수정]]&lt;br /&gt;
### [[미디어위키 기본 사용법#문단(Section)|목차 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#표(wiki table) 만들기|표 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#틀(Template) 만들기|틀 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#양식(Form) 만들기|폼 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#카테고리 만들기|카테고리 만들기]]&lt;br /&gt;
## 미디어 위키 환경설정&lt;br /&gt;
### [[스킨(테마) 추가/변경]]&lt;br /&gt;
### [[미디어위키 기본 사용법#대문 수정하기|대문 타이틀 글씨 숨기기]]&lt;br /&gt;
### [[특수 명령어]]&lt;br /&gt;
### [[환경세팅 파일|환경세팅 파일(LocalSettings.php)]]&lt;br /&gt;
### [[나눔고딕 웹폰트 설정하기]]&lt;br /&gt;
### [[반응형 이미지 사이즈 조절 방법]]&lt;br /&gt;
### [[스니펫-목차에 순번 붙이기]]&lt;br /&gt;
## 미디어위키 확장 프로그램 가이드&lt;br /&gt;
### [[Syntax Highlight|문법 하이라이트]]&lt;br /&gt;
### [[목차에 순번 붙이기|목차에 순번 붙이기(확장기능 설치)]]&lt;br /&gt;
### [[스니펫-목차에 순번 붙이기 |목차에 순번 붙이기(JS/CSS 이용)]] / [https://www.mediawiki.org/wiki/Manual:Table_of_contents#Auto-numbering 원본페이지 이동]&lt;br /&gt;
### [[페이지에 탭 만들기]]&lt;br /&gt;
### [[관련글 보기 기능 추가 ]]&lt;br /&gt;
### [[방문자 수 보기 기능 추가]]&lt;br /&gt;
### [[문서 목차 불러오기 기능 추가]] &lt;br /&gt;
### [[댓글 기능 추가]]&lt;br /&gt;
### [[미디어위키 유튜브 삽입|유튜브 삽입]]&lt;br /&gt;
### [[구글인증 로그인]]&lt;br /&gt;
### 검색기능 관련&lt;br /&gt;
###:1) [[시맨틱 미디어위키 설치]]&lt;br /&gt;
###:2) [[시맨틱 이용한 태그 달기]]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 3D 모델링 ==&lt;br /&gt;
=== [[초보자를 위한 모델링 프로그램 추천]]===&lt;br /&gt;
==== [[Blender 초보자 따라하기 ]] ====&lt;br /&gt;
==== [[Blender로 마우스 모델링]]====&lt;br /&gt;
==== [[Blender 버티컬 마우스 모델링]]====&lt;br /&gt;
=== [[mashmixer 모델링 편집틀 사용법]]===&lt;br /&gt;
=== 3D 프린터 ===&lt;br /&gt;
==== [[ 분리형_키보드_제작기_(split_keyboard_DIY)|커스텀 키보드 만들기 ]] ====&lt;br /&gt;
====[[휴대용 키보드 제작기]]====&lt;br /&gt;
&lt;br /&gt;
==== [[3D 프린터 추천 TOP 5]] ====&lt;br /&gt;
====[[3D 프린터 필라멘트 장단점 PLA PETG|3D 프린터 필라멘트 종류 와 장단점]]====&lt;br /&gt;
&lt;br /&gt;
==== [[뱀부랩 스튜디오 튜토리얼]] ====&lt;br /&gt;
==== [[3D 프린터로 메모 프린터 만들기|3D 프린터로 라인 프린터 만들기]] ====&lt;br /&gt;
==== [[3D 프린터 출력 제품 만족도 평가|3D프린터로 만든 제품 추천]] ====&lt;br /&gt;
==== [[3D 포르쉐911 RC카 만들기]] ====&lt;br /&gt;
&lt;br /&gt;
== 재테크 ==&lt;br /&gt;
=== 부동산 ===&lt;br /&gt;
=== 주식 ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|내용 = &amp;lt;big&amp;gt;주식 이야기&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[주식 용어]]&lt;br /&gt;
# [[주식거래시간|주식거래시간(한국/미국/중국)]]&lt;br /&gt;
# [[주식 수수료]]&lt;br /&gt;
# [[주식 금리|금리가 오를때/내릴때 주식 투자법]]&lt;br /&gt;
# [[신호등 분석법]]&lt;br /&gt;
# [[미국 배당주 추천|미국 추천 배당주 ]]&lt;br /&gt;
}}&lt;br /&gt;
* [[주식 금액별 호가 단위]]&lt;br /&gt;
* [[주식 시클리컬 가치주 투자법|시클리컬 가치주 투자법]]&lt;br /&gt;
** [[시클리컬 주요 산업별 대장주]]&lt;br /&gt;
* [[주식 테마주]]&lt;br /&gt;
==== 절세 계좌 투자 ====&lt;br /&gt;
# [[Isa 개인종합자산관리계좌|ISA 개인종합 계좌]] &lt;br /&gt;
# [[IRP 개인퇴직연금 계좌]] &lt;br /&gt;
# [[IRP 개인퇴직연금 계좌#IRP계좌 와 연금저축계좌의 차이|연금저축 계좌]]&lt;br /&gt;
# [[IRP ISA 연금저축펀트 최대 투자 금액|ISA IRP 연금저축펀드 비교 ]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 인물 ==&lt;br /&gt;
=== 근대사 ===&lt;br /&gt;
* [[노무현 명연설]]&lt;br /&gt;
* [[인간적인 국회의원 노회찬]]&lt;br /&gt;
* [[나의 스승 이어령]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 취미 ==&lt;br /&gt;
=== [[수영]] ===&lt;br /&gt;
== 휴식 ==&lt;br /&gt;
=== 휴양지 ===&lt;br /&gt;
==== [[서울_노원구_휴양림|서울_노원구_휴양림-&#039;&#039;&#039;수락 휴&#039;&#039;&#039;]]====&lt;br /&gt;
=== 물놀이/스파 ===&lt;br /&gt;
==== [[영종도 파라다이스 시티]] ====&lt;br /&gt;
==== [[경기도 계곡 추천]]====&lt;br /&gt;
==== [[가평 계곡 추천]] ====&lt;br /&gt;
==== [[전라도 계곡 추천]]====&lt;br /&gt;
==== [[경상도 계곡 추천]] ====&lt;br /&gt;
&lt;br /&gt;
=== 여행지 ===&lt;br /&gt;
=== 맛집 ===&lt;br /&gt;
==== [[인생 맛집 경기/서울]] ====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 음악 ==&lt;br /&gt;
=== 클래식 ===&lt;br /&gt;
* [[구스타프 말러]]&lt;br /&gt;
&lt;br /&gt;
=== 레젼드 ===&lt;br /&gt;
* [[존바이즈 베스트]]&lt;br /&gt;
* [[유키 구라모토]]&lt;br /&gt;
* [[조지 윈스턴]]&lt;br /&gt;
* [[김광석 베스트]]&lt;br /&gt;
* [[신해철 베스트]]&lt;br /&gt;
* [[김건모 베스트]]&lt;br /&gt;
* [[박혜경 베스트]]&lt;br /&gt;
* [[김필 베스트]]&lt;br /&gt;
&lt;br /&gt;
=== 기타 연습 ===&lt;br /&gt;
* [[메탈리카 기타 연습]]&lt;br /&gt;
* [[캐논 락버전]]&lt;br /&gt;
* [[smells like teen spirit - nirvana|Smells Teen Split-너바나 ]]&lt;br /&gt;
* [[Lover&#039;s concerto]]&lt;br /&gt;
[[category:devcafe]] &lt;br /&gt;
[[category:python]] &lt;br /&gt;
[[category:미디어위키]]&lt;br /&gt;
[[category:autoit]]&lt;br /&gt;
[[category:인물]]&lt;br /&gt;
[[category:역사]]&lt;br /&gt;
[[category:음악]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=2534</id>
		<title>대문</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EB%8C%80%EB%AC%B8&amp;diff=2534"/>
		<updated>2026-08-12T06:01:35Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{#metadata:key=데브카페}}&lt;br /&gt;
{{#metadata:key=파이썬}}&lt;br /&gt;
{{#metadata:key=프로그램개발}}&lt;br /&gt;
{{#metadata:key=autoit}}&lt;br /&gt;
{{#metadata:key=미디어위키}}&lt;br /&gt;
&lt;br /&gt;
= Welcome to DEV CAFE =&lt;br /&gt;
* {{CURRENTYEAR}}.{{CURRENTMONTHNAME}}.{{CURRENTDAY}}({{CURRENTDAYNAME}})  , 이세상 모든 개발에 대한 이야기 {{SERVER}}&lt;br /&gt;
&amp;lt;p sizes=&amp;quot;(max-width: 600px) 480px,800px&amp;quot;&amp;gt;&lt;br /&gt;
https://devcafe.co.kr/w/images/devcafe_main3.jpeg&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{틀:타이틀 라운드&lt;br /&gt;
|제목=[[:Category:python|파이썬]]: {{PAGESINCATEGORY: python}} 건 ,  [[:Category:미디어위키]] : {{PAGESINCATEGORY: 미디어위키}} 건 ,  [[:Category:autoit|오토잇]]: {{PAGESINCATEGORY: autoit}} 건,  [[:Category:linux|LINUX]]: {{PAGESINCATEGORY: linux}} 건, [[:Category:음악]]: {{PAGESINCATEGORY: 음악}} 건&lt;br /&gt;
|아이콘=emoji_objects&lt;br /&gt;
}}&lt;br /&gt;
{{Special:RecentChanges|days=5}}&lt;br /&gt;
== IT/기술 ==&lt;br /&gt;
=== [[파이썬|파이썬 프로그래밍]] ===&lt;br /&gt;
==== 파이썬 설치 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=home&lt;br /&gt;
|내용=&#039;&#039;&#039;[[파이썬 설치]]&#039;&#039;&#039; &lt;br /&gt;
# [[Python 가상환경|파이썬 가상화]]&lt;br /&gt;
# [[pip 이용 파이썬 라이브러리 설치|파이썬 라이브러리 설치]]&lt;br /&gt;
# [[pip 이용 파이썬 라이브러리 설치#설치 패키지 추출|설치된 파이썬 라이브러리 추출하기]]&lt;br /&gt;
# [[Python whl 설치|.whl 파일 다운로드 설치법]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|내용=&#039;&#039;&#039;[[:category:Python|Python]] Foundation&#039;&#039;&#039; &lt;br /&gt;
# [[PYTHON 데이터형|파이썬 데이터형]]&lt;br /&gt;
# [[튜플 리스트 딕셔너리 차이점,특징,사용예시|튜플 리스트 딕셔너리]]&lt;br /&gt;
# [[파이썬 명명규칙]]&lt;br /&gt;
# [[파이썬 클래스]]&lt;br /&gt;
|아이콘이름=accessibility&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 파이썬 고급 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=flight_takeoff&lt;br /&gt;
|내용=&#039;&#039;&#039;[[파이썬 개발 추천기능 TOP10|파이썬 고급 기능 TOP 10]]&#039;&#039;&#039; &lt;br /&gt;
:# [[Python Cheat Sheet|파이썬 치트 쉬트 ]]&lt;br /&gt;
:# [[파이썬 config parser|파이썬 .ini 환경파일에 읽고쓰기]]&lt;br /&gt;
:# [[파이썬 로깅]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 응용 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=contacts&lt;br /&gt;
|내용=&#039;&#039;&#039; [[PyQt|파이썬 GUI 프로그램 개발(PyQt)]]&#039;&#039;&#039; &lt;br /&gt;
# [[Process memory share|쉐어 메모리 접근]]&lt;br /&gt;
# [[Python Cheat Sheet#Parallel Processing|병렬처리 프로세싱]]&lt;br /&gt;
# [[멀티프로세싱]]&lt;br /&gt;
# [[파이썬 스케줄러 모듈]]&lt;br /&gt;
# [[파이썬 장고]]&lt;br /&gt;
# [[flask]]&lt;br /&gt;
# [[Json 이용 키-값 추가 수정 삭제 방법|JSON 키값 수정/삭]]&lt;br /&gt;
# [[파이썬 mybatis xml sql 파싱 방법|XML 파싱(Mybatis)]]&lt;br /&gt;
# [[스케줄러 만들기]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 판다스(Pandas) 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=apps &lt;br /&gt;
|내용= &#039;&#039;&#039;[[:category:pandas|PANDAS]] Foundation&#039;&#039;&#039;&lt;br /&gt;
# [[pandas|판다스(pandas) 기초]]&lt;br /&gt;
## [https://pandas.pydata.org/docs/ pandas 공식문서]&lt;br /&gt;
## [https://realpython.com/pandas-dataframe/ 리얼 판다스 튜토리얼]&lt;br /&gt;
## [https://www.geeksforgeeks.org/pandas-tutorial/ 그릭스 판다스 튜토리얼]&lt;br /&gt;
## [https://towardsdatascience.com/?gi=196f5e0ef243 투왈즈 튜터리얼]&lt;br /&gt;
# 판다스 응용&lt;br /&gt;
## [[PANDAS 와 SQL 쿼리]]&lt;br /&gt;
## [[Pandas mysql insert]]&lt;br /&gt;
## [[Pandas 엑셀]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== [[:category:streamlit|스트림릿 (Streamlit)]] 기초 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=insert_chart_outlined&lt;br /&gt;
|내용= &#039;&#039;&#039;[[Streamlit 기초]]&#039;&#039;&#039;&lt;br /&gt;
# [[Streamlit 개발 사이트|Streamlit 참고 사이트]]&lt;br /&gt;
# [[Streamlit Extention]]&lt;br /&gt;
# [[Streamlit 개발|Streamlit 프로그램]]&lt;br /&gt;
}}&lt;br /&gt;
==== 파이썬 응용프로그램 개발 ====&lt;br /&gt;
{{알림&lt;br /&gt;
|아이콘이름=insert_chart_outlined&lt;br /&gt;
|내용= &#039;&#039;&#039;[[주식 자동매매 프로그램 개발]]&#039;&#039;&#039;&lt;br /&gt;
# [[대신증권 API 활용]]&lt;br /&gt;
# [[키움증권 api 매수매도|키움증권 API 활용]]&lt;br /&gt;
# [[개인 PC 텍스트 검색 채봇]]&lt;br /&gt;
# [[개인 PC 텍스트 검색 챗봇 웹 화면]]&lt;br /&gt;
# [[SQL 정리 툴|SQL Formater(정리)]]&lt;br /&gt;
}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== [[:category:java|JAVA 프로그래밍]] ===&lt;br /&gt;
==== [[Java openjdk 설치|JAVA 설치]] ====&lt;br /&gt;
==== [[JAVA 기초]] ====&lt;br /&gt;
# [[JAVA 명명 규칙]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== [[:category:autoit|Autotit 프로그래밍]] ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|아이콘이름=adb&lt;br /&gt;
|내용 = :&amp;lt;big&amp;gt;오토잇 프로그래밍 설치 및 기초 문법&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[Auotit 설치]]&lt;br /&gt;
# [[Autoit 기초 문법]]&lt;br /&gt;
# [[Autoit gui|Autoit GUI - 화면 제어 ]]&lt;br /&gt;
#:# [[Autoit GUI 컨트롤 스타일|GUI 컨트롤 스타일]]&lt;br /&gt;
#:# [[Handle의 class instance 값 구하는 방법|GUI 컨트롤 핸들 찾기]]&lt;br /&gt;
#:# [[Autoit 멀티 윈도우 컨트롤]]&lt;br /&gt;
#:# [[리스트뷰(그리드) 생성]]&lt;br /&gt;
#:# [[Autoit webview2|WEB 화면 UI개발]]&lt;br /&gt;
# [[Autoit 프로그램 개발]]&lt;br /&gt;
#:# [[Autoit sqlite|SQLite 디비 연결]]&lt;br /&gt;
#:# [[Autoit oracle connect|ORACLE 디비 연결]]&lt;br /&gt;
#:# [[Autoit 키보드 후킹|키보드 후킹]]&lt;br /&gt;
#:# [[Autoit 자동 업그레이드 프로그램 개발|자동 업데이트 프로그램 개발]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 에디터 활용법 ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|아이콘이름=view_quilt&lt;br /&gt;
|내용 = : &amp;lt;big&amp;gt;에디터 (editor)&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[Vscode 단축키]]&lt;br /&gt;
# [[서브라임 sublime 단축키|Sublime 단축키]]&lt;br /&gt;
## [[Sublime plugin 생성 방법|Sublime 플러그인 만들기]]&lt;br /&gt;
## [[sublime emmet]]&lt;br /&gt;
# [[Vi 명령어|vi 편집기]]&lt;br /&gt;
# [[Vi mode - ksh bash zsh]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 미디어위키 사용법 ==&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|배경색=#70BBF93E&lt;br /&gt;
|아이콘이름=school&lt;br /&gt;
|내용= &#039;&#039;&#039;미디어 설치 부터 활용 까지&#039;&#039;&#039; &lt;br /&gt;
# 미디어 위키 초보자 가이드 &lt;br /&gt;
## [[미디어위키 기본 사용법]] &lt;br /&gt;
## [[환경세팅 파일|환경설정(LocalSettings.php)]]&lt;br /&gt;
## [[스킨(테마) 추가/변경]]&lt;br /&gt;
## [[미디어위키 확장 기능]]&lt;br /&gt;
## [[미디어위키 예약어 와 변수]]&lt;br /&gt;
### [[미디어위키 예약어 와 변수#동작어_(Behavior_Switches)|미디어위키 동작 예약어]]&lt;br /&gt;
### [[미디어위키 예약어 와 변수#변수_(Variables)|미디어위키 변수 예약어]]&lt;br /&gt;
## 미디어위키 글쓰기 사용법&lt;br /&gt;
### [[미디어위키 기본 사용법#새글 쓰기|새글 쓰기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#대문 수정|첫페이지(대문) 수정]]&lt;br /&gt;
### [[미디어위키 기본 사용법#문단(Section)|목차 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#표(wiki table) 만들기|표 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#틀(Template) 만들기|틀 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#양식(Form) 만들기|폼 만들기]]&lt;br /&gt;
### [[미디어위키 기본 사용법#카테고리 만들기|카테고리 만들기]]&lt;br /&gt;
## 미디어 위키 환경설정&lt;br /&gt;
### [[스킨(테마) 추가/변경]]&lt;br /&gt;
### [[미디어위키 기본 사용법#대문 수정하기|대문 타이틀 글씨 숨기기]]&lt;br /&gt;
### [[특수 명령어]]&lt;br /&gt;
### [[환경세팅 파일|환경세팅 파일(LocalSettings.php)]]&lt;br /&gt;
### [[나눔고딕 웹폰트 설정하기]]&lt;br /&gt;
### [[반응형 이미지 사이즈 조절 방법]]&lt;br /&gt;
### [[스니펫-목차에 순번 붙이기]]&lt;br /&gt;
## 미디어위키 확장 프로그램 가이드&lt;br /&gt;
### [[Syntax Highlight|문법 하이라이트]]&lt;br /&gt;
### [[목차에 순번 붙이기|목차에 순번 붙이기(확장기능 설치)]]&lt;br /&gt;
### [[스니펫-목차에 순번 붙이기 |목차에 순번 붙이기(JS/CSS 이용)]] / [https://www.mediawiki.org/wiki/Manual:Table_of_contents#Auto-numbering 원본페이지 이동]&lt;br /&gt;
### [[페이지에 탭 만들기]]&lt;br /&gt;
### [[관련글 보기 기능 추가 ]]&lt;br /&gt;
### [[방문자 수 보기 기능 추가]]&lt;br /&gt;
### [[문서 목차 불러오기 기능 추가]] &lt;br /&gt;
### [[댓글 기능 추가]]&lt;br /&gt;
### [[미디어위키 유튜브 삽입|유튜브 삽입]]&lt;br /&gt;
### [[구글인증 로그인]]&lt;br /&gt;
### 검색기능 관련&lt;br /&gt;
###:1) [[시맨틱 미디어위키 설치]]&lt;br /&gt;
###:2) [[시맨틱 이용한 태그 달기]]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 3D 모델링 ==&lt;br /&gt;
=== [[초보자를 위한 모델링 프로그램 추천]]===&lt;br /&gt;
==== [[Blender 초보자 따라하기 ]] ====&lt;br /&gt;
==== [[Blender로 마우스 모델링]]====&lt;br /&gt;
==== [[Blender 버티컬 마우스 모델링]]====&lt;br /&gt;
=== [[mashmixer 모델링 편집틀 사용법]]===&lt;br /&gt;
=== 3D 프린터 ===&lt;br /&gt;
==== [[ 분리형_키보드_제작기_(split_keyboard_DIY)|커스텀 키보드 만들기 ]] ====&lt;br /&gt;
====[[휴대용 키보드 제작기]]====&lt;br /&gt;
&lt;br /&gt;
==== [[3D 프린터 추천 TOP 5]] ====&lt;br /&gt;
====[[3D 프린터 필라멘트 장단점 PLA PETG|3D 프린터 필라멘트 종류 와 장단점]]====&lt;br /&gt;
&lt;br /&gt;
==== [[뱀부랩 스튜디오 튜토리얼]] ====&lt;br /&gt;
==== [[3D 프린터로 메모 프린터 만들기|3D 프린터로 라인 프린터 만들기]] ====&lt;br /&gt;
==== [[3D 프린터 출력 제품 만족도 평가|3D프린터로 만든 제품 추천]] ====&lt;br /&gt;
==== [[3D 포르쉐911 RC카 만들기]] ====&lt;br /&gt;
&lt;br /&gt;
== 재테크 ==&lt;br /&gt;
=== 부동산 ===&lt;br /&gt;
=== 주식 ===&lt;br /&gt;
{{틀:알림&lt;br /&gt;
|내용 = &amp;lt;big&amp;gt;주식 이야기&amp;lt;/big&amp;gt;&lt;br /&gt;
# [[주식 용어]]&lt;br /&gt;
# [[주식거래시간|주식거래시간(한국/미국/중국)]]&lt;br /&gt;
# [[주식 수수료]]&lt;br /&gt;
# [[주식 금리|금리가 오를때/내릴때 주식 투자법]]&lt;br /&gt;
# [[신호등 분석법]]&lt;br /&gt;
# [[미국 배당주 추천|미국 추천 배당주 ]]&lt;br /&gt;
}}&lt;br /&gt;
* [[주식 금액별 호가 단위]]&lt;br /&gt;
* [[주식 시클리컬 가치주 투자법|시클리컬 가치주 투자법]]&lt;br /&gt;
** [[시클리컬 주요 산업별 대장주]]&lt;br /&gt;
* [[주식 테마주]]&lt;br /&gt;
==== 절세 계좌 투자 ====&lt;br /&gt;
# [[Isa 개인종합자산관리계좌|ISA 개인종합 계좌]] &lt;br /&gt;
# [[IRP 개인퇴직연금 계좌]] &lt;br /&gt;
# [[IRP 개인퇴직연금 계좌#IRP계좌 와 연금저축계좌의 차이|연금저축 계좌]]&lt;br /&gt;
# [[IRP ISA 연금저축펀트 최대 투자 금액|ISA IRP 연금저축펀드 비교 ]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 인물 ==&lt;br /&gt;
=== 근대사 ===&lt;br /&gt;
* [[노무현 명연설]]&lt;br /&gt;
* [[인간적인 국회의원 노회찬]]&lt;br /&gt;
* [[나의 스승 이어령]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 취미 ==&lt;br /&gt;
=== [[수영]] ===&lt;br /&gt;
== 휴식 ==&lt;br /&gt;
=== 휴양지 ===&lt;br /&gt;
==== [[서울_노원구_휴양림|서울_노원구_휴양림-&#039;&#039;&#039;수락 휴&#039;&#039;&#039;]]====&lt;br /&gt;
=== 물놀이/스파 ===&lt;br /&gt;
==== [[영종도 파라다이스 시티]] ====&lt;br /&gt;
==== [[경기도 계곡 추천]]====&lt;br /&gt;
==== [[가평 계곡 추천]] ====&lt;br /&gt;
==== [[전라도 계곡 추천]]====&lt;br /&gt;
==== [[경상도 계곡 추천]] ====&lt;br /&gt;
&lt;br /&gt;
=== 여행지 ===&lt;br /&gt;
=== 맛집 ===&lt;br /&gt;
==== [[인생 맛집 경기/서울]] ====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 음악 ==&lt;br /&gt;
=== 클래식 ===&lt;br /&gt;
* [[구스타프 말러]]&lt;br /&gt;
&lt;br /&gt;
=== 레젼드 ===&lt;br /&gt;
* [[존바이즈 베스트]]&lt;br /&gt;
* [[유키 구라모토]]&lt;br /&gt;
* [[조지 윈스턴]]&lt;br /&gt;
* [[김광석 베스트]]&lt;br /&gt;
* [[신해철 베스트]]&lt;br /&gt;
* [[김건모 베스트]]&lt;br /&gt;
* [[박혜경 베스트]]&lt;br /&gt;
* [[김필 베스트]]&lt;br /&gt;
&lt;br /&gt;
=== 기타 연습 ===&lt;br /&gt;
* [[메탈리카 기타 연습]]&lt;br /&gt;
* [[캐논 락버전]]&lt;br /&gt;
* [[smells like teen spirit - nirvana|Smells Teen Split-너바나 ]]&lt;br /&gt;
* [[Lover&#039;s concerto]]&lt;br /&gt;
[[category:devcafe]] &lt;br /&gt;
[[category:python]] &lt;br /&gt;
[[category:미디어위키]]&lt;br /&gt;
[[category:autoit]]&lt;br /&gt;
[[category:인물]]&lt;br /&gt;
[[category:역사]]&lt;br /&gt;
[[category:음악]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EC%BD%94%EC%8A%A4%ED%94%BC_%EC%83%81%EC%9C%84_100%EC%9C%84_120%EC%9D%BC%EC%84%A0_%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4&amp;diff=2533</id>
		<title>코스피 상위 100위 120일선 자동매매</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EC%BD%94%EC%8A%A4%ED%94%BC_%EC%83%81%EC%9C%84_100%EC%9C%84_120%EC%9D%BC%EC%84%A0_%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4&amp;diff=2533"/>
		<updated>2026-08-12T05:18:36Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 코스피 시가총액 상위 100종목 중 120일 이동평균선(MA120) &#039;아래&#039;에 있는 종목 스크리닝 ==&lt;br /&gt;
# 사전 준비:&lt;br /&gt;
##    pip install pykrx pandas&lt;br /&gt;
# 동작 방식:&lt;br /&gt;
#:    1. 기준일 코스피 시가총액 상위 100종목 조회&lt;br /&gt;
#:    2. 각 종목의 최근 120거래일 종가로 120일 이동평균 계산&lt;br /&gt;
#:    3. 기준일 종가가 MA120보다 낮은 종목만 필터링하여 출력&lt;br /&gt;
#:&lt;br /&gt;
# 주의:&lt;br /&gt;
#:    - pykrx는 KRX(한국거래소) 공개 데이터를 스크래핑하는 비공식 라이브러리라&lt;br /&gt;
#:      가끔 응답이 느리거나 일시적으로 막힐 수 있습니다.&lt;br /&gt;
#:    - 이 스크립트는 투자 자문이 아니라 기술적 조건에 따른 단순 필터링 도구입니다.&lt;br /&gt;
#:      MA120 아래에 있다는 것 자체가 매수/매도 신호를 의미하지 않습니다.&lt;br /&gt;
&lt;br /&gt;
=== (중요) https://data.krx.co.kr/ 로그인 후 아이디/패스워드를 환경변수로 설정해야함.===&lt;br /&gt;
* 리눅스/맥 인경우 &lt;br /&gt;
~/.zshrc나 ~/.bash_profile에 위 두 줄&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
export KRX_ID=&amp;quot;&amp;quot;&lt;br /&gt;
export KRX_PW=&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 윈도우 환경변수에 추가 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
코스피 시가총액 상위 100종목 중 120일 이동평균선(MA120) &#039;아래&#039;에 있는 종목 스크리닝&lt;br /&gt;
&lt;br /&gt;
사전 준비:&lt;br /&gt;
    pip install pykrx pandas&lt;br /&gt;
&lt;br /&gt;
동작 방식:&lt;br /&gt;
    1. 기준일 코스피 시가총액 상위 100종목 조회&lt;br /&gt;
    2. 각 종목의 최근 120거래일 종가로 120일 이동평균 계산&lt;br /&gt;
    3. 기준일 종가가 MA120보다 낮은 종목만 필터링하여 출력&lt;br /&gt;
&lt;br /&gt;
주의:&lt;br /&gt;
    - pykrx는 KRX(한국거래소) 공개 데이터를 스크래핑하는 비공식 라이브러리라&lt;br /&gt;
      가끔 응답이 느리거나 일시적으로 막힐 수 있습니다.&lt;br /&gt;
    - 이 스크립트는 투자 자문이 아니라 기술적 조건에 따른 단순 필터링 도구입니다.&lt;br /&gt;
      MA120 아래에 있다는 것 자체가 매수/매도 신호를 의미하지 않습니다.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import time&lt;br /&gt;
from datetime import datetime, timedelta&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
from pykrx import stock&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_trading_day(base_date: str) -&amp;gt; str:&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;base_date(YYYYMMDD)가 휴장일이면 가장 최근 거래일로 보정&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(10):&lt;br /&gt;
        d = (datetime.strptime(base_date, &amp;quot;%Y%m%d&amp;quot;) - timedelta(days=i)).strftime(&amp;quot;%Y%m%d&amp;quot;)&lt;br /&gt;
        try:&lt;br /&gt;
            df = stock.get_market_ohlcv(d, d, &amp;quot;005930&amp;quot;)  # 삼성전자로 개장 여부 확인&lt;br /&gt;
            if not df.empty:&lt;br /&gt;
                return d&lt;br /&gt;
        except Exception:&lt;br /&gt;
            continue&lt;br /&gt;
    raise RuntimeError(&amp;quot;최근 거래일을 찾지 못했습니다.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_top100_by_market_cap(base_date: str) -&amp;gt; pd.DataFrame:&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;기준일 코스피 시가총액 상위 100종목&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    df = stock.get_market_cap_by_ticker(base_date, market=&amp;quot;KOSPI&amp;quot;)&lt;br /&gt;
    if df.empty or &amp;quot;시가총액&amp;quot; not in df.columns:&lt;br /&gt;
        raise RuntimeError(&lt;br /&gt;
            f&amp;quot;{base_date} 시가총액 데이터를 가져오지 못했습니다. &amp;quot;&lt;br /&gt;
            &amp;quot;pykrx 버전을 확인하거나(pip install -U pykrx) 다른 날짜로 시도해보세요.&amp;quot;&lt;br /&gt;
        )&lt;br /&gt;
    df = df.sort_values(&amp;quot;시가총액&amp;quot;, ascending=False).head(100)&lt;br /&gt;
    df[&amp;quot;종목명&amp;quot;] = [stock.get_market_ticker_name(t) for t in df.index]&lt;br /&gt;
    return df&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def is_below_ma120(ticker: str, base_date: str):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;해당 종목의 base_date 종가가 MA120보다 낮은지 계산&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    start = (datetime.strptime(base_date, &amp;quot;%Y%m%d&amp;quot;) - timedelta(days=250)).strftime(&amp;quot;%Y%m%d&amp;quot;)&lt;br /&gt;
    ohlcv = stock.get_market_ohlcv(start, base_date, ticker)&lt;br /&gt;
    if len(ohlcv) &amp;lt; 120:&lt;br /&gt;
        return None  # 상장 120거래일 미만 등 데이터 부족&lt;br /&gt;
    ma120 = ohlcv[&amp;quot;종가&amp;quot;].rolling(window=120).mean().iloc[-1]&lt;br /&gt;
    close = ohlcv[&amp;quot;종가&amp;quot;].iloc[-1]&lt;br /&gt;
    return close, ma120, close &amp;lt; ma120&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # 조회 기준일 (기본값: 어제 날짜, 필요시 직접 YYYYMMDD로 수정)&lt;br /&gt;
    yesterday = (datetime.now() - timedelta(days=1)).strftime(&amp;quot;%Y%m%d&amp;quot;)&lt;br /&gt;
    base_date = get_trading_day(yesterday)&lt;br /&gt;
    print(f&amp;quot;[기준일] {base_date}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    top100 = get_top100_by_market_cap(base_date)&lt;br /&gt;
&lt;br /&gt;
    results = []&lt;br /&gt;
    for ticker, row in top100.iterrows():&lt;br /&gt;
        r = is_below_ma120(ticker, base_date)&lt;br /&gt;
        if r is None:&lt;br /&gt;
            continue&lt;br /&gt;
        close, ma120, below = r&lt;br /&gt;
        if below:&lt;br /&gt;
            results.append({&lt;br /&gt;
                &amp;quot;종목코드&amp;quot;: ticker,&lt;br /&gt;
                &amp;quot;종목명&amp;quot;: row[&amp;quot;종목명&amp;quot;],&lt;br /&gt;
                &amp;quot;시가총액(억원)&amp;quot;: round(row[&amp;quot;시가총액&amp;quot;] / 1e8),&lt;br /&gt;
                &amp;quot;종가&amp;quot;: close,&lt;br /&gt;
                &amp;quot;MA120&amp;quot;: round(ma120, 1),&lt;br /&gt;
                &amp;quot;괴리율(%)&amp;quot;: round((close - ma120) / ma120 * 100, 2),&lt;br /&gt;
            })&lt;br /&gt;
        time.sleep(0.2)  # 과도한 요청 방지&lt;br /&gt;
&lt;br /&gt;
    result_df = pd.DataFrame(results).sort_values(&amp;quot;괴리율(%)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;시가총액 100위 내 MA120 아래 종목: 총 {len(result_df)}개\n&amp;quot;)&lt;br /&gt;
    print(result_df.to_string(index=False))&lt;br /&gt;
&lt;br /&gt;
    result_df.to_csv(&amp;quot;kospi_top100_below_ma120.csv&amp;quot;, index=False, encoding=&amp;quot;utf-8-sig&amp;quot;)&lt;br /&gt;
    print(&amp;quot;\n결과를 kospi_top100_below_ma120.csv 로 저장했습니다.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EC%BD%94%EC%8A%A4%ED%94%BC_%EC%83%81%EC%9C%84_100%EC%9C%84_120%EC%9D%BC%EC%84%A0_%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4&amp;diff=2532</id>
		<title>코스피 상위 100위 120일선 자동매매</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EC%BD%94%EC%8A%A4%ED%94%BC_%EC%83%81%EC%9C%84_100%EC%9C%84_120%EC%9D%BC%EC%84%A0_%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4&amp;diff=2532"/>
		<updated>2026-08-12T05:18:12Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 코스피 시가총액 상위 100종목 중 120일 이동평균선(MA120) &#039;아래&#039;에 있는 종목 스크리닝 ==&lt;br /&gt;
# 사전 준비:&lt;br /&gt;
##    pip install pykrx pandas&lt;br /&gt;
# 동작 방식:&lt;br /&gt;
#:    1. 기준일 코스피 시가총액 상위 100종목 조회&lt;br /&gt;
#:    2. 각 종목의 최근 120거래일 종가로 120일 이동평균 계산&lt;br /&gt;
#:    3. 기준일 종가가 MA120보다 낮은 종목만 필터링하여 출력&lt;br /&gt;
#:&lt;br /&gt;
# 주의:&lt;br /&gt;
#:    - pykrx는 KRX(한국거래소) 공개 데이터를 스크래핑하는 비공식 라이브러리라&lt;br /&gt;
#:      가끔 응답이 느리거나 일시적으로 막힐 수 있습니다.&lt;br /&gt;
#:    - 이 스크립트는 투자 자문이 아니라 기술적 조건에 따른 단순 필터링 도구입니다.&lt;br /&gt;
#:      MA120 아래에 있다는 것 자체가 매수/매도 신호를 의미하지 않습니다.&lt;br /&gt;
&lt;br /&gt;
* (중요) https://data.krx.co.kr/ 로그인 후 아이디/패스워드를 환경변수로 설정해야함.&lt;br /&gt;
** 리눅스/맥 인경우 &lt;br /&gt;
~/.zshrc나 ~/.bash_profile에 위 두 줄&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
export KRX_ID=&amp;quot;&amp;quot;&lt;br /&gt;
export KRX_PW=&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** 윈도우 환경변수에 추가 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
코스피 시가총액 상위 100종목 중 120일 이동평균선(MA120) &#039;아래&#039;에 있는 종목 스크리닝&lt;br /&gt;
&lt;br /&gt;
사전 준비:&lt;br /&gt;
    pip install pykrx pandas&lt;br /&gt;
&lt;br /&gt;
동작 방식:&lt;br /&gt;
    1. 기준일 코스피 시가총액 상위 100종목 조회&lt;br /&gt;
    2. 각 종목의 최근 120거래일 종가로 120일 이동평균 계산&lt;br /&gt;
    3. 기준일 종가가 MA120보다 낮은 종목만 필터링하여 출력&lt;br /&gt;
&lt;br /&gt;
주의:&lt;br /&gt;
    - pykrx는 KRX(한국거래소) 공개 데이터를 스크래핑하는 비공식 라이브러리라&lt;br /&gt;
      가끔 응답이 느리거나 일시적으로 막힐 수 있습니다.&lt;br /&gt;
    - 이 스크립트는 투자 자문이 아니라 기술적 조건에 따른 단순 필터링 도구입니다.&lt;br /&gt;
      MA120 아래에 있다는 것 자체가 매수/매도 신호를 의미하지 않습니다.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import time&lt;br /&gt;
from datetime import datetime, timedelta&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
from pykrx import stock&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_trading_day(base_date: str) -&amp;gt; str:&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;base_date(YYYYMMDD)가 휴장일이면 가장 최근 거래일로 보정&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(10):&lt;br /&gt;
        d = (datetime.strptime(base_date, &amp;quot;%Y%m%d&amp;quot;) - timedelta(days=i)).strftime(&amp;quot;%Y%m%d&amp;quot;)&lt;br /&gt;
        try:&lt;br /&gt;
            df = stock.get_market_ohlcv(d, d, &amp;quot;005930&amp;quot;)  # 삼성전자로 개장 여부 확인&lt;br /&gt;
            if not df.empty:&lt;br /&gt;
                return d&lt;br /&gt;
        except Exception:&lt;br /&gt;
            continue&lt;br /&gt;
    raise RuntimeError(&amp;quot;최근 거래일을 찾지 못했습니다.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_top100_by_market_cap(base_date: str) -&amp;gt; pd.DataFrame:&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;기준일 코스피 시가총액 상위 100종목&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    df = stock.get_market_cap_by_ticker(base_date, market=&amp;quot;KOSPI&amp;quot;)&lt;br /&gt;
    if df.empty or &amp;quot;시가총액&amp;quot; not in df.columns:&lt;br /&gt;
        raise RuntimeError(&lt;br /&gt;
            f&amp;quot;{base_date} 시가총액 데이터를 가져오지 못했습니다. &amp;quot;&lt;br /&gt;
            &amp;quot;pykrx 버전을 확인하거나(pip install -U pykrx) 다른 날짜로 시도해보세요.&amp;quot;&lt;br /&gt;
        )&lt;br /&gt;
    df = df.sort_values(&amp;quot;시가총액&amp;quot;, ascending=False).head(100)&lt;br /&gt;
    df[&amp;quot;종목명&amp;quot;] = [stock.get_market_ticker_name(t) for t in df.index]&lt;br /&gt;
    return df&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def is_below_ma120(ticker: str, base_date: str):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;해당 종목의 base_date 종가가 MA120보다 낮은지 계산&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    start = (datetime.strptime(base_date, &amp;quot;%Y%m%d&amp;quot;) - timedelta(days=250)).strftime(&amp;quot;%Y%m%d&amp;quot;)&lt;br /&gt;
    ohlcv = stock.get_market_ohlcv(start, base_date, ticker)&lt;br /&gt;
    if len(ohlcv) &amp;lt; 120:&lt;br /&gt;
        return None  # 상장 120거래일 미만 등 데이터 부족&lt;br /&gt;
    ma120 = ohlcv[&amp;quot;종가&amp;quot;].rolling(window=120).mean().iloc[-1]&lt;br /&gt;
    close = ohlcv[&amp;quot;종가&amp;quot;].iloc[-1]&lt;br /&gt;
    return close, ma120, close &amp;lt; ma120&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # 조회 기준일 (기본값: 어제 날짜, 필요시 직접 YYYYMMDD로 수정)&lt;br /&gt;
    yesterday = (datetime.now() - timedelta(days=1)).strftime(&amp;quot;%Y%m%d&amp;quot;)&lt;br /&gt;
    base_date = get_trading_day(yesterday)&lt;br /&gt;
    print(f&amp;quot;[기준일] {base_date}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    top100 = get_top100_by_market_cap(base_date)&lt;br /&gt;
&lt;br /&gt;
    results = []&lt;br /&gt;
    for ticker, row in top100.iterrows():&lt;br /&gt;
        r = is_below_ma120(ticker, base_date)&lt;br /&gt;
        if r is None:&lt;br /&gt;
            continue&lt;br /&gt;
        close, ma120, below = r&lt;br /&gt;
        if below:&lt;br /&gt;
            results.append({&lt;br /&gt;
                &amp;quot;종목코드&amp;quot;: ticker,&lt;br /&gt;
                &amp;quot;종목명&amp;quot;: row[&amp;quot;종목명&amp;quot;],&lt;br /&gt;
                &amp;quot;시가총액(억원)&amp;quot;: round(row[&amp;quot;시가총액&amp;quot;] / 1e8),&lt;br /&gt;
                &amp;quot;종가&amp;quot;: close,&lt;br /&gt;
                &amp;quot;MA120&amp;quot;: round(ma120, 1),&lt;br /&gt;
                &amp;quot;괴리율(%)&amp;quot;: round((close - ma120) / ma120 * 100, 2),&lt;br /&gt;
            })&lt;br /&gt;
        time.sleep(0.2)  # 과도한 요청 방지&lt;br /&gt;
&lt;br /&gt;
    result_df = pd.DataFrame(results).sort_values(&amp;quot;괴리율(%)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;시가총액 100위 내 MA120 아래 종목: 총 {len(result_df)}개\n&amp;quot;)&lt;br /&gt;
    print(result_df.to_string(index=False))&lt;br /&gt;
&lt;br /&gt;
    result_df.to_csv(&amp;quot;kospi_top100_below_ma120.csv&amp;quot;, index=False, encoding=&amp;quot;utf-8-sig&amp;quot;)&lt;br /&gt;
    print(&amp;quot;\n결과를 kospi_top100_below_ma120.csv 로 저장했습니다.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EC%BD%94%EC%8A%A4%ED%94%BC_%EC%83%81%EC%9C%84_100%EC%9C%84_120%EC%9D%BC%EC%84%A0_%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4&amp;diff=2531</id>
		<title>코스피 상위 100위 120일선 자동매매</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EC%BD%94%EC%8A%A4%ED%94%BC_%EC%83%81%EC%9C%84_100%EC%9C%84_120%EC%9D%BC%EC%84%A0_%EC%9E%90%EB%8F%99%EB%A7%A4%EB%A7%A4&amp;diff=2531"/>
		<updated>2026-08-12T02:35:15Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: 새 문서: == 코스피 시가총액 상위 100종목 중 120일 이동평균선(MA120) &amp;#039;아래&amp;#039;에 있는 종목 스크리닝 == # 사전 준비: ##    pip install pykrx pandas # 동작 방식: #:    1. 기준일 코스피 시가총액 상위 100종목 조회 #:    2. 각 종목의 최근 120거래일 종가로 120일 이동평균 계산 #:    3. 기준일 종가가 MA120보다 낮은 종목만 필터링하여 출력 #: # 주의: #:    - pykrx는 KRX(한국거래소) 공개 데이터를...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 코스피 시가총액 상위 100종목 중 120일 이동평균선(MA120) &#039;아래&#039;에 있는 종목 스크리닝 ==&lt;br /&gt;
# 사전 준비:&lt;br /&gt;
##    pip install pykrx pandas&lt;br /&gt;
# 동작 방식:&lt;br /&gt;
#:    1. 기준일 코스피 시가총액 상위 100종목 조회&lt;br /&gt;
#:    2. 각 종목의 최근 120거래일 종가로 120일 이동평균 계산&lt;br /&gt;
#:    3. 기준일 종가가 MA120보다 낮은 종목만 필터링하여 출력&lt;br /&gt;
#:&lt;br /&gt;
# 주의:&lt;br /&gt;
#:    - pykrx는 KRX(한국거래소) 공개 데이터를 스크래핑하는 비공식 라이브러리라&lt;br /&gt;
#:      가끔 응답이 느리거나 일시적으로 막힐 수 있습니다.&lt;br /&gt;
#:    - 이 스크립트는 투자 자문이 아니라 기술적 조건에 따른 단순 필터링 도구입니다.&lt;br /&gt;
#:      MA120 아래에 있다는 것 자체가 매수/매도 신호를 의미하지 않습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
코스피 시가총액 상위 100종목 중 120일 이동평균선(MA120) &#039;아래&#039;에 있는 종목 스크리닝&lt;br /&gt;
&lt;br /&gt;
사전 준비:&lt;br /&gt;
    pip install pykrx pandas&lt;br /&gt;
&lt;br /&gt;
동작 방식:&lt;br /&gt;
    1. 기준일 코스피 시가총액 상위 100종목 조회&lt;br /&gt;
    2. 각 종목의 최근 120거래일 종가로 120일 이동평균 계산&lt;br /&gt;
    3. 기준일 종가가 MA120보다 낮은 종목만 필터링하여 출력&lt;br /&gt;
&lt;br /&gt;
주의:&lt;br /&gt;
    - pykrx는 KRX(한국거래소) 공개 데이터를 스크래핑하는 비공식 라이브러리라&lt;br /&gt;
      가끔 응답이 느리거나 일시적으로 막힐 수 있습니다.&lt;br /&gt;
    - 이 스크립트는 투자 자문이 아니라 기술적 조건에 따른 단순 필터링 도구입니다.&lt;br /&gt;
      MA120 아래에 있다는 것 자체가 매수/매도 신호를 의미하지 않습니다.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import time&lt;br /&gt;
from datetime import datetime, timedelta&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
from pykrx import stock&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_trading_day(base_date: str) -&amp;gt; str:&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;base_date(YYYYMMDD)가 휴장일이면 가장 최근 거래일로 보정&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(10):&lt;br /&gt;
        d = (datetime.strptime(base_date, &amp;quot;%Y%m%d&amp;quot;) - timedelta(days=i)).strftime(&amp;quot;%Y%m%d&amp;quot;)&lt;br /&gt;
        try:&lt;br /&gt;
            df = stock.get_market_ohlcv(d, d, &amp;quot;005930&amp;quot;)  # 삼성전자로 개장 여부 확인&lt;br /&gt;
            if not df.empty:&lt;br /&gt;
                return d&lt;br /&gt;
        except Exception:&lt;br /&gt;
            continue&lt;br /&gt;
    raise RuntimeError(&amp;quot;최근 거래일을 찾지 못했습니다.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_top100_by_market_cap(base_date: str) -&amp;gt; pd.DataFrame:&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;기준일 코스피 시가총액 상위 100종목&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    df = stock.get_market_cap(base_date, market=&amp;quot;KOSPI&amp;quot;)&lt;br /&gt;
    df = df.sort_values(&amp;quot;시가총액&amp;quot;, ascending=False).head(100)&lt;br /&gt;
    df[&amp;quot;종목명&amp;quot;] = [stock.get_market_ticker_name(t) for t in df.index]&lt;br /&gt;
    return df&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def is_below_ma120(ticker: str, base_date: str):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;해당 종목의 base_date 종가가 MA120보다 낮은지 계산&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    start = (datetime.strptime(base_date, &amp;quot;%Y%m%d&amp;quot;) - timedelta(days=250)).strftime(&amp;quot;%Y%m%d&amp;quot;)&lt;br /&gt;
    ohlcv = stock.get_market_ohlcv(start, base_date, ticker)&lt;br /&gt;
    if len(ohlcv) &amp;lt; 120:&lt;br /&gt;
        return None  # 상장 120거래일 미만 등 데이터 부족&lt;br /&gt;
    ma120 = ohlcv[&amp;quot;종가&amp;quot;].rolling(window=120).mean().iloc[-1]&lt;br /&gt;
    close = ohlcv[&amp;quot;종가&amp;quot;].iloc[-1]&lt;br /&gt;
    return close, ma120, close &amp;lt; ma120&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # 조회 기준일 (기본값: 어제 날짜, 필요시 직접 YYYYMMDD로 수정)&lt;br /&gt;
    yesterday = (datetime.now() - timedelta(days=1)).strftime(&amp;quot;%Y%m%d&amp;quot;)&lt;br /&gt;
    base_date = get_trading_day(yesterday)&lt;br /&gt;
    print(f&amp;quot;[기준일] {base_date}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    top100 = get_top100_by_market_cap(base_date)&lt;br /&gt;
&lt;br /&gt;
    results = []&lt;br /&gt;
    for ticker, row in top100.iterrows():&lt;br /&gt;
        r = is_below_ma120(ticker, base_date)&lt;br /&gt;
        if r is None:&lt;br /&gt;
            continue&lt;br /&gt;
        close, ma120, below = r&lt;br /&gt;
        if below:&lt;br /&gt;
            results.append({&lt;br /&gt;
                &amp;quot;종목코드&amp;quot;: ticker,&lt;br /&gt;
                &amp;quot;종목명&amp;quot;: row[&amp;quot;종목명&amp;quot;],&lt;br /&gt;
                &amp;quot;시가총액(억원)&amp;quot;: round(row[&amp;quot;시가총액&amp;quot;] / 1e8),&lt;br /&gt;
                &amp;quot;종가&amp;quot;: close,&lt;br /&gt;
                &amp;quot;MA120&amp;quot;: round(ma120, 1),&lt;br /&gt;
                &amp;quot;괴리율(%)&amp;quot;: round((close - ma120) / ma120 * 100, 2),&lt;br /&gt;
            })&lt;br /&gt;
        time.sleep(0.2)  # 과도한 요청 방지&lt;br /&gt;
&lt;br /&gt;
    result_df = pd.DataFrame(results).sort_values(&amp;quot;괴리율(%)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;시가총액 100위 내 MA120 아래 종목: 총 {len(result_df)}개\n&amp;quot;)&lt;br /&gt;
    print(result_df.to_string(index=False))&lt;br /&gt;
&lt;br /&gt;
    result_df.to_csv(&amp;quot;kospi_top100_below_ma120.csv&amp;quot;, index=False, encoding=&amp;quot;utf-8-sig&amp;quot;)&lt;br /&gt;
    print(&amp;quot;\n결과를 kospi_top100_below_ma120.csv 로 저장했습니다.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Zmk_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%AA%A9%EB%A1%9D&amp;diff=2530</id>
		<title>Zmk 키보드 목록</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Zmk_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%AA%A9%EB%A1%9D&amp;diff=2530"/>
		<updated>2026-08-10T16:35:32Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Zmk 키보드 목록  =&lt;br /&gt;
전체 지원 shield 목록은 ZMK 저장소에서 직접 확인 가능합니다: https://github.com/zmkfirmware/zmk/tree/main/app/boards/shields&lt;br /&gt;
&lt;br /&gt;
== 분할 키보드 목록 ==&lt;br /&gt;
ZMK 인트리(zmk/app/boards/shields)에 기본 지원되는 분할 키보드&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
| 키보드 | 구조 (rows × cols) | 엄지키 | 총 키수 | 스태거 방식 | 특징 |&lt;br /&gt;
|---|---|---|---|---|---|&lt;br /&gt;
| **Ferris Sweep** | 3×5 | 2 | 34 | 컬럼 스태거 | 초미니, 34키 미니멀리즘 커뮤니티의 시작점 |&lt;br /&gt;
| **Corne (crkbd)** | 4×6 (3+엄지1) | 3 | 42 | 컬럼 스태거 | 가장 대중적, 부품 구하기 쉬움, OLED 지원 |&lt;br /&gt;
| **Corne-ish Zen** | 4×6 | 3 | 42 | 컬럼 스태거 | Corne과 동일 매트릭스, 초콜릿(choc) 스위치용, 케이스 완성도 높음 |&lt;br /&gt;
| **Reviung41** | - | - | 41 | 컬럼 스태거 | 유니바디(한 장짜리 PCB), 핸드와이어링 인기 |&lt;br /&gt;
| **Lily58** | 5×6 (4+엄지1) | 5 | 58 | 컬럼 스태거 | 로우 하나 더 있어서 숫자/기호 전용 로우 확보 가능 (치치님이 선택하신 것) |&lt;br /&gt;
| **Sofle** | 5×6 (4+엄지1) | 6 | 62~66 | 로우 스태거 | Lily58과 매트릭스 유사, 로터리 엔코더 기본 포함, 좀 더 넓은 피치 |&lt;br /&gt;
| **Iris** | 5×6 | 4 | 56 | 로우 스태거 | Keebio 제작, 컴팩트하면서 로우 스태거라 일반 키보드 감각과 비슷 |&lt;br /&gt;
| **Kyria** | 5×6 (4+엄지1, 바깥 컬럼은 로우 3개만) | 5 | 44 | 컬럼 스태거 | 바깥쪽 컬럼이 짧아 인체공학적, 엔코더 2개까지 지원 |&lt;br /&gt;
| **Redox** | 6×6 (5+엄지1) | 5 | 65~70 | 컬럼 스태거 | 사실상 풀사이즈에 가까운 큰 분할 키보드 |&lt;br /&gt;
| **Microdox** | 4×5 (3+엄지1) | 3 | 36 | 컬럼 스태거 | Corne보다 한 컬럼 적은 초콤팩트형 |&lt;br /&gt;
| **Skeletyl (BastardKB)** | 4×5 | 4 | 44 | 컬럼 스태거 | 골격형 디자인, 트랙볼 버전(Charybdis) 있음 |&lt;br /&gt;
| **Glove80** | 컨투어드(곡면), 매트릭스 개념 다름 | 6 | 80 | 컨투어드 | 완제품 전용, 손 모양 곡면 배열이라 매트릭스 자체가 다름 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
## 선택 기준 참고&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
- **키 개수 줄이고 싶다** → Ferris Sweep, Microdox (34~36키)&lt;br /&gt;
- **Corne 그대로 + 숫자 로우 하나** → Lily58 (지금 하시는 선택)&lt;br /&gt;
- **일반 키보드처럼 로우 스태거 감각 원함** → Sofle, Iris&lt;br /&gt;
- **엄지 클러스터를 더 크게, 인체공학 강화** → Kyria, Redox&lt;br /&gt;
- **엔코더로 볼륨/스크롤 조작 원함** → Sofle, Kyria (엔코더 브레이크아웃 있음)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== TKL(텐키리스) 스타일 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| 키보드 | 구조 | 총 키수 | 스태거 | 특징 |&lt;br /&gt;
|---|---|---|---|---|&lt;br /&gt;
| **Quefrency** | 숫자 로우 O, 펑션 로우 X (65%) | 60~68 (좌/우 매크로 컬럼 옵션) | 로우 스태거(일반 키보드와 동일) | 일반 키보드 감각 그대로 분할, 왼쪽에 매크로 컬럼 추가 가능 |&lt;br /&gt;
| **Quefrency LM** | Quefrency와 동일 구조 | 60~68 | 로우 스태거 | 초콜릿(Choc) 스위치용 저프로파일 버전 |&lt;br /&gt;
| **Sinc** | 숫자+펑션 로우 모두 O (75%/TKL) | 78~84 | 로우 스태거 | ZMK 분할 중 TKL에 가장 가까움, 풀사이즈 감각 그대로 원하면 이게 정답 |&lt;br /&gt;
| **Sinc LM** | Sinc와 동일 구조 | 78~84 | 로우 스태거 | 저프로파일 Choc 버전 |&lt;br /&gt;
| **Nibble** | 65% 배열 | 65 | 로우 스태거 | 좀 더 컴팩트한 65% 분할 |&lt;br /&gt;
| **SNAP** | 75% 배열 | 75 | 로우 스태거 | Nibble보다 한 단계 큰 75% 분할 |&lt;br /&gt;
| **Redox** | 7×5 컬럼 스태거 + 엄지 | 76 | 컬럼 스태거 | Ergodox 축소판, 컬럼 스태거라 학습곡선 있음 |&lt;br /&gt;
| **Kinesis Advantage360** | 컨투어드(곡면) | ~87 상당 | 컨투어드 | 정식 완제품, 곡면 배열이라 일반 TKL과 타건감은 다름 |&lt;br /&gt;
&lt;br /&gt;
## 참고&lt;br /&gt;
&lt;br /&gt;
- **일반 키보드 감각 + 학습곡선 최소화**가 목표시면 **Quefrency**나 **Sinc**가 가장 무난합니다 (로우 스태거라 지금 손가락 습관 그대로 사용 가능)&lt;br /&gt;
- 지금 만들고 계신 Lily58(컬럼 스태거, 5×6)과는 타건 감각이 완전히 다르니, 두 종류를 같이 써보시면 본인이 로우 스태거/컬럼 스태거 중 뭐가 더 편한지 판단하시는 데 도움 됩니다&lt;br /&gt;
- Quefrency/Sinc/Nibble/SNAP는 모두 Keebio 제작, ZMK 공식 인트리 shield로 등록되어 있어 별도 devicetree 작업 없이 바로 빌드 가능합니다&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Zmk_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%AA%A9%EB%A1%9D&amp;diff=2529</id>
		<title>Zmk 키보드 목록</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Zmk_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%AA%A9%EB%A1%9D&amp;diff=2529"/>
		<updated>2026-08-10T16:32:32Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZMK 인트리(zmk/app/boards/shields)에 기본 지원되는 분할 키보드들 중 대표적인 것들을 정리했습니다. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
| 키보드 | 구조 (rows × cols) | 엄지키 | 총 키수 | 스태거 방식 | 특징 |&lt;br /&gt;
|---|---|---|---|---|---|&lt;br /&gt;
| **Ferris Sweep** | 3×5 | 2 | 34 | 컬럼 스태거 | 초미니, 34키 미니멀리즘 커뮤니티의 시작점 |&lt;br /&gt;
| **Corne (crkbd)** | 4×6 (3+엄지1) | 3 | 42 | 컬럼 스태거 | 가장 대중적, 부품 구하기 쉬움, OLED 지원 |&lt;br /&gt;
| **Corne-ish Zen** | 4×6 | 3 | 42 | 컬럼 스태거 | Corne과 동일 매트릭스, 초콜릿(choc) 스위치용, 케이스 완성도 높음 |&lt;br /&gt;
| **Reviung41** | - | - | 41 | 컬럼 스태거 | 유니바디(한 장짜리 PCB), 핸드와이어링 인기 |&lt;br /&gt;
| **Lily58** | 5×6 (4+엄지1) | 5 | 58 | 컬럼 스태거 | 로우 하나 더 있어서 숫자/기호 전용 로우 확보 가능 (치치님이 선택하신 것) |&lt;br /&gt;
| **Sofle** | 5×6 (4+엄지1) | 6 | 62~66 | 로우 스태거 | Lily58과 매트릭스 유사, 로터리 엔코더 기본 포함, 좀 더 넓은 피치 |&lt;br /&gt;
| **Iris** | 5×6 | 4 | 56 | 로우 스태거 | Keebio 제작, 컴팩트하면서 로우 스태거라 일반 키보드 감각과 비슷 |&lt;br /&gt;
| **Kyria** | 5×6 (4+엄지1, 바깥 컬럼은 로우 3개만) | 5 | 44 | 컬럼 스태거 | 바깥쪽 컬럼이 짧아 인체공학적, 엔코더 2개까지 지원 |&lt;br /&gt;
| **Redox** | 6×6 (5+엄지1) | 5 | 65~70 | 컬럼 스태거 | 사실상 풀사이즈에 가까운 큰 분할 키보드 |&lt;br /&gt;
| **Microdox** | 4×5 (3+엄지1) | 3 | 36 | 컬럼 스태거 | Corne보다 한 컬럼 적은 초콤팩트형 |&lt;br /&gt;
| **Skeletyl (BastardKB)** | 4×5 | 4 | 44 | 컬럼 스태거 | 골격형 디자인, 트랙볼 버전(Charybdis) 있음 |&lt;br /&gt;
| **Glove80** | 컨투어드(곡면), 매트릭스 개념 다름 | 6 | 80 | 컨투어드 | 완제품 전용, 손 모양 곡면 배열이라 매트릭스 자체가 다름 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
## 선택 기준 참고&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
- **키 개수 줄이고 싶다** → Ferris Sweep, Microdox (34~36키)&lt;br /&gt;
- **Corne 그대로 + 숫자 로우 하나** → Lily58 (지금 하시는 선택)&lt;br /&gt;
- **일반 키보드처럼 로우 스태거 감각 원함** → Sofle, Iris&lt;br /&gt;
- **엄지 클러스터를 더 크게, 인체공학 강화** → Kyria, Redox&lt;br /&gt;
- **엔코더로 볼륨/스크롤 조작 원함** → Sofle, Kyria (엔코더 브레이크아웃 있음)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
전체 지원 shield 목록은 ZMK 저장소에서 직접 확인 가능합니다: https://github.com/zmkfirmware/zmk/tree/main/app/boards/shields&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Zmk_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%AA%A9%EB%A1%9D&amp;diff=2528</id>
		<title>Zmk 키보드 목록</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Zmk_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%AA%A9%EB%A1%9D&amp;diff=2528"/>
		<updated>2026-08-10T16:31:48Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;좋습니다. ZMK 인트리(zmk/app/boards/shields)에 기본 지원되는 분할 키보드들 중 대표적인 것들을 정리했습니다. 로우 개수는 치치님 표현대로 엄지 로우도 포함해서 세었습니다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| 키보드 | 구조 (rows × cols) | 엄지키 | 총 키수 | 스태거 방식 | 특징 |&lt;br /&gt;
|---|---|---|---|---|---|&lt;br /&gt;
| **Ferris Sweep** | 3×5 | 2 | 34 | 컬럼 스태거 | 초미니, 34키 미니멀리즘 커뮤니티의 시작점 |&lt;br /&gt;
| **Corne (crkbd)** | 4×6 (3+엄지1) | 3 | 42 | 컬럼 스태거 | 가장 대중적, 부품 구하기 쉬움, OLED 지원 |&lt;br /&gt;
| **Corne-ish Zen** | 4×6 | 3 | 42 | 컬럼 스태거 | Corne과 동일 매트릭스, 초콜릿(choc) 스위치용, 케이스 완성도 높음 |&lt;br /&gt;
| **Reviung41** | - | - | 41 | 컬럼 스태거 | 유니바디(한 장짜리 PCB), 핸드와이어링 인기 |&lt;br /&gt;
| **Lily58** | 5×6 (4+엄지1) | 5 | 58 | 컬럼 스태거 | 로우 하나 더 있어서 숫자/기호 전용 로우 확보 가능 (치치님이 선택하신 것) |&lt;br /&gt;
| **Sofle** | 5×6 (4+엄지1) | 6 | 62~66 | 로우 스태거 | Lily58과 매트릭스 유사, 로터리 엔코더 기본 포함, 좀 더 넓은 피치 |&lt;br /&gt;
| **Iris** | 5×6 | 4 | 56 | 로우 스태거 | Keebio 제작, 컴팩트하면서 로우 스태거라 일반 키보드 감각과 비슷 |&lt;br /&gt;
| **Kyria** | 5×6 (4+엄지1, 바깥 컬럼은 로우 3개만) | 5 | 44 | 컬럼 스태거 | 바깥쪽 컬럼이 짧아 인체공학적, 엔코더 2개까지 지원 |&lt;br /&gt;
| **Redox** | 6×6 (5+엄지1) | 5 | 65~70 | 컬럼 스태거 | 사실상 풀사이즈에 가까운 큰 분할 키보드 |&lt;br /&gt;
| **Microdox** | 4×5 (3+엄지1) | 3 | 36 | 컬럼 스태거 | Corne보다 한 컬럼 적은 초콤팩트형 |&lt;br /&gt;
| **Skeletyl (BastardKB)** | 4×5 | 4 | 44 | 컬럼 스태거 | 골격형 디자인, 트랙볼 버전(Charybdis) 있음 |&lt;br /&gt;
| **Glove80** | 컨투어드(곡면), 매트릭스 개념 다름 | 6 | 80 | 컨투어드 | 완제품 전용, 손 모양 곡면 배열이라 매트릭스 자체가 다름 |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
## 선택 기준 참고&lt;br /&gt;
&lt;br /&gt;
- **키 개수 줄이고 싶다** → Ferris Sweep, Microdox (34~36키)&lt;br /&gt;
- **Corne 그대로 + 숫자 로우 하나** → Lily58 (지금 하시는 선택)&lt;br /&gt;
- **일반 키보드처럼 로우 스태거 감각 원함** → Sofle, Iris&lt;br /&gt;
- **엄지 클러스터를 더 크게, 인체공학 강화** → Kyria, Redox&lt;br /&gt;
- **엔코더로 볼륨/스크롤 조작 원함** → Sofle, Kyria (엔코더 브레이크아웃 있음)&lt;br /&gt;
&lt;br /&gt;
전체 지원 shield 목록은 ZMK 저장소에서 직접 확인 가능합니다: https://github.com/zmkfirmware/zmk/tree/main/app/boards/shields&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Zmk_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%AA%A9%EB%A1%9D&amp;diff=2527</id>
		<title>Zmk 키보드 목록</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Zmk_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%AA%A9%EB%A1%9D&amp;diff=2527"/>
		<updated>2026-08-10T16:31:28Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: 새 문서: 좋습니다. ZMK 인트리(zmk/app/boards/shields)에 기본 지원되는 분할 키보드들 중 대표적인 것들을 정리했습니다. 로우 개수는 치치님 표현대로 엄지 로우도 포함해서 세었습니다.  | 키보드 | 구조 (rows × cols) | 엄지키 | 총 키수 | 스태거 방식 | 특징 | |---|---|---|---|---|---| | **Ferris Sweep** | 3×5 | 2 | 34 | 컬럼 스태거 | 초미니, 34키 미니멀리즘 커뮤니티의 시작점 | | **Corne (crkbd)**...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;좋습니다. ZMK 인트리(zmk/app/boards/shields)에 기본 지원되는 분할 키보드들 중 대표적인 것들을 정리했습니다. 로우 개수는 치치님 표현대로 엄지 로우도 포함해서 세었습니다.&lt;br /&gt;
&lt;br /&gt;
| 키보드 | 구조 (rows × cols) | 엄지키 | 총 키수 | 스태거 방식 | 특징 |&lt;br /&gt;
|---|---|---|---|---|---|&lt;br /&gt;
| **Ferris Sweep** | 3×5 | 2 | 34 | 컬럼 스태거 | 초미니, 34키 미니멀리즘 커뮤니티의 시작점 |&lt;br /&gt;
| **Corne (crkbd)** | 4×6 (3+엄지1) | 3 | 42 | 컬럼 스태거 | 가장 대중적, 부품 구하기 쉬움, OLED 지원 |&lt;br /&gt;
| **Corne-ish Zen** | 4×6 | 3 | 42 | 컬럼 스태거 | Corne과 동일 매트릭스, 초콜릿(choc) 스위치용, 케이스 완성도 높음 |&lt;br /&gt;
| **Reviung41** | - | - | 41 | 컬럼 스태거 | 유니바디(한 장짜리 PCB), 핸드와이어링 인기 |&lt;br /&gt;
| **Lily58** | 5×6 (4+엄지1) | 5 | 58 | 컬럼 스태거 | 로우 하나 더 있어서 숫자/기호 전용 로우 확보 가능 (치치님이 선택하신 것) |&lt;br /&gt;
| **Sofle** | 5×6 (4+엄지1) | 6 | 62~66 | 로우 스태거 | Lily58과 매트릭스 유사, 로터리 엔코더 기본 포함, 좀 더 넓은 피치 |&lt;br /&gt;
| **Iris** | 5×6 | 4 | 56 | 로우 스태거 | Keebio 제작, 컴팩트하면서 로우 스태거라 일반 키보드 감각과 비슷 |&lt;br /&gt;
| **Kyria** | 5×6 (4+엄지1, 바깥 컬럼은 로우 3개만) | 5 | 44 | 컬럼 스태거 | 바깥쪽 컬럼이 짧아 인체공학적, 엔코더 2개까지 지원 |&lt;br /&gt;
| **Redox** | 6×6 (5+엄지1) | 5 | 65~70 | 컬럼 스태거 | 사실상 풀사이즈에 가까운 큰 분할 키보드 |&lt;br /&gt;
| **Microdox** | 4×5 (3+엄지1) | 3 | 36 | 컬럼 스태거 | Corne보다 한 컬럼 적은 초콤팩트형 |&lt;br /&gt;
| **Skeletyl (BastardKB)** | 4×5 | 4 | 44 | 컬럼 스태거 | 골격형 디자인, 트랙볼 버전(Charybdis) 있음 |&lt;br /&gt;
| **Glove80** | 컨투어드(곡면), 매트릭스 개념 다름 | 6 | 80 | 컨투어드 | 완제품 전용, 손 모양 곡면 배열이라 매트릭스 자체가 다름 |&lt;br /&gt;
&lt;br /&gt;
## 선택 기준 참고&lt;br /&gt;
&lt;br /&gt;
- **키 개수 줄이고 싶다** → Ferris Sweep, Microdox (34~36키)&lt;br /&gt;
- **Corne 그대로 + 숫자 로우 하나** → Lily58 (지금 하시는 선택)&lt;br /&gt;
- **일반 키보드처럼 로우 스태거 감각 원함** → Sofle, Iris&lt;br /&gt;
- **엄지 클러스터를 더 크게, 인체공학 강화** → Kyria, Redox&lt;br /&gt;
- **엔코더로 볼륨/스크롤 조작 원함** → Sofle, Kyria (엔코더 브레이크아웃 있음)&lt;br /&gt;
&lt;br /&gt;
전체 지원 shield 목록은 ZMK 저장소에서 직접 확인 가능합니다: https://github.com/zmkfirmware/zmk/tree/main/app/boards/shields&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Lily58_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C&amp;diff=2526</id>
		<title>Lily58 매크로 키보드</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Lily58_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C&amp;diff=2526"/>
		<updated>2026-08-10T16:27:40Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: 새 문서: = Lily58 매크로 키보드 =  좋습니다. Lily58은 이미 ZMK 공식 저장소에 shield로 포함되어 있어서, **핸드와이어링이라도 devicetree를 새로 짤 필요 없이 공식 핀맵 그대로 배선**하면 기존 `lily58` shield 설정을 그대로 쓸 수 있습니다. 이게 제일 편한 길입니다.  ## 1. 매트릭스 구조 확인  - diode-direction: **col2row** (다이오드 캐소드가 row 쪽으로) - Row: 5개, 양쪽 half 공통 핀 사용 (ni...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lily58 매크로 키보드 =&lt;br /&gt;
&lt;br /&gt;
좋습니다. Lily58은 이미 ZMK 공식 저장소에 shield로 포함되어 있어서, **핸드와이어링이라도 devicetree를 새로 짤 필요 없이 공식 핀맵 그대로 배선**하면 기존 `lily58` shield 설정을 그대로 쓸 수 있습니다. 이게 제일 편한 길입니다.&lt;br /&gt;
&lt;br /&gt;
## 1. 매트릭스 구조 확인&lt;br /&gt;
&lt;br /&gt;
- diode-direction: **col2row** (다이오드 캐소드가 row 쪽으로)&lt;br /&gt;
- Row: 5개, 양쪽 half 공통 핀 사용 (nice!nano pro_micro 넘버링 기준 5, 6, 7, 8, 9번)&lt;br /&gt;
- Column: 왼쪽 6개 + 오른쪽 6개 (엄지 클러스터 포함해서 총 columns=16으로 offset 처리됨)&lt;br /&gt;
&lt;br /&gt;
정확한 컬럼 핀 번호(왼쪽/오른쪽 각각)는 제가 외워서 알려드리면 오타 위험이 있어서, 공식 핀맵 다이어그램을 보시는 걸 추천합니다:&lt;br /&gt;
&lt;br /&gt;
👉 https://docs.typeractive.xyz/build-guides/lily58-wireless/troubleshooting&lt;br /&gt;
&lt;br /&gt;
이 페이지에 nice!nano의 실제 물리 핀(P0.xx / P1.xx)과 row/column이 정확히 매칭된 다이어그램이 있고, devicetree 소스 링크도 같이 걸려 있습니다.&lt;br /&gt;
&lt;br /&gt;
## 2. 핸드와이어링 순서&lt;br /&gt;
&lt;br /&gt;
1. **키 배치/발판 확정**: 4메인로우(6열) × 2 + 엄지 5개 × 2 구조로 배치&lt;br /&gt;
2. **다이오드 먼저 납땜**: 각 스위치 핀 하나에 다이오드 캐소드(줄무늬) 쪽을 row 방향으로 통일해서 납땜 (col2row이므로 col 라인이 다이오드 애노드에 물림)&lt;br /&gt;
3. **Row 배선**: 같은 로우에 있는 스위치들의 다이오드 캐소드를 한 줄로 묶어서 nice!nano row 핀에 연결 (5줄)&lt;br /&gt;
4. **Column 배선**: 같은 컬럼에 있는 스위치 반대쪽 핀을 한 줄로 묶어서 nice!nano column 핀에 연결 (한쪽당 6~7줄, 위 다이어그램 기준)&lt;br /&gt;
5. **half 간 연결**: TRRS 또는 직결 배선 (기존 fn5x5 만드실 때 쓰신 방식과 동일)&lt;br /&gt;
6. **테스트**: 전체 조립 전에 ZMK 공식 &amp;quot;tester&amp;quot; shield로 GPIO 핀 하나씩 눌러서 단선/합선 확인 → https://zmk.dev/docs/troubleshooting/hardware-issues 참고&lt;br /&gt;
&lt;br /&gt;
## 3. ZMK 설정 (zmk-config)&lt;br /&gt;
&lt;br /&gt;
핀을 다이어그램 그대로 배선했다면 커스텀 오버레이 필요 없이 **공식 shield 이름만 지정**하면 끝입니다.&lt;br /&gt;
&lt;br /&gt;
`config/west.yml`은 기본 zmk-config 템플릿 그대로 두시고, `build.yaml`만 이렇게:&lt;br /&gt;
&lt;br /&gt;
```yaml&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: lily58_left&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: lily58_right&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
`config/lily58.keymap` 파일 하나 만들어서 원하는 레이어(넘패드, 함수키 등 fn5x5/mynum25에서 쓰시던 구성) 넣으시면 GitHub Actions가 알아서 좌/우 uf2를 빌드해줍니다.&lt;br /&gt;
&lt;br /&gt;
## 4. 만약 배선을 다이어그램과 다르게 하고 싶다면&lt;br /&gt;
&lt;br /&gt;
핀 배치를 본인 편한 대로 바꾸고 싶으시면, 그때는 `lily58_left.overlay` / `lily58_right.overlay`만 복사해서 row-gpios/col-gpios 값을 본인 배선에 맞게 수정하면 됩니다 (matrix-transform, keymap은 그대로 재사용 가능).&lt;br /&gt;
&lt;br /&gt;
핸드와이어링하면서 다이오드 방향이나 로우/컬럼 배선에서 막히는 부분 생기면 사진이나 구체적 배선 상황 알려주세요, 같이 디버깅해드리겠습니다.&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2525</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2525"/>
		<updated>2026-08-10T15:44:18Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
boards\shields\Kconfig.shield&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
boards\shields\Kconfig.defconfig&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
/build.yml&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== config/west.yml ,  zephyr/module.yml 은 수정하지 않고 템플릿 그대로 사용한다. ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 펌웨어 컴파일 ==&lt;br /&gt;
&lt;br /&gt;
=== github 에 등록하기 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
git add .&lt;br /&gt;
git commit -m &amp;quot;Add fn25key macropad shield&amp;quot;&lt;br /&gt;
git push origin main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== github 에서 컴파일 작업 ===&lt;br /&gt;
# GitHub 저장소 페이지 → Actions 탭&lt;br /&gt;
# push 직후 워크플로우가 자동 실행됨 (초록 체크 = 성공, 빨간 X = 실패)&lt;br /&gt;
# 실패 시 로그 클릭해서 에러 확인 (대부분 devicetree 문법 오류나 핀 중복 사용)&lt;br /&gt;
&lt;br /&gt;
=== .uf2 파일 다운로드 ===&lt;br /&gt;
# 성공한 워크플로우 실행 클릭&lt;br /&gt;
# 하단 Artifacts 섹션에서 firmware 다운로드 (zip 안에 fn25key.uf2 등이 들어있음)&lt;br /&gt;
&lt;br /&gt;
=== 보드에 플래싱 ===&lt;br /&gt;
# Super Mini nRF52840 리셋 버튼 2번 빠르게 눌러 부트로더 모드 진입 → PC에 USB 드라이브(XIAO-SENSE 등)로 인식됨&lt;br /&gt;
# 다운로드한 .uf2 파일을 그 드라이브에 드래그 앤 드롭&lt;br /&gt;
# 자동으로 리부트되며 새 펌웨어로 동작 시작&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  로컬 빌드(west)로 하고 싶다면 ==&lt;br /&gt;
* 클라우드 빌드가 막힐 경우를 위해 로컬 빌드도 가능합니다.&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
pip install west --break-system-packages&lt;br /&gt;
west init -l config&lt;br /&gt;
west update&lt;br /&gt;
west zephyr-export&lt;br /&gt;
west build -p -b seeeduino_xiao_ble -- -DSHIELD=fn5x5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 결과물은 build/zephyr/zmk.uf2에 생성됩니다. &lt;br /&gt;
** Zephyr SDK(nRF 툴체인) 설치가 선행되어야 해서, 처음이라면 GitHub Actions 방식 추천.&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2524</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2524"/>
		<updated>2026-08-10T15:42:19Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 납땜 순서 요약 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
boards\shields\Kconfig.shield&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
boards\shields\Kconfig.defconfig&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
/build.yml&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== config/west.yml ,  zephyr/module.yml 은 수정하지 않고 템플릿 그대로 사용한다. ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 펌웨어 컴파일 ==&lt;br /&gt;
&lt;br /&gt;
=== github 에 등록하기 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
git add .&lt;br /&gt;
git commit -m &amp;quot;Add fn25key macropad shield&amp;quot;&lt;br /&gt;
git push origin main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== github 에서 컴파일 작업 ===&lt;br /&gt;
# GitHub 저장소 페이지 → Actions 탭&lt;br /&gt;
# push 직후 워크플로우가 자동 실행됨 (초록 체크 = 성공, 빨간 X = 실패)&lt;br /&gt;
# 실패 시 로그 클릭해서 에러 확인 (대부분 devicetree 문법 오류나 핀 중복 사용)&lt;br /&gt;
&lt;br /&gt;
=== .uf2 파일 다운로드 ===&lt;br /&gt;
# 성공한 워크플로우 실행 클릭&lt;br /&gt;
# 하단 Artifacts 섹션에서 firmware 다운로드 (zip 안에 fn25key.uf2 등이 들어있음)&lt;br /&gt;
&lt;br /&gt;
=== 보드에 플래싱 ===&lt;br /&gt;
# Super Mini nRF52840 리셋 버튼 2번 빠르게 눌러 부트로더 모드 진입 → PC에 USB 드라이브(XIAO-SENSE 등)로 인식됨&lt;br /&gt;
# 다운로드한 .uf2 파일을 그 드라이브에 드래그 앤 드롭&lt;br /&gt;
# 자동으로 리부트되며 새 펌웨어로 동작 시작&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2523</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2523"/>
		<updated>2026-08-10T15:36:43Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 6️⃣ `build.yml` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
boards\shields\Kconfig.shield&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
boards\shields\Kconfig.defconfig&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
/build.yml&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== config/west.yml ,  zephyr/module.yml 은 수정하지 않고 템플릿 그대로 사용한다. ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2522</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2522"/>
		<updated>2026-08-10T15:36:18Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 6️⃣ `build.yml` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
boards\shields\Kconfig.shield&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
boards\shields\Kconfig.defconfig&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
/build.yml&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* config/west.yml ,  zephyr/module.yml 은 수정하지 않고 템플릿 그대로 사용한다.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2521</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2521"/>
		<updated>2026-08-10T15:34:55Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 6️⃣ `build.yml` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
boards\shields\Kconfig.shield&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
boards\shields\Kconfig.defconfig&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
/build.yml&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2520</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2520"/>
		<updated>2026-08-10T15:34:33Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 5️⃣ `Kconfig.defconfig` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
boards\shields\Kconfig.shield&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
boards\shields\Kconfig.defconfig&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2519</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2519"/>
		<updated>2026-08-10T15:34:20Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 4️⃣ `Kconfig.shield` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
boards\shields\Kconfig.shield&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2518</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2518"/>
		<updated>2026-08-10T15:33:59Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 3️⃣ `fn25key.conf` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
boards\shields\fn25key.conf&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2517</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2517"/>
		<updated>2026-08-10T15:33:42Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 2️⃣ `fn25key.keymap` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
boards\shields\fn25key.keymap&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2516</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2516"/>
		<updated>2026-08-10T15:33:08Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 6️⃣ `.github/workflows/build.yml` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `build.yml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# This file generates the GitHub Actions matrix.&lt;br /&gt;
# For simple board + shield combinations, add them to the top level board and&lt;br /&gt;
# shield arrays, for more control, add individual board + shield combinations&lt;br /&gt;
# to the `include` property. You can also use the `cmake-args` property to&lt;br /&gt;
# pass flags to the build command, `snippet` to add a Zephyr snippet, and&lt;br /&gt;
# `artifact-name` to assign a name to distinguish build outputs from each other:&lt;br /&gt;
#&lt;br /&gt;
# board: [ &amp;quot;nice_nano&amp;quot; ]&lt;br /&gt;
# shield: [ &amp;quot;corne_left&amp;quot;, &amp;quot;corne_right&amp;quot; ]&lt;br /&gt;
# include:&lt;br /&gt;
#   - board: bdn9_rev2&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: reviung41&lt;br /&gt;
#   - board: nice_nano&lt;br /&gt;
#     shield: corne_left&lt;br /&gt;
#     snippet: studio-rpc-usb-uart&lt;br /&gt;
#     cmake-args: -DCONFIG_ZMK_STUDIO=y&lt;br /&gt;
#     artifact-name: corne_left_with_studio&lt;br /&gt;
#&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: nice_nano_v2&lt;br /&gt;
    shield: fn25key&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2515</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2515"/>
		<updated>2026-08-10T15:32:18Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 5️⃣ `build.yaml` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `Kconfig.defconfig` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
if SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;FN5x5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif # SHIELD_FN5X5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `.github/workflows/build.yml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
yaml&lt;br /&gt;
name: Build ZMK Firmware&lt;br /&gt;
&lt;br /&gt;
on:&lt;br /&gt;
  push:&lt;br /&gt;
  pull_request:&lt;br /&gt;
  workflow_dispatch:&lt;br /&gt;
&lt;br /&gt;
jobs:&lt;br /&gt;
  build:&lt;br /&gt;
    uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2514</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2514"/>
		<updated>2026-08-10T15:31:34Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 4️⃣ `Kconfig.shield` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
config SHIELD_FN5X5&lt;br /&gt;
    def_bool $(shields_list_contains,fn5x5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 5️⃣ `build.yaml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
yaml&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: supermini_nrf52840&lt;br /&gt;
    shield: macro25&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `.github/workflows/build.yml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
yaml&lt;br /&gt;
name: Build ZMK Firmware&lt;br /&gt;
&lt;br /&gt;
on:&lt;br /&gt;
  push:&lt;br /&gt;
  pull_request:&lt;br /&gt;
  workflow_dispatch:&lt;br /&gt;
&lt;br /&gt;
jobs:&lt;br /&gt;
  build:&lt;br /&gt;
    uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2513</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2513"/>
		<updated>2026-08-10T15:31:01Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 3️⃣ `macro25.conf` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `fn25key.conf` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kconfig&lt;br /&gt;
config SHIELD_MACRO25&lt;br /&gt;
    def_bool $(shields_list_contains,macro25)&lt;br /&gt;
&lt;br /&gt;
if SHIELD_MACRO25&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;Macro25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 5️⃣ `build.yaml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
yaml&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: supermini_nrf52840&lt;br /&gt;
    shield: macro25&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `.github/workflows/build.yml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
yaml&lt;br /&gt;
name: Build ZMK Firmware&lt;br /&gt;
&lt;br /&gt;
on:&lt;br /&gt;
  push:&lt;br /&gt;
  pull_request:&lt;br /&gt;
  workflow_dispatch:&lt;br /&gt;
&lt;br /&gt;
jobs:&lt;br /&gt;
  build:&lt;br /&gt;
    uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2512</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2512"/>
		<updated>2026-08-10T15:30:55Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 2️⃣ `macro25.keymap` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `fn25key.keymap` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `macro25.conf` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kconfig&lt;br /&gt;
config SHIELD_MACRO25&lt;br /&gt;
    def_bool $(shields_list_contains,macro25)&lt;br /&gt;
&lt;br /&gt;
if SHIELD_MACRO25&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;Macro25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 5️⃣ `build.yaml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
yaml&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: supermini_nrf52840&lt;br /&gt;
    shield: macro25&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `.github/workflows/build.yml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
yaml&lt;br /&gt;
name: Build ZMK Firmware&lt;br /&gt;
&lt;br /&gt;
on:&lt;br /&gt;
  push:&lt;br /&gt;
  pull_request:&lt;br /&gt;
  workflow_dispatch:&lt;br /&gt;
&lt;br /&gt;
jobs:&lt;br /&gt;
  build:&lt;br /&gt;
    uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2511</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2511"/>
		<updated>2026-08-10T15:30:33Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 1️⃣ `macro25.overlay` */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `fn25key.overlay` ===&lt;br /&gt;
boards\shields\fn25key.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `macro25.keymap` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `macro25.conf` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kconfig&lt;br /&gt;
config SHIELD_MACRO25&lt;br /&gt;
    def_bool $(shields_list_contains,macro25)&lt;br /&gt;
&lt;br /&gt;
if SHIELD_MACRO25&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;Macro25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 5️⃣ `build.yaml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
yaml&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: supermini_nrf52840&lt;br /&gt;
    shield: macro25&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `.github/workflows/build.yml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
yaml&lt;br /&gt;
name: Build ZMK Firmware&lt;br /&gt;
&lt;br /&gt;
on:&lt;br /&gt;
  push:&lt;br /&gt;
  pull_request:&lt;br /&gt;
  workflow_dispatch:&lt;br /&gt;
&lt;br /&gt;
jobs:&lt;br /&gt;
  build:&lt;br /&gt;
    uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2510</id>
		<title>5x5 매크로 키보드 만들기</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=5x5_%EB%A7%A4%ED%81%AC%EB%A1%9C_%ED%82%A4%EB%B3%B4%EB%93%9C_%EB%A7%8C%EB%93%A4%EA%B8%B0&amp;diff=2510"/>
		<updated>2026-08-10T15:30:05Z</updated>

		<summary type="html">&lt;p&gt;Devcafe: /* 📁 폴더 구조 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 5x5 매크로 키보드 만들기 (3D 프린터 ,NRF52840칩, ZMK) =&lt;br /&gt;
* 준비물 &lt;br /&gt;
# SuperMini NRF52840 &lt;br /&gt;
# 5×5 보드판(3d 프린팅)&lt;br /&gt;
# 키캡 , 기계식 키보드 체리식 키 클론(알리익프레스)&lt;br /&gt;
# 저항 다이오드&lt;br /&gt;
&lt;br /&gt;
== gpio 핀 할당 (5 Row + 5 Col = 10핀) ==&lt;br /&gt;
SuperMini 핀이 넉넉하게 남아서 여유 있게 배치 가능합니다.&lt;br /&gt;
* 납땜 핀 번호 (보드 실크스크린 기준)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | nRF52840 핀 |&lt;br /&gt;
|------|---------|------------|&lt;br /&gt;
| Row 0 | **011** | P0.11 |&lt;br /&gt;
| Row 1 | **013** | P0.13 |&lt;br /&gt;
| Row 2 | **015** | P0.15 |&lt;br /&gt;
| Row 3 | **017** | P0.17 |&lt;br /&gt;
| Row 4 | **020** | P0.20 |&lt;br /&gt;
| Col 0 | **022** | P0.22 |&lt;br /&gt;
| Col 1 | **024** | P0.24 |&lt;br /&gt;
| Col 2 | **100** | P1.00 |&lt;br /&gt;
| Col 3 | **011** | P1.11 |&lt;br /&gt;
| Col 4 | **113** | P1.13 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ⚠️ Row/Col 핀이 보드 라벨과 혼동되지 않도록 아래 다이어그램 참고&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== 보드 핀 다이어그램 ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
 &lt;br /&gt;
         USB-C&lt;br /&gt;
    ┌─────────────┐&lt;br /&gt;
B-  │ o         o │ B+&lt;br /&gt;
006 │ o         o │ RAW&lt;br /&gt;
008 │ o         o │ GND&lt;br /&gt;
GND │ o         o │ RST&lt;br /&gt;
020 │ o [Row 4] o │ VCC&lt;br /&gt;
022 │ o [Col 0] o │ 031&lt;br /&gt;
024 │ o [Col 1] o │ 029&lt;br /&gt;
100 │ o [Col 2] o │ 002&lt;br /&gt;
011 │ o [Row 0] o │ 115&lt;br /&gt;
104 │ o         o │ 113 [Col 4]&lt;br /&gt;
106 │ o         o │ 111 [Col 3]&lt;br /&gt;
009 │ o         o │ 010&lt;br /&gt;
008 │ o         o │ 106&lt;br /&gt;
    └─────────────┘&lt;br /&gt;
&lt;br /&gt;
※ Row 1~3 핀: 별도 연결 필요&lt;br /&gt;
Row 1 → 013 (P0.13)&lt;br /&gt;
Row 2 → 015 (P0.15)  &lt;br /&gt;
Row 3 → 017 (P0.17)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
=== 보드 핀 다이어그램 ===&lt;br /&gt;
* SuperMini NRF52840&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;        &lt;br /&gt;
         		USB-C&lt;br /&gt;
    		┌─────────────┐&lt;br /&gt;
		B-  │ o         o │ B+&lt;br /&gt;
[Row 0] 006 │ o         o │ RAW&lt;br /&gt;
[Row 1]	008 │ o         o │ GND&lt;br /&gt;
		GND │ o         o │ RST&lt;br /&gt;
		GND	│ o 	    o │ VCC(3.5V)&lt;br /&gt;
[Row 1]	017 │ o 	    o │ 031&lt;br /&gt;
[Col 0]	020 │ o 	    o │ 029&lt;br /&gt;
[Col 1]	022 │ o 	    o │ 002&lt;br /&gt;
[Col 2]	024 │ o 	    o │ 115&lt;br /&gt;
[Col 3]	100 │ o 	    o │ 113&lt;br /&gt;
[Col 4]	011 │ o         o │ 111 &lt;br /&gt;
		104 │ o         o │ 010 [Row 3]&lt;br /&gt;
		106 │ o         o │ 009 [Row 2]&lt;br /&gt;
			└─────────────┘&lt;br /&gt;
&amp;lt;뒷면&amp;gt;&lt;br /&gt;
   o o o&lt;br /&gt;
107 102 101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ✅ 확정 핀 할당 (SuperMini 실제 사용 가능 핀 기준) ==&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
| 용도 | 보드 라벨 | GPIO |&lt;br /&gt;
|------|---------|------|&lt;br /&gt;
| **Row 0** | 006 | P0.06 |&lt;br /&gt;
| **Row 1** | 008 | P0.08 |&lt;br /&gt;
| **Row 2** | 009 | P0.09 |&lt;br /&gt;
| **Row 3** | 010 | P0.10 |&lt;br /&gt;
| **Row 4** | 017 | P0.17 |&lt;br /&gt;
| **Col 0** | 020 | P0.20 |&lt;br /&gt;
| **Col 1** | 022 | P0.22 |&lt;br /&gt;
| **Col 2** | 024 | P0.24 |&lt;br /&gt;
| **Col 3** | 100 | P1.00 |&lt;br /&gt;
| **Col 4** | 011 | P0.11 |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 배선도 ==&lt;br /&gt;
&lt;br /&gt;
* 스위치 매트릭스 (다이오드 col2row 방향)&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
        Col0  Col1  Col2  Col3  Col4&lt;br /&gt;
        (020) (022) (024) (100) (011)&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row0(006)─┼─[K00]┼─[K01]┼─[K02]┼─[K03]┼─[K04]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row1(008)─┼─[K10]┼─[K11]┼─[K12]┼─[K13]┼─[K14]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row2(009)─┼─[K20]┼─[K21]┼─[K22]┼─[K23]┼─[K24]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row3(010)─┼─[K30]┼─[K31]┼─[K32]┼─[K33]┼─[K34]&lt;br /&gt;
          │     │     │     │     │&lt;br /&gt;
Row4(017)─┼─[K40]┼─[K41]┼─[K42]┼─[K43]┼─[K44]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 각 스위치에 다이오드(1N4148) 직렬 연결&lt;br /&gt;
* 캐소드(띠) → Col 방향&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== ZMK 펌웨어 파일 구성 ==&lt;br /&gt;
*. ZMK 공식 템플릿으로 저장소 생성&lt;br /&gt;
** https://github.com/zmkfirmware/unified-zmk-config-template 접속 (또는 zmk-config-split 템플릿)&lt;br /&gt;
** Use this template → Create a new repository 클릭&lt;br /&gt;
** 저장소 이름 지정 (예: zmk-config-fn5x5), Public/Private 선택 후 생성&lt;br /&gt;
* 이 템플릿에는 config/west.yml(ZMK 소스를 가져오는 설정)과 .github/workflows/build.yml(빌드 워크플로우)이 이미 포함되어 있어서, 여기에 우리가 만든 shield 파일만 얹으면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 📁 폴더 구조 ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zmk-config/&lt;br /&gt;
├── config/&lt;br /&gt;
│    └── west.yml&lt;br /&gt;
├── boards/shields/fn25key/&lt;br /&gt;
│   ├── fn25key.conf&lt;br /&gt;
│   ├── fn25key.keymap&lt;br /&gt;
│   ├── fn25key.overlay&lt;br /&gt;
│   ├── Kconfig.defconfig&lt;br /&gt;
│   └── Kconfig.shield&lt;br /&gt;
├── zephyr/&lt;br /&gt;
│    └── module.yml&lt;br /&gt;
└── build.yaml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 1️⃣ `macro25.overlay` ===&lt;br /&gt;
boards\shields\macro25.overlay&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 - 5x5 macropad (F-keys / Numbers / Arrows)&lt;br /&gt;
 * Super Mini nRF52840 대상&lt;br /&gt;
 *&lt;br /&gt;
 * ★★★ row-gpios / col-gpios 는 실제 배선한 핀으로 반드시 수정하세요 ★★★&lt;br /&gt;
 * Super Mini nRF52840 보드는 판매처마다 실크스크린 핀 번호가 다를 수 있어&lt;br /&gt;
 * 여기서는 nRF52840 SoC의 실제 GPIO 포트/핀(P0.xx, P1.xx) 기준으로 작성했습니다.&lt;br /&gt;
 * 보드 실크스크린에 적힌 핀이 SoC의 몇 번 GPIO인지 판매처 핀맵 문서를 참고해서&lt;br /&gt;
 * 아래 표를 갈아끼우면 됩니다.&lt;br /&gt;
 *&lt;br /&gt;
 * 예시 배선 (직접 수정):&lt;br /&gt;
 *  ROW0~4 : P0.31, P0.29, P0.02, P0.03, P0.28   (5핀)&lt;br /&gt;
 *  COL0~4 : P0.04, P0.05, P1.11, P1.15, P0.20   (5핀)&lt;br /&gt;
 *  diode  : row -&amp;gt; col 방향 (diode-direction = &amp;quot;col2row&amp;quot;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/matrix_transform.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/gpio/gpio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    chosen {&lt;br /&gt;
        zmk,kscan = &amp;amp;kscan0;&lt;br /&gt;
        zmk,matrix_transform = &amp;amp;default_transform;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    default_transform: keymap_transform_0 {&lt;br /&gt;
        compatible = &amp;quot;zmk,matrix-transform&amp;quot;;&lt;br /&gt;
        columns = &amp;lt;5&amp;gt;;&lt;br /&gt;
        rows = &amp;lt;5&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
        map = &amp;lt;&lt;br /&gt;
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)&lt;br /&gt;
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4)&lt;br /&gt;
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4)&lt;br /&gt;
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4)&lt;br /&gt;
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4)&lt;br /&gt;
        &amp;gt;;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    kscan0: kscan {&lt;br /&gt;
        compatible = &amp;quot;zmk,kscan-gpio-matrix&amp;quot;;&lt;br /&gt;
        diode-direction = &amp;quot;col2row&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // ROW 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        row-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 17 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
&lt;br /&gt;
        // COL 0~4 : 실제 배선한 핀 번호로 수정&lt;br /&gt;
        col-gpios&lt;br /&gt;
            = &amp;lt;&amp;amp;gpio0 20  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 22  GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 24 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio1 00 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            , &amp;lt;&amp;amp;gpio0 11 GPIO_ACTIVE_HIGH&amp;gt;&lt;br /&gt;
            ;&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2️⃣ `macro25.keymap` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * FN5x5 keymap&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 0 (기본)&lt;br /&gt;
 *  F1    F2    F3    F4    F5&lt;br /&gt;
 *  F6    F7    F8    F9    F10&lt;br /&gt;
 *  1     2     3     4     5&lt;br /&gt;
 *  6     7     8     9     0&lt;br /&gt;
 *  MO1   LEFT  UP    DOWN  RIGHT&lt;br /&gt;
 *&lt;br /&gt;
 * Layer 1 (좌하단 MO1 누르고 있을 때)&lt;br /&gt;
 *  F11   F12   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   ___   ___   ___   ___&lt;br /&gt;
 *  ___   HOME  PG_UP PG_DN END&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;behaviors.dtsi&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/keys.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dt-bindings/zmk/bt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/ {&lt;br /&gt;
    keymap {&lt;br /&gt;
        compatible = &amp;quot;zmk,keymap&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        default_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F1    &amp;amp;kp F2    &amp;amp;kp F3    &amp;amp;kp F4    &amp;amp;kp F5&lt;br /&gt;
&amp;amp;kp F6    &amp;amp;kp F7    &amp;amp;kp F8    &amp;amp;kp F9    &amp;amp;kp F10&lt;br /&gt;
&amp;amp;kp N1    &amp;amp;kp N2    &amp;amp;kp N3    &amp;amp;kp N4    &amp;amp;kp N5&lt;br /&gt;
&amp;amp;kp N6    &amp;amp;kp N7    &amp;amp;kp N8    &amp;amp;kp N9    &amp;amp;kp N0&lt;br /&gt;
&amp;amp;mo 1     &amp;amp;kp LEFT  &amp;amp;kp UP    &amp;amp;kp DOWN  &amp;amp;kp RIGHT&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        extra_layer {&lt;br /&gt;
            bindings = &amp;lt;&lt;br /&gt;
&amp;amp;kp F11   &amp;amp;kp F12   &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans    &amp;amp;trans&lt;br /&gt;
&amp;amp;trans    &amp;amp;kp HOME  &amp;amp;kp PG_UP &amp;amp;kp PG_DN &amp;amp;kp END&lt;br /&gt;
            &amp;gt;;&lt;br /&gt;
        };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3️⃣ `macro25.conf` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# FN5x5 기본 설정&lt;br /&gt;
&lt;br /&gt;
# 매크로패드 단독 동작 (좌/우 분리 아님)&lt;br /&gt;
CONFIG_ZMK_SPLIT=n&lt;br /&gt;
&lt;br /&gt;
# 배터리 게이지가 없는 Super Mini 보드라면 아래 옵션을 n 으로&lt;br /&gt;
CONFIG_ZMK_BATTERY_REPORTING=n&lt;br /&gt;
&lt;br /&gt;
# USB 유선 사용 위주라면 BLE 끄고 유선만 써도 됨 (필요시 주석 해제)&lt;br /&gt;
# CONFIG_ZMK_BLE=n&lt;br /&gt;
&lt;br /&gt;
# 사용하지 않을 때 자동 절전 (BLE 무선 사용 시)&lt;br /&gt;
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000&lt;br /&gt;
CONFIG_ZMK_IDLE_TIMEOUT=30000&lt;br /&gt;
&lt;br /&gt;
# 마지막 눌린 키가 남아있는 것 방지 (매트릭스 안정화)&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=5&lt;br /&gt;
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 4️⃣ `Kconfig.shield` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kconfig&lt;br /&gt;
config SHIELD_MACRO25&lt;br /&gt;
    def_bool $(shields_list_contains,macro25)&lt;br /&gt;
&lt;br /&gt;
if SHIELD_MACRO25&lt;br /&gt;
&lt;br /&gt;
config ZMK_KEYBOARD_NAME&lt;br /&gt;
    default &amp;quot;Macro25&amp;quot;&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 5️⃣ `build.yaml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
yaml&lt;br /&gt;
---&lt;br /&gt;
include:&lt;br /&gt;
  - board: supermini_nrf52840&lt;br /&gt;
    shield: macro25&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== 6️⃣ `.github/workflows/build.yml` ===&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
yaml&lt;br /&gt;
name: Build ZMK Firmware&lt;br /&gt;
&lt;br /&gt;
on:&lt;br /&gt;
  push:&lt;br /&gt;
  pull_request:&lt;br /&gt;
  workflow_dispatch:&lt;br /&gt;
&lt;br /&gt;
jobs:&lt;br /&gt;
  build:&lt;br /&gt;
    uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@main&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 납땜 순서 요약 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. 다이오드(1N4148) 25개 → 각 스위치 위치에 납땜&lt;br /&gt;
   캐소드(띠쪽) → Col 방향&lt;br /&gt;
&lt;br /&gt;
2. 스위치 25개 → PCB 또는 수납땜&lt;br /&gt;
&lt;br /&gt;
3. Row 배선 (수평)&lt;br /&gt;
   Row0: 006핀 → 1행 스위치 5개 연결&lt;br /&gt;
   Row1: 008핀 → 2행 스위치 5개 연결&lt;br /&gt;
   Row2: 009핀 → 3행 스위치 5개 연결&lt;br /&gt;
   Row3: 010핀 → 4행 스위치 5개 연결&lt;br /&gt;
   Row4: 017핀 → 5행 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
4. Col 배선 (수직)&lt;br /&gt;
   Col0: 020핀 → 1열 스위치 5개 연결&lt;br /&gt;
   Col1: 022핀 → 2열 스위치 5개 연결&lt;br /&gt;
   Col2: 024핀 → 3열 스위치 5개 연결&lt;br /&gt;
   Col3: 100핀 → 4열 스위치 5개 연결&lt;br /&gt;
   Col4: 011핀 → 5열 스위치 5개 연결&lt;br /&gt;
&lt;br /&gt;
5. SuperMini USB-C → PC 연결 후 펌웨어 플래시&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 키 배치 커스터마이징 팁 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| 위치 | 추천 매크로 |&lt;br /&gt;
|------|-----------|&lt;br /&gt;
| R0C0 | `SELECT * FROM` |&lt;br /&gt;
| R0C1 | `COMMIT` |&lt;br /&gt;
| R0C2 | `ROLLBACK` |&lt;br /&gt;
| R0C3 | `EXPLAIN PLAN FOR` |&lt;br /&gt;
| R0C4 | `ALTER SESSION SET` |&lt;br /&gt;
| R1C0 | `print()` |&lt;br /&gt;
| R1C1 | `def func():` |&lt;br /&gt;
| R1C2 | `import cx_Oracle` |&lt;br /&gt;
| R4C3 | Layer 1 (Oracle 심화) |&lt;br /&gt;
| R4C4 | Layer 2 (BT/시스템) |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>