<h1>๋งคํฌ๋ก ํคํจ๋</h1>
<p>์๋ฆฌ์ต์คํ๋ ์ค์์ 5์ฒ์๋ง ์ฃผ๋ฉด ์๋์ ๊ฐ์ ๋งคํฌ๋ก ํคํจ๋๋ฅผ ์ด ์ ์๋ค.</p>
<img src="https://blog.atj.sh/post-attachments/v/0194e4fa-5717-7cd0-9c14-bc9d94000b76"
width="100%"
/>
<p><a href="https://ko.aliexpress.com/item/1005005419376722.html?spm=a2g0o.order_list.order_list_main.5.528e140fFFwWmV&gatewayAdapt=glo2kor">์๋ฆฌ์ต์คํ๋ ์ค ์ํ ํ์ด์ง</a> - ์ด๊ฒ ์ฌ๋๋ง๋ค ๋ค๋ฅด๊ฒ ๊ฐ๊ฒฉ์ด ํ์๋๋ ๊ฒ ๊ฐ๋ค. ์ํฌ๋ฆฟ ํญ์์ ํ์ธํด๋ณด๋ ์ต์ ๊ฐ๊ฐ 2,860์์ด๋ผ๊ณ ํ์๋๋ ์ค์ด๋ค.</p>
<p>
์ค์ ๋ก ๋ฐ์์ ์จ๋ณด๋ฉด ์๊ฐ๋ณด๋ค ์ ์๋ํ๋ค. ์ค์์น๋ ๊ต์ฒด ๊ฐ๋ฅํ๊ณ ๋
ธ๋ธ๋ ๋ถ๋๋ฌ์์ ๋์์ง ์๋ค. ๋๋ ์ด ํคํจ๋์ ๋ฏธ๋์ด ์ปจํธ๋กค ํค๋ฅผ ํ ๋นํ์ฌ ์ฌ์ฉ ์ค์ด๋ค. 3๊ฐ์ ํค์ ์ด์ ๊ณก, ์ฌ์/์ผ์์ ์ง, ๋ค์ ๊ณก ๊ธฐ๋ฅ์ ํ ๋นํ๊ณ , ๋
ธ๋ธ์ ์๋ ์กฐ์ ๊ธฐ๋ฅ์, ๋
ธ๋ธ๊ฐ ํด๋ฆญ๋ ๋๋ ์์๊ฑฐ๋๋๋ก ๊ธฐ๋ฅ์ ํ ๋นํ๋๋ฐ ์ ๋ง ์ ์๋ํ๋ค.
</p>
<p>๋ฌธ์ ๋ ๋งคํฌ๋ก ํคํจ๋๋ฅผ ์ค์ ํ๋ ๋ฐ์์ ์จ๋ค. </p>
<ul>
<li>
๋งคํฌ๋ก ํคํจ๋๋ฅผ ์ฒ์ ๋ฐ๊ณ ์ค์ ํ๋ ค๋ฉด ์ค์ ํ๋ก๊ทธ๋จ์ ๋ค์ด๋ฐ์ ์ค์ ์ ์งํํด์ผ ํ๋๋ฐ, ์ด ์ค์ ํ๋ก๊ทธ๋จ์ด EXE๋ก๋ง ์ ๊ณต๋๋ค. ์ฆ, ๋ฆฌ๋
์ค ํ๊ฒฝ ๋๋ ๋งฅ๋ถ์์๋ ์ค์ ์ด ๋ถ๊ฐํ๊ณ ๋ฌด์กฐ๊ฑด ์๋์ฐ PC์์ ์งํํด์ผ ํ๋ค.
</li>
<li>
์ค์ ํ๋ก๊ทธ๋จ ์์ฒด๋ ์ข ์์ฌ์ค๋ฝ๋ค. ๋ฐ์ด๋ฌ์ค๊ฐ ๋ค์ด์์ง ์์์ง ํ์ ํ ์ ์๋ค.
</li>
<li>
๋ณต์กํ ๋งคํฌ๋ก๋ฅผ ์ค์ ํ๋ค๋๊ฐ ํ๋ ๊ฑด ๊ธฐ๋ํ ์ ์๋ค.
</li>
</ul>
<p>์ด๋ฐ ์ ์ ํด๊ฒฐํ๋ ค๊ณ ๋๋ ์ด ํคํจ๋์ ์ปค์คํ
ํ์จ์ด๋ฅผ ์ค์นํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค.</p>
<h1>ํคํจ๋ ํ๋์จ์ด ๋ถ์</h1>
<p>์ด ํคํจ๋๋ ์๋ฆฌ์ต์คํ๋ ์ค์์ ๊ฝค ์ธ๊ธฐ์๋ ์ํ์ธ ํธ์ด๋ค. ์๋ง ๋ฎ์ ๊ฐ๊ฒฉ ๋๋ฌธ์ผ ๊ฒ์ด๋ค. ์ด๋ฏธ ํด์ธ์ ๋ง์ ์ ์ ๋ค์ด ์ฌ์ฉํ๊ณ ์์๊ณ , ์ด๋ฃจ์ด์ง ์ฐ๊ตฌ๋ ์๋ ํธ์ด์๋ค.</p>
<p>์ง์ ์์๋ธ ์ ๋ณด๋ ์๋์ ๊ฐ๋ค.</p>
<ul>
<li>
์นฉ: CH552G
</li>
<li>
๋ถํธ๋ก๋ ํ์จ์ด: 2.40
</li>
<li>
์ฌ์ฉ๋ ํ
<ul>
<li>LED (NeoPixel) - P3.4</li>
<li>์ฒซ๋ฒ์งธ ํค (๋
ธ๋ธ์์ ๊ฐ์ฅ ๋จผ ํค) - P1.1</li>
<li>๋๋ฒ์งธ ํค - P1.7</li>
<li>์ธ๋ฒ์งธ ํค - P1.6</li>
<li>๋
ธ๋ธ ํด๋ฆญ - P3.3</li>
<li>๋
ธ๋ธ A - P3.1</li>
<li>๋
ธ๋ธ B - P3.0</li>
</ul>
</li>
</ul>
<h1>
ํคํจ๋ ์ํํธ์จ์ด ๋ถ์
</h1>
<p>์ฌ์ค ๋ง์ด ์งํํ ๋ฐ๋ ์๋ค. ํคํจ๋์ ๋ด์ฅ๋ ํ์จ์ด๋ฅผ ์ฝ์ด์ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ ํด๋ณด๋ ค๊ณ ํ๋๋ฐ, ํ์ฌ ์ค์น๋ ๋ถํธ๋ก๋ ํ์จ์ด๋ก๋ ์ด ๋ฐฉ๋ฒ์ด ๋ถ๊ฐํ ๊ฒ ๊ฐ๋ค. ๋ํ ์ค์ ํ๋ก๊ทธ๋จ์ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋งํด๋ณด๋ ๊ฒ๋ ๊ณ ๋ คํ์๋ค. ํ๋ก๊ทธ๋จ์ด .Net ํ๋ ์์ํฌ ๊ธฐ๋ฐ ์๋์ฐ ์ฑ์ผ๋ก ๋ณด์๋๋ฐ, ๋๋ฒ๊ทธ ์ ๋ณด๋ ๊ฐ์ด ๋ฐฐํฌ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์๋ค. ํ์ง๋ง ๋ .Net ํ๋ ์์ํฌ ๊ฐ๋ฐ์ ์งํํด๋ณธ ์ ์ด ์์์ด์ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ ํ ์ ์์๋ค. </p>
<p>์ค์ ํ๋ก๊ทธ๋จ์ ์ฌ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ์ฌ๋์ด ์ด๋ฏธ ์งํํ ๋ฐ ์๋ค. ๋ค์ ๋งํฌ์์ ํ์ธ ๊ฐ๋ฅํ๋ค. <a href="https://www.reddit.com/r/MechanicalKeyboards/comments/17j27ic/i_wrote_a_new_app_for_chinese_macro_keypads/">reddit.com - I wrote a new app for chinese macro keypads</a></p>
<p>๋๋ ์ด ์ค์ ํ๋ก๊ทธ๋จ์ ์ฌ๊ตฌํํ๋ ๋์ , ํคํจ๋์ ํ์จ์ด๋ฅผ ์ฒ์๋ถํฐ ์๋ก ์์ฑํ๊ณ ์ ๋ง์๋จน์๋ค.</p>
<h1>
์ปค์คํ
ํ์จ์ด
</h1>
<p>ํ์จ์ด๋ ์ฅ์น์ ๋ด์ฅ๋๋ ํ๋ก๊ทธ๋จ์ ๋ปํ๋ค. ์ด ๋งคํฌ๋ก ํคํจ๋์ ๊ฒฝ์ฐ์, ๊ฐ ํค/๋
ธ๋ธ๊ฐ ๋๋ฆฌ๊ณ ์์ง์์ ๋ ์ด๋ป๊ฒ ์๋ํ ์ง๋ฅผ ์ ์ํ๋ ๊ฒ์ด ํ์จ์ด์ด์. </p>
<p>์ฐ์ ์ด๋ฏธ ๊ตฌํ๋ ์ปค์คํ
ํ์จ์ด๊ฐ ์๋์ง ์กฐ์ฌํ๋ค. ๋คํํ๋ biemster๋ผ๋ ์ฌ๋์ด ์ง์ ์ปค์คํ
ํ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ฉฐ ๋จ๊ธด ๊ธฐ๋ก์ ํ์ธํ ์ ์์๋ค. <a href="https://hackaday.io/project/189914-rgb-macropad-custom-firmware">Hackaday - RGB macropad custom firmware
</a> ๋๋ "์ด๊ฑฐ๋ค" ์ถ์๋ค.</p>
<p><a href="https://github.com/biemster/3keys_1knob">GitHub ๋ฆฌํฌ์งํ ๋ฆฌ</a>์์ ๊ทธ ์ฌ๋์ด ์์ฑํ ์ปค์คํ
ํ์จ์ด ์์ค์ฝ๋๋ฅผ ํ์ธํ ์ ์์๋ค. ๋๋ ์ด ์ฝ๋๋ก ๋ด ๋ฒ์ ์ ์ปค์คํ
ํ์จ์ด๋ฅผ ์์ฑํ๊ธฐ๋ก ํ๋ค.</p>
<h2>
ํด์ฒด์ธ
</h2>
<p>๊ทธ ํ์จ์ด๋ฅผ ๋ฐ๋ก ํคํจ๋์ ์
๋ก๋ํด๋ณด๋ ค๊ณ ํ๋๋ฐ, ์๋ฌด๋๋ ๋ด ์ปดํจํฐ์ ์ด๋ฐ ์๋ฒ ๋๋ ๊ฐ๋ฐ ํ๊ฒฝ์ด ๊ตฌ์ถ๋์ด ์์ง ์๋ค ๋ณด๋ ํด์ฒด์ธ์ ๊ตฌ์ฑํด์ผ ํ๋ค.</p>
<p>์น๊ฐ๋ฐ์์ธ ๋๋ก์จ๋ ์ฒ์ ๋ณด๋ ํด๋ค์ ์ ํ๋ค. macOS ํ๊ฒฝ์์ ์๊ตฌ๋๋ ํด์ฒด์ธ์ ์๋์ ๊ฐ๋ค.</p>
<ul>
<li>Python 3 - ๊ทธ๋ฅ ์ ๋ฐ์ ์ผ๋ก ํ์.</li>
<li><a href="https://formulae.brew.sh/formula/binutils">binutils</a> - C๋ก ์์ฑ๋ ์ปค์คํ
ํ์จ์ด๋ฅผ ๋น๋ํ๊ธฐ ์ํด ํ์ํ๋ค.</li>
<li><a href="https://pypi.org/project/ch55xtool/">ch55xtool</a> - ํคํจ๋์ EEPROM์ ์ปดํจํฐ์์ ์ฝ๊ณ ์ฐ๋ ๋ฐ ํ์ํ๋ค.</li>
<li><a href="https://formulae.brew.sh/formula/libusb">libusb</a> - USB์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ํฌํจํ๋ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ์ปค์คํ
ํ์จ์ด๋ฅผ ๋น๋ํ๊ธฐ ์ํด ํ์ํ๋ค.</li>
<li>EEPROM ๋ฐ์ดํฐ ์์ ์ ์ํด์๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ํธ์ง ํด์ด ํ์ํ๋ค. ๋๋ VSCode ํ์ฅ ํ๋ก๊ทธ๋จ์ธ <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.hexeditor">Hex Editor</a>๋ฅผ ์ฌ์ฉํ๋ค.</li>
</ul>
<h2>๋น๋ & ์
๋ก๋</h2>
<p>์ฐ์ ํคํจ๋๋ฅผ ๋ถํธ๋ก๋์ ์ง์
์์ผ์ผ ํ์จ์ด ์
๋ก๋๊ฐ ๊ฐ๋ฅํ๋ค. ํคํจ๋์ ๋์ฌ๋ฅผ ํผ ํ, ๋ทํ์ ์ ํญ&์บํผ์ํฐ๊ฐ ๋ฐฐ์น๋ ๋ถ๋ถ์ ๋ณด๋ฉด ๋น ํจ๋ 2๊ฐ๊ฐ ์์ ๊ฒ์ด๋ค. ์ด ํจ๋ 2๊ฐ๋ฅผ ํด๋ฆฝ ๊ฐ์ ๊ฒ์ผ๋ก ์ฐ๊ฒฐ์ํจ ํ ์ปดํจํฐ์ ์ฐ๊ฒฐํ๋ฉด ๋ถํธ๋ก๋์ ์ง์
๋ ๊ฒ์ด๋ค. </p>
<p>๊ทธ๋ฆฌ๊ณ ์ปค์คํ
ํ์จ์ด๋ฅผ ๋น๋ํด์ผ ํ๋ค. <a href="https://github.com/atjsh/3keys_1knob/">๋ด๊ฐ ์์ฑํ ์ปค์คํ
ํ์จ์ด</a> ์์ค์ฝ๋๋ฅผ ํด๋ก ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ด์ฌ ๊ฐ์ํ๊ฒฝ์ ํ๋ ์์ฑํ ํ, <a href="https://pypi.org/project/pyusb/">pyusb</a> ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ค.</p>
<p>์ปค์คํ
ํ์จ์ด ๋น๋๋ `make bin`, ์
๋ก๋๋ `make build`๋ก ์งํํ๋ค. ๋ง์ฝ libusb, binutils, pyusb ๋ชจ๋ ์ค๋น๋ ์ํ๋ผ๋ฉด ์๋ฌด ๋ฌธ์ ์์ด ์
๋ก๋๊น์ง ์งํ๋ ๊ฒ์ด๋ค.</p>
<h2>๊ธฐ๋ฅ</h2>
<p>์นฉ์ ๋ด์ฅ๋ EEPROM์ ๊ฐ ํค/๋
ธ๋ธ์ ๊ธฐ๋ฅ์ ์ ์ฅํ๋๋ก ํ๋ค. ๊ฐ ํค/๋
ธ๋ธ ์ ๋ณด๋ 3๋ฐ์ดํธ์ ๊ฑธ์ณ ์ ์ฅ๋๋๋ฐ, ์ฒซ ๋ฐ์ดํธ๋ Modifier ํค๊ฐ, ๋๋ฒ์งธ ํค๋ ๋ฏธ๋์ด ํค ์ฌ๋ถ, ์ธ๋ฒ์งธ ํค๋ ์ค์ ์
๋ ฅํ ํค์ ์ฝ๋์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด 6๊ฐ์ ์
๋ ฅ์ด ์กด์ฌํ๋ฏ๋ก 18๋ฐ์ดํธ์ EEPROM์ด ์ฌ์ฉ๋๋ ์
์ด๋ค.</p>
<p>EEPROM ํธ์ง์ ch55xtool๋ฅผ ์ฌ์ฉํ์ฌ ์งํํ ์ ์๋ค. `ch55xtool -d` ๋ช
๋ น์ด๋ก EEPROM์ ๋ฎ์ด์ฐ๊ณ , `ch55xtool -g` ๋ช
๋ น์ด๋ก EEPROM์ ์ฝ์ด์ฌ ์ ์๋ค. ์ฝ์ด์จ EEPROM์ VSCode Hex Editor ํ์ฅ ํ๋ก๊ทธ๋จ์ ํตํด ํ ์ ์๋ค.</p>
<p>3๊ฐ์ ํค ์์ ์ฅ์ฐฉ๋ RGB LED๋ ํ๋ก๊ทธ๋จํ ์ ์์๋๋ฐ, LED๊ฐ ๋๋ฌด ๋ฐ์์ ๋ ๊ทธ๋ฅ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋์ ๋๋ง ๋น๋๊ฒ ํ๊ณ , ๊ทธ ํ์๋ ๊บผ์ ธ ์๋๋ก ์์ฑํ๋ค.</p>
<h2>๋ ๋จ์ ๊ฒ</h2>
<p>์ฐ์ GUI๋ก ์ค์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ณ ์ถ๋ค. EEPROM์ ์
๋ก๋ํ๋ ๊ฒ๋ง ๊ตฌํํ๋ฉด ๋ ๊ฒ์ด๋ค.</p>
<p>๊ทธ๋ฆฌ๊ณ ์ด ์ปค์คํ
ํ์จ์ด๋ฅผ ์ค์นํ๋ ๊ณผ์ ์ ๋ ์ฝ๊ฒ ๋ง๋ค๊ณ ์ถ๋ค. ์ง๊ธ์ ํ์จ์ด๋ฅผ ์ง์ ๋น๋ํ๊ณ ์
๋ก๋๊น์ง CLI๋ฅผ ํตํด ์งํํด์ผ ํ๋๋ฐ, ์๊ตฌ๋๋ ํด์ฒด์ธ์ด ๋๋ฌด ๋ณต์กํ๋ค๋ ์๊ฐ์ด ๋ ๋ค. ์ด ์ปค์คํ
ํ์จ์ด ์
๋ก๋ ์์
๋ํ GUI ์ค์ ํ๋ก๊ทธ๋จ์ ๋ด์ฅ๋์ด ์์ผ๋ฉด ์ต๊ณ ์ผ ๊ฒ์ด๋ค.</p>
<p>๋ง์ฝ ๊ทธ๋ ๊ฒ๊น์ง ๋๋ค๋ฉด, ์ด ์๋ฆฌ์ต์คํ๋ ์ค์ฐ ๋งคํฌ๋ก ํคํจ๋๋ฅผ ๊ตฌ๋งคํ๋ ์ฌ๋๋ค์ ๋ ์์ ๋กญ๊ณ ํธ๋ฆฌํ๊ฒ ๊ธฐ๋ฅ์ ์ปค์คํฐ๋ง์ด์งํ๊ณ ์ฌ์ฉํ ์ ์์ ๊ฒ์ด๋ค.</p>
<h1>
์ดํ
</h1>
<p>๋๋ฌด ์ ๋ ดํ ์ ํ์ด๋ผ ๋ ํธํ ๋ง์์ผ๋ก ์ปค์คํ
ํ์จ์ด ์ ์์ ๋์ ํ ์ ์์๋ ๊ฒ ๊ฐ๋ค. ์ฅ์น๊ฐ ๋ ๋น์๋ค๋ฉด ๋ ์ด๋ ค์ ์ ๊ฒ์ด๋ค (์๊น์์). ์๋ฒ ๋๋ ํ๋ก๊ทธ๋จ์ ๋น๋ํด๋ณธ ๊ฒ๋ ์ฒ์์ด๋ผ ์ ์ ํ๋ค. ์ง๊ธ์ ์ด ์ ๋์์ ๋ง์น์ง๋ง ๋ ๋ฐ์ ์ํจ ํ์ ๊ธฐ๋ฅ์ด ๋ ์ถ๊ฐ๋ ์ปค์คํ
ํ์จ์ด๋ฅผ ๊ณต์ ํ ์ ์์ผ๋ฉด ์ข๊ฒ ๋ค.</p>