<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>데브구일 Blog</title>
    <link>https://dev91.tistory.com/</link>
    <description>지금 이 순간 또한
나의 경험이다</description>
    <language>ko</language>
    <pubDate>Tue, 11 Aug 2026 17:35:36 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>데브구일</managingEditor>
    <image>
      <title>데브구일 Blog</title>
      <url>https://tistory1.daumcdn.net/tistory/5328508/attach/1242079d6351458889307cd0fbca20b5</url>
      <link>https://dev91.tistory.com</link>
    </image>
    <item>
      <title>[DIY] 매크로 패드 제작기 외전 (무선이 될까?)</title>
      <link>https://dev91.tistory.com/78</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 데브구일입니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만든 키보드 가지고 조금 사용을 해봤습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임할때도 써보고... 일할때도 써봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 제가 사용하는게 대부분 무선 제품이라서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유선 제품을 쓰려고 하니 조금 불편하더라구요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 어떻게 할까 하다가...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다이소에서 파는 보조 배터리를 보고 이걸 끼우고 사용 할 수 있을까??&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 생각이 들더라구요?? ㅋㅋㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vthzM/dJMcaja9V0M/Ji7SkjK3rckIXhIfEjr9Q1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vthzM/dJMcaja9V0M/Ji7SkjK3rckIXhIfEjr9Q1/img.jpg&quot; data-alt=&quot;다이소 보조 배터리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vthzM/dJMcaja9V0M/Ji7SkjK3rckIXhIfEjr9Q1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvthzM%2FdJMcaja9V0M%2FJi7SkjK3rckIXhIfEjr9Q1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;450&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;다이소 보조 배터리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 한번 구매해서 연결을 해봤습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따로 의도한거 전혀 아니였는데, 연결하고 보니까&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 케이스를 딱히 수정하지 않아도 연결하는데 문제가 없겠더라구요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGCMIY/dJMcafzWBTY/klD3HRQ1zubxqxYPncy0Hk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGCMIY/dJMcafzWBTY/klD3HRQ1zubxqxYPncy0Hk/img.jpg&quot; data-alt=&quot;보조 배터리가... 연결이 된다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGCMIY/dJMcafzWBTY/klD3HRQ1zubxqxYPncy0Hk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGCMIY%2FdJMcafzWBTY%2FklD3HRQ1zubxqxYPncy0Hk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;450&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;보조 배터리가... 연결이 된다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 이걸 연결하면 더이상 연결할 수 있는 유선 라인은 없어서...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무선으로 밖에 쓸 수가 없습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 펌웨어를 조금 수정해봤어요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정할때는 esp_hid_device라는 예제를 참고해서 코드를 수정했어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;803&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HPToQ/dJMcadWqaRc/J6JQPvHkTWlXZ4bIdm39vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HPToQ/dJMcadWqaRc/J6JQPvHkTWlXZ4bIdm39vK/img.png&quot; data-alt=&quot;기본으로 제공되는 예제 코드를 적극 활용하자&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HPToQ/dJMcadWqaRc/J6JQPvHkTWlXZ4bIdm39vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHPToQ%2FdJMcadWqaRc%2FJ6JQPvHkTWlXZ4bIdm39vK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;521&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;803&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기본으로 제공되는 예제 코드를 적극 활용하자&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 무선 기능은 완전 처음부터 다 짠 게 아니라,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ESP-IDF 예제를 기반으로 가져와서 현재 프로젝트에 맞게 이식&lt;/b&gt;한 형태입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 가져온 부분은 아래입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BLE HID 초기화 흐름 (&lt;code&gt;esp_hid_gap_init&lt;/code&gt;, &lt;code&gt;esp_hidd_dev_init&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;BLE Advertising 시작/재시작 처리&lt;/li&gt;
&lt;li&gt;BLE 보안/인증 이후 HID 전송 준비 상태를 여는 구조&lt;/li&gt;
&lt;li&gt;HID report map 구성 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 그대로 쓰지 않고, 프로젝트에 맞게 아래를 수정했습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;select_flag&lt;/code&gt; 기반 USB/BLE 전송 분기 추가&lt;/li&gt;
&lt;li&gt;&lt;code&gt;D_BUTTON&lt;/code&gt; 부팅 모드 선택 로직 추가&lt;/li&gt;
&lt;li&gt;&lt;code&gt;esp_hid_gap.c/.h&lt;/code&gt;를 &lt;code&gt;main&lt;/code&gt; 폴더로 직접 이관해서 로컬 소스로 관리&lt;/li&gt;
&lt;li&gt;현재 ESP-IDF 환경에 맞게 BLE 광고 API 사용 정리&lt;/li&gt;
&lt;li&gt;로터리/버튼 공통 입력 로직과 BLE 전송을 자연스럽게 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약하면, 예제의 &quot;BLE 기본 뼈대&quot;를 가져오고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 매크로패드에 맞는 &quot;입력/모드/안정화 로직&quot;을 덧붙인 형태라고 보시면됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 유선과 무선을 모두 사용 할 수 있게하려고 별도의 플래그를 사용해서 기능을 나눴어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 입력 처리 코드는 잘 동작하고 있었기 때문에, 입력부를 갈아엎지 않고 전송부만 분기했습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;select_flag == false&lt;/code&gt; -&amp;gt; USB HID 전송&lt;/li&gt;
&lt;li&gt;&lt;code&gt;select_flag == true&lt;/code&gt; -&amp;gt; BLE HID 전송&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 분리해두면 &lt;code&gt;a_btn()&lt;/code&gt;, &lt;code&gt;b_btn()&lt;/code&gt;, &lt;code&gt;rotary_encoder()&lt;/code&gt; 같은 함수들은 거의 건드리지 않아도 됩니다!&lt;/p&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;bool select_flag = false;

static void key_code_send(uint8_t keycode)
{
    if (select_flag) {
        ble_send_key_code(keycode);
        return;
    }
    // USB keyboard report
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 여기서 부팅이 될때, 선택을 할 수 있도록하려고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부팅 시 &lt;code&gt;D_BUTTON&lt;/code&gt;을 누르고 있으면 BLE로 올라오게 만들었습니다. (active-low라서 0이면 눌림입니다)&lt;/p&gt;
&lt;pre class=&quot;lisp&quot;&gt;&lt;code&gt;vTaskDelay(pdMS_TO_TICKS(20));
select_flag = (gpio_get_level(D_BUTTON) == 0);
ESP_LOGI(TAG, &quot;Boot mode select by D button: %s&quot;, select_flag ? &quot;BLE&quot; : &quot;USB&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;code&gt;ble_hid_task_start_up()&lt;/code&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BLE 인증 완료 시 호출되는 함수입니다.&lt;br /&gt;여기서 &lt;code&gt;report_ready = true&lt;/code&gt;로 바꿔서 &quot;이제 리포트 보내도 된다&quot; 상태를 열어줍니다.&lt;/p&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;void ble_hid_task_start_up(void)
{
    s_ble_hid.report_ready = true;
    ESP_LOGI(TAG, &quot;BLE HID AUTH READY&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;code&gt;ble_hid_ready()&lt;/code&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BLE 전송 가능 상태 체크 함수입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시작됨(&lt;code&gt;started&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;연결됨(&lt;code&gt;connected&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;인증/구독 완료(&lt;code&gt;report_ready&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;핸들 유효(&lt;code&gt;hid_dev != NULL&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 조건이 모두 true일 때만 BLE 리포트를 보냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;code&gt;ble_send_key_code(uint8_t keycode)&lt;/code&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BLE 키보드 입력 전송 함수입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;press report 전송&lt;/li&gt;
&lt;li&gt;짧게 대기&lt;/li&gt;
&lt;li&gt;release report 전송&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;USB의 &lt;code&gt;tud_hid_keyboard_report&lt;/code&gt; 흐름과 비슷하게 동작하도록 맞췄습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779763534652&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void ble_send_key_code(uint8_t keycode)
{
#if CONFIG_BT_BLE_ENABLED &amp;amp;&amp;amp; CONFIG_BT_BLUEDROID_ENABLED
    if (!ble_hid_ready()) {
        return;
    }

    uint8_t report[8] = {0};
    report[2] = keycode;
    esp_err_t err = esp_hidd_dev_input_set(s_ble_hid.hid_dev, 0, BLE_KEYBOARD_REPORT_ID, report, sizeof(report));
    if (err != ESP_OK) {
        ESP_LOGW(TAG, &quot;BLE key report send failed: %s&quot;, esp_err_to_name(err));
        return;
    }
    vTaskDelay(pdMS_TO_TICKS(8));

    uint8_t release_report[8] = {0};
    err = esp_hidd_dev_input_set(s_ble_hid.hid_dev, 0, BLE_KEYBOARD_REPORT_ID, release_report, sizeof(release_report));
    if (err != ESP_OK) {
        ESP_LOGW(TAG, &quot;BLE key release send failed: %s&quot;, esp_err_to_name(err));
        return;
    }
    vTaskDelay(pdMS_TO_TICKS(4));
#endif
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;code&gt;send_mouse_wheel(int8_t clicks)&lt;/code&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로터리 휠 전송 함수입니다.&lt;br /&gt;이 함수가 &lt;code&gt;select_flag&lt;/code&gt;를 보고 USB/BLE를 알아서 분기합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 로터리 엔코더 쪽은 &quot;휠 몇 칸 움직였는지&quot;만 계산하면 되고, 실제 전송 경로는 공통 함수가 처리합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779763710951&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void send_mouse_wheel(int8_t clicks)
{
    if (clicks == 0) {
        return;
    }

    if (select_flag) {
#if CONFIG_BT_BLE_ENABLED &amp;amp;&amp;amp; CONFIG_BT_BLUEDROID_ENABLED
        if (!ble_hid_ready()) {
            return;
        }
        uint8_t report[5] = {0, 0, 0, (uint8_t)clicks, 0};
        esp_err_t err = esp_hidd_dev_input_set(s_ble_hid.hid_dev, 0, BLE_MOUSE_REPORT_ID, report, sizeof(report));
        if (err != ESP_OK) {
            ESP_LOGW(TAG, &quot;BLE wheel report send failed: %s&quot;, esp_err_to_name(err));
        }
#endif
        return;
    }

    if (!tud_mounted()) {
        return;
    }

    while (!tud_hid_ready()) {
        vTaskDelay(pdMS_TO_TICKS(1));
    }
    tud_hid_mouse_report(HID_ITF_PROTOCOL_MOUSE, 0x00, 0, 0, clicks, 0);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데, 여기서 처음엔 BLE 연결만 되면 바로 입력될 줄 알았는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그게 아니더라구요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그에 이런 메시지가 계속 나왔습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;Indicate Not Enabled&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GATT_INSUF_AUTHENTICATION&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 연결은 되었지만 인증/구독이 완전히 끝나지 않아서 리포트 전송이 막히던 상황이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &lt;code&gt;report_ready&lt;/code&gt; 플래그를 두고, 준비 완료 전에는 전송 자체를 막는 방식으로 해결했습니다~!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분 적용하고 나서 BLE 입력 안정성이 확실히 올라갔습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로터리도 무선에서 동일하게 동작하도록 연결했습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회전 -&amp;gt; &lt;code&gt;send_mouse_wheel()&lt;/code&gt; 호출&lt;/li&gt;
&lt;li&gt;로터리 버튼 -&amp;gt; &lt;code&gt;key_code_send()&lt;/code&gt; 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 워치독(&lt;code&gt;task_wdt&lt;/code&gt;)도 같이 잡아줬습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;rotary_task&lt;/code&gt; 주기 완화 (&lt;code&gt;1ms&lt;/code&gt; -&amp;gt; &lt;code&gt;5ms&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;태스크 우선순위 낮춤&lt;/li&gt;
&lt;li&gt;듀얼코어에서는 CPU1 고정&lt;/li&gt;
&lt;li&gt;메인 루프에서도 짧게 &lt;code&gt;vTaskDelay&lt;/code&gt; 넣어서 시스템 태스크에 CPU 양보&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해서 코드를 업로드하고~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원을 켤때 F4(D 버튼)키를 누른채로 리셋 버튼을 누르려고했는데..!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;막상 보니까 보조 배터리에 가려져서 못 누르겠더라구요 ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 F4키를 누른채 보조 배터리를 꽂으니!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kRXtE/dJMcajbcSHp/AIuPUJij8LR24qkm8fXXAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kRXtE/dJMcajbcSHp/AIuPUJij8LR24qkm8fXXAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kRXtE/dJMcajbcSHp/AIuPUJij8LR24qkm8fXXAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkRXtE%2FdJMcajbcSHp%2FAIuPUJij8LR24qkm8fXXAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;301&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;453&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디바이스 추가가 뜹니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저기에 나오는 핀 번호는 로그에 뜨는데!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캡처를 못했어요 ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 상태에서 연결을 누르시면 연결이 됩니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kPvbd/dJMcagTcpLJ/PaCPAYmowYLPDwfpVqpq51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kPvbd/dJMcagTcpLJ/PaCPAYmowYLPDwfpVqpq51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kPvbd/dJMcagTcpLJ/PaCPAYmowYLPDwfpVqpq51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkPvbd%2FdJMcagTcpLJ%2FPaCPAYmowYLPDwfpVqpq51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;267&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따란~ 블루투스 페어링이 가능해집니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 연결이 되었고 잘 동작하는걸 확인했습니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모장에 이것저것 눌러보면!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력이 됩니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTX8qK/dJMcaciTXxI/rTeqkp7NHb4kujAc8jKfR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTX8qK/dJMcaciTXxI/rTeqkp7NHb4kujAc8jKfR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTX8qK/dJMcaciTXxI/rTeqkp7NHb4kujAc8jKfR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTX8qK%2FdJMcaciTXxI%2FrTeqkp7NHb4kujAc8jKfR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;630&quot; height=&quot;284&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쩌다보니 유선인걸 무선까지 해보았어요 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 깃 링크는 무선이 적용된 코드입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고하시면 되겠습니다!&lt;/p&gt;
&lt;figure id=&quot;og_1779953979064&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - Dev-91/Macro_Pad_BLE&quot; data-og-description=&quot;Contribute to Dev-91/Macro_Pad_BLE development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Dev-91/Macro_Pad_BLE&quot; data-og-url=&quot;https://github.com/Dev-91/Macro_Pad_BLE&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fPXkN/dJMb9iINxl7/QUrWolt1fGX7tOkKs3G4o1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/crxYtD/dJMb89ykgYT/AzwqcIVu3EB4JaCMNYkuAK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Dev-91/Macro_Pad_BLE&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Dev-91/Macro_Pad_BLE&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fPXkN/dJMb9iINxl7/QUrWolt1fGX7tOkKs3G4o1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/crxYtD/dJMb89ykgYT/AzwqcIVu3EB4JaCMNYkuAK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - Dev-91/Macro_Pad_BLE&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to Dev-91/Macro_Pad_BLE development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 프로젝트를 하나 끝내보았는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 하면서 느낀게,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초보자가 보기엔 코드가 조금 복잡할 수 있으니... 이런 저런 설명을하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대한 쉽게 풀어내려고 했지만 생각처럼 잘 안되었던거 같아요 ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음엔 좀 더 쉬운 방향으로 구현을 해볼까 싶고...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;차라리 아두이노 같은 걸 이용하는게, 혹시나 보시는 분들은 더 편하실 것 같기도해서!!!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음엔 아두이노를 코드와 라이브러리를 최대한 활용해서 구현해보도록 하겠습니다!!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCBWay 감사합니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이 포스팅은 PCBWay의 지원을 받아 제작하게 되었다는 점 알려드립니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 한 번 감사드립니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8lE5l/dJMcaaFsSRn/Kpg2MAMHhdTC8gzhy8b2Gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8lE5l/dJMcaaFsSRn/Kpg2MAMHhdTC8gzhy8b2Gk/img.png&quot; data-alt=&quot;PCBWay 감사합니다 :D&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8lE5l/dJMcaaFsSRn/Kpg2MAMHhdTC8gzhy8b2Gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8lE5l%2FdJMcaaFsSRn%2FKpg2MAMHhdTC8gzhy8b2Gk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;425&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PCBWay 감사합니다 :D&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DIY</category>
      <category>DIY</category>
      <category>ESP32</category>
      <category>MacroPad</category>
      <category>pcb</category>
      <author>데브구일</author>
      <guid isPermaLink="true">https://dev91.tistory.com/78</guid>
      <comments>https://dev91.tistory.com/78#entry78comment</comments>
      <pubDate>Fri, 8 May 2026 17:46:37 +0900</pubDate>
    </item>
    <item>
      <title>[DIY] 매크로 패드 제작기 7편 (로터리 펌웨어)</title>
      <link>https://dev91.tistory.com/77</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요! 데브구일입니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 로터리 차례입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 핀을 잘 못 연결했다고 했잖아요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 저는 납땜도 수정을 해야합니다. ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 처럼 저는 납땜을 수정했어요! ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;앞부분에 나온 포스팅은 모두 수정사항이 적용된 상태입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;744&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMiYD4/dJMcaaZcwDq/3QS5R6JCzkuz1UiI5jBtw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMiYD4/dJMcaaZcwDq/3QS5R6JCzkuz1UiI5jBtw1/img.png&quot; data-alt=&quot;ㅠㅠ 수정했어요&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMiYD4/dJMcaaZcwDq/3QS5R6JCzkuz1UiI5jBtw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMiYD4%2FdJMcaaZcwDq%2F3QS5R6JCzkuz1UiI5jBtw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;403&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;744&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ㅠㅠ 수정했어요&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 핀을 수정했고!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 코드를 조금 더 손봐줄게요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저번 포스팅에 있던 코드에 추가로 로터리 코드가 추가될 건데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로터리 엔코더는 휠 스크롤 기능을 구현 할 생각이에요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드를 추가하시면 로터리의 입력되는 포지션에 따라 휠이 동작하게됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775983828917&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void rotary_encoder(void)
{
    // Poll-driven rotary encoder reader with mouse wheel scroll
    static bool initialized = false;
    static int last_ab = 0;           // last encoded state of A/B
    static int32_t position = 0;      // accumulated steps
    static int32_t last_position = 0; // last reported position
    static bool last_sw = true;       // pull-up active
    static uint32_t last_sw_ms = 0;   // debounce timer

    if (!initialized) {
        const gpio_config_t cfg = {
            .pin_bit_mask = BIT64(ROTARY_PIN_A) | BIT64(ROTARY_PIN_B) | BIT64(ROTARY_PIN_SW),
            .mode = GPIO_MODE_INPUT,
            /* input-only pins don't have internal pull‑ups, but setting the flag
               makes no harm and keeps code consistent if you later move to a
               normal GPIO.  External 10 k pull‑ups shown in your schematics are
               left in place. */
            .pull_up_en = false,
            .pull_down_en = false,
            .intr_type = GPIO_INTR_DISABLE,
        };
        ESP_ERROR_CHECK(gpio_config(&amp;amp;cfg));
        last_ab = (gpio_get_level(ROTARY_PIN_A) &amp;lt;&amp;lt; 1) | gpio_get_level(ROTARY_PIN_B);
        last_sw = gpio_get_level(ROTARY_PIN_SW);
        initialized = true;
    }

    /* current state */
    const int a = gpio_get_level(ROTARY_PIN_A);
    const int b = gpio_get_level(ROTARY_PIN_B);
    const int ab = (a &amp;lt;&amp;lt; 1) | b;

    static int stable_count = 0;
    if (ab != last_ab) {
        stable_count++;
    } else {
        stable_count = 0;
    }

    if (stable_count &amp;gt;= 3) {                       // adjust threshold as needed
        const bool cw = (last_ab == 0 &amp;amp;&amp;amp; ab == 1) || (last_ab == 1 &amp;amp;&amp;amp; ab == 3) ||
                        (last_ab == 3 &amp;amp;&amp;amp; ab == 2) || (last_ab == 2 &amp;amp;&amp;amp; ab == 0);
        const bool ccw = (last_ab == 0 &amp;amp;&amp;amp; ab == 2) || (last_ab == 2 &amp;amp;&amp;amp; ab == 3) ||
                         (last_ab == 3 &amp;amp;&amp;amp; ab == 1) || (last_ab == 1 &amp;amp;&amp;amp; ab == 0);

        if (cw) {
            position++;
        } else if (ccw) {
            position--;
        }
        last_ab = ab;
        stable_count = 0;
    }

    // Send mouse wheel scroll only every 4 steps (1 full rotation)
    int32_t position_delta = position - last_position;
    
    if (position_delta &amp;gt;= 4) {
        // Every 4 steps = 1 scroll down
        int8_t clicks = (int8_t)(position_delta / 4);
        tud_hid_mouse_report(HID_ITF_PROTOCOL_MOUSE, 0x00, 0, 0, clicks, 0);
        // ESP_LOGI(TAG, &quot;Mouse wheel scroll DOWN: %d (delta=%ld)&quot;, clicks, position_delta);
        last_position += clicks * 4;
    } else if (position_delta &amp;lt;= -4) {
        // Every 4 steps = 1 scroll up
        int8_t clicks = (int8_t)(position_delta / 4);
        tud_hid_mouse_report(HID_ITF_PROTOCOL_MOUSE, 0x00, 0, 0, clicks, 0);
        // ESP_LOGI(TAG, &quot;Mouse wheel scroll UP: %d (delta=%ld)&quot;, clicks, position_delta);
        last_position += clicks * 4;
    }

    // Button with debounce (active-low)
    const bool sw_now = gpio_get_level(ROTARY_PIN_SW);
    const uint32_t now_ms = (uint32_t)(xTaskGetTickCount() * portTICK_PERIOD_MS);
    if (last_sw &amp;amp;&amp;amp; !sw_now) {
        // falling edge
        if (now_ms - last_sw_ms &amp;gt; 150) { // ~150 ms debounce
            // ESP_LOGI(TAG, &quot;Rotary SW pressed (pos=%ld)&quot;, (long)position);
            last_sw_ms = now_ms;
        }
    }
    last_sw = sw_now;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 이제 별도의 태스크를 만들어서 잘 동작하도록 할건데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;태스크는 아래와 같은 코드로 작성해줍니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 delay가 조금 특이하게 되어있는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 watchdog이 동작할 틈을 주기위해서 이렇게 해놨어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 빠르게 동작하면 watchdog 오류가 발생하거든요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775983915251&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void rotary_task(void *arg)
{
    (void)arg;
    
    int loop_count = 0;
    for (;;) {
        rotary_encoder();
        
        loop_count++;
        if (loop_count % 2000 == 0) {
            // Every 1000 iterations, yield to allow IDLE tasks to run
            vTaskDelay(pdMS_TO_TICKS(10));
        } else {
            vTaskDelay(pdMS_TO_TICKS(1)); // poll interval
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 이 태스크를 메인에서 생성해주면되는데요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;메인에서 실행할때는 별도의 태스크가 실행되도록 구성해야합니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 추가해주시면 별도의 태스크로 동작하게 됩니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 상태로 업로드를 해볼게요!&lt;/p&gt;
&lt;pre id=&quot;code_1775984042931&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    // Start rotary encoder task
    if (xTaskCreate(rotary_task, &quot;rotary_enc&quot;, 2048*2, NULL, tskIDLE_PRIORITY + 2, NULL) != pdPASS) {
        ESP_LOGE(TAG, &quot;Failed to create rotary task&quot;);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 코드는 제가 깃헙에 올려둘게요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예제 코드에 그대로 입력하긴 했지만 참고하시고,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여러분이 원하시는 대로 구성하시는데 도움이 되실 것 같습니다! :D&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;깃은 아래 링크를 참고하시기 바랍니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Dev-91/tusb_hid&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Dev-91/tusb_hid&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1775984683505&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - Dev-91/tusb_hid: macro_pad 예제입니다!&quot; data-og-description=&quot;macro_pad 예제입니다! Contribute to Dev-91/tusb_hid development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Dev-91/tusb_hid&quot; data-og-url=&quot;https://github.com/Dev-91/tusb_hid&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cUDwte/dJMb88691oO/MQ9WWEnvS11dZTxqs61Mc1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dd9peC/dJMb84XZVQY/2KxsIW69a8Q2VYvHCdTvi0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Dev-91/tusb_hid&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Dev-91/tusb_hid&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cUDwte/dJMb88691oO/MQ9WWEnvS11dZTxqs61Mc1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dd9peC/dJMb84XZVQY/2KxsIW69a8Q2VYvHCdTvi0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - Dev-91/tusb_hid: macro_pad 예제입니다!&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;macro_pad 예제입니다! Contribute to Dev-91/tusb_hid development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음엔 사용을 좀 해보고!!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용기 올려보도록 하겠습니다 ~_~&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;감사합니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csbwSz/dJMcab4BL8A/H6ZSrvFkcJV86yCNNuqeoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csbwSz/dJMcab4BL8A/H6ZSrvFkcJV86yCNNuqeoK/img.png&quot; data-alt=&quot;PCBWay 감사합니다 :D&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csbwSz/dJMcab4BL8A/H6ZSrvFkcJV86yCNNuqeoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsbwSz%2FdJMcab4BL8A%2FH6ZSrvFkcJV86yCNNuqeoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;425&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PCBWay 감사합니다 :D&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고&amp;nbsp;이 포스팅은&amp;nbsp;PCBWay의 지원을 받아 제작하게 되었다는 점 알려드립니다 :D&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PCBWay에 감사드립니다!&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DIY</category>
      <category>DIY</category>
      <category>ESP32</category>
      <category>MacroPad</category>
      <category>pcb</category>
      <category>PCBWay</category>
      <author>데브구일</author>
      <guid isPermaLink="true">https://dev91.tistory.com/77</guid>
      <comments>https://dev91.tistory.com/77#entry77comment</comments>
      <pubDate>Sun, 12 Apr 2026 19:59:51 +0900</pubDate>
    </item>
    <item>
      <title>[DIY] 매크로 패드 제작기 6편 (키입력 펌웨어)</title>
      <link>https://dev91.tistory.com/76</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요! 데브구일입니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 펌웨어 차례입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러가지 방법을 사용 할 수 있을텐데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선은 먼저 유선을 먼저 적용시켜 볼게요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 먼저 ESP-IDF 설치가 되어있어야합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 이전에 설치했던 포스팅을 참고해주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 간단한 예제를 실행해보겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제를 기반으로해서 수정할 생각입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESP-IDF에서 new project를 실행하시고, hid를 검색하시면!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같은 프로젝트가 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 tusb_hid가 유선 hid 관련 예제이니 참고하시구요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸로 먼저 실행해보겠습니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2784&quot; data-origin-height=&quot;1824&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/evilDj/dJMb99MJLYX/TU4aaZEKKUCqqa6TICQZQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/evilDj/dJMb99MJLYX/TU4aaZEKKUCqqa6TICQZQk/img.png&quot; data-alt=&quot;예제를 적극적으로 사용하자!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/evilDj/dJMb99MJLYX/TU4aaZEKKUCqqa6TICQZQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FevilDj%2FdJMb99MJLYX%2FTU4aaZEKKUCqqa6TICQZQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2784&quot; height=&quot;1824&quot; data-origin-width=&quot;2784&quot; data-origin-height=&quot;1824&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예제를 적극적으로 사용하자!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 여시고..!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 타겟은 MCU가 ESP32-S3 모델이기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESP32-S3로 설정하겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정하시고 난 다음, 시리얼 포트를 연결하셔야하는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;USB 별도의 ftdi를 사용하는게 아니기 때문에 별도의 조작이 필요합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BOOT핀을 누르고 있는 상태에서! 리셋 버튼을 누르셔야 하는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BOOT핀을 가장 좌측 상단 버튼(F1)에 지정해뒀으니,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F1을 누른상태에서 뒤쪽에 있는 리셋 버튼을 한번 눌러줍니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crPbIv/dJMcahxhBi5/twNKOx0OPAaT62SfSNNglK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crPbIv/dJMcahxhBi5/twNKOx0OPAaT62SfSNNglK/img.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1084&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.35&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.7648%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crPbIv/dJMcahxhBi5/twNKOx0OPAaT62SfSNNglK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrPbIv%2FdJMcahxhBi5%2FtwNKOx0OPAaT62SfSNNglK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1084&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnt5QI/dJMcacvYZSx/aZzhijLkJ6F7M3MfXOPGM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnt5QI/dJMcacvYZSx/aZzhijLkJ6F7M3MfXOPGM0/img.png&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;1095&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;49.65&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.0724%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnt5QI/dJMcacvYZSx/aZzhijLkJ6F7M3MfXOPGM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcnt5QI%2FdJMcacvYZSx%2FaZzhijLkJ6F7M3MfXOPGM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1530&quot; height=&quot;1095&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;BOOT핀을 누른 상태로! 리셋버튼 누르기!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해서 시리얼 포트를 검색하시면!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 없던 포트가 생겨납니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 연결하시고! 기본 예제를 업로드 하시면 됩니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDsfcs/dJMcaadQ5Tv/f1fEWkcdN95vVYjdEwGCo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDsfcs/dJMcaadQ5Tv/f1fEWkcdN95vVYjdEwGCo0/img.png&quot; data-alt=&quot;포트가 뜬다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDsfcs/dJMcaadQ5Tv/f1fEWkcdN95vVYjdEwGCo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDsfcs%2FdJMcaadQ5Tv%2Ff1fEWkcdN95vVYjdEwGCo0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;305&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포트가 뜬다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본 예제는 boot핀 버튼을 누르면 A가 입력되고, 커서가 사각형으로 움직이는 예제인데요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업로드 되고 나서 boot핀을 눌러보세요! 그럼 A키가 입력되고 마우스가 움직이는걸 보실 수 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드는 직접 수정하셔도 되는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단은 제가 사용한 핀들이 있기때문에 핀을 수정해보도록 하겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;하지만 여기서 문제가 생겼습니다.&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로터리 엔코더의 핀을 제가 잘 못세팅했나봐요 ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트를 하는데 동작이 안되더라구요 ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;로터리 엔코더가 제대로 인식안되는 문제가생겨서 로터리 엔코더의 GPIO핀을 변경했습니다! ㅠㅠ&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;35, 36, 37을 사용하다가 12, 13, 14로 변경했어요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;물론 기존 포스팅에는 전부 수정해뒀습니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775980684704&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#define A_BUTTON (GPIO_NUM_0) // Use BOOT signal by default
#define B_BUTTON (GPIO_NUM_18)
#define C_BUTTON (GPIO_NUM_17)
#define D_BUTTON (GPIO_NUM_16)
#define E_BUTTON (GPIO_NUM_5)
#define F_BUTTON (GPIO_NUM_6)
#define G_BUTTON (GPIO_NUM_7)
#define H_BUTTON (GPIO_NUM_15)

#define ROTARY_PIN_A (GPIO_NUM_14)
#define ROTARY_PIN_B (GPIO_NUM_13)
#define ROTARY_PIN_SW (GPIO_NUM_12)

// #define ROTARY_PIN_A (GPIO_NUM_37)
// #define ROTARY_PIN_B (GPIO_NUM_36)
// #define ROTARY_PIN_SW (GPIO_NUM_35)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 이 키의 GPIO를 사용할 수 있도록 세팅해줘야하는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 기존 main에 있는 초기화를 조금 수정해서!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같은 함수로 만들어줬고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 main에서 호출하는 형태로 구성했어요!&lt;/p&gt;
&lt;pre id=&quot;code_1775981140766&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void button_init(gpio_num_t button_pin)
{
    const gpio_config_t button_config = {
        .pin_bit_mask = BIT64(button_pin),
        .mode = GPIO_MODE_INPUT,
        .intr_type = GPIO_INTR_DISABLE,
        .pull_up_en = true,
        .pull_down_en = false,
    };
    ESP_ERROR_CHECK(gpio_config(&amp;amp;button_config));
}

...

void app_main(void)
{
    button_init(A_BUTTON);
    button_init(B_BUTTON);
    button_init(C_BUTTON);
    button_init(D_BUTTON);
    button_init(E_BUTTON);
    button_init(F_BUTTON);
    button_init(G_BUTTON);
    button_init(H_BUTTON);
    button_init(ROTARY_PIN_SW); 

	...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 키 입력부분을 좀 더 쉽게 사용하기 위에 함수를 하나 추가해줄게요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에 입력할 키를 넣어주면 입력되도록 수정해봤습니다!&lt;/p&gt;
&lt;pre id=&quot;code_1775980739392&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void key_code_send(uint8_t keycode)
{
    if (!tud_mounted()) {
        return;
    }

    uint8_t keycode_array[6] = {keycode};

    while (!tud_hid_ready()) {
        vTaskDelay(pdMS_TO_TICKS(1));
    }
    tud_hid_keyboard_report(HID_ITF_PROTOCOL_KEYBOARD, 0, keycode_array);

    vTaskDelay(pdMS_TO_TICKS(8));

    while (!tud_hid_ready()) {
        vTaskDelay(pdMS_TO_TICKS(1));
    }
    tud_hid_keyboard_report(HID_ITF_PROTOCOL_KEYBOARD, 0, NULL);

    vTaskDelay(pdMS_TO_TICKS(4));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 코드에서 버튼을 읽어서 키가 입력되도록 할 건데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 아래와 같이 수정을 했고 각 버튼에 위 함수를 호출하는 형태로 구성했어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;똑같은 형태가 반복되는 형태에요!&lt;/p&gt;
&lt;pre id=&quot;code_1775981736057&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    // Button state tracking for debouncing
    static bool last_a_btn = true;  // pull-up: HIGH when not pressed
    static bool last_b_btn = true;
    static bool last_c_btn = true;
    static bool last_d_btn = true;
    static bool last_e_btn = true;
    static bool last_f_btn = true;
    static bool last_g_btn = true;
    static bool last_h_btn = true;
    static bool last_rt_btn = true;
    
    while (1) {
        if (tud_mounted()) {
            bool a_btn_bool = gpio_get_level(A_BUTTON);
            bool b_btn_bool = gpio_get_level(B_BUTTON);
            bool c_btn_bool = gpio_get_level(C_BUTTON);
            bool d_btn_bool = gpio_get_level(D_BUTTON);
            bool e_btn_bool = gpio_get_level(E_BUTTON);
            bool f_btn_bool = gpio_get_level(F_BUTTON);
            bool g_btn_bool = gpio_get_level(G_BUTTON);
            bool h_btn_bool = gpio_get_level(H_BUTTON);
            bool rt_btn_bool = gpio_get_level(ROTARY_PIN_SW);

            // APP_BUTTON: detect falling edge (pressed)
            if (last_a_btn &amp;amp;&amp;amp; !a_btn_bool) {
                ESP_LOGI(TAG, &quot;A button pressed!&quot;);
                a_btn();
                vTaskDelay(pdMS_TO_TICKS(10)); // debounce delay
            }
            last_a_btn = a_btn_bool;
            
            // B_BUTTON: detect falling edge (pressed)
            if (last_b_btn &amp;amp;&amp;amp; !b_btn_bool) {
                ESP_LOGI(TAG, &quot;B button pressed!&quot;);
                b_btn();
                vTaskDelay(pdMS_TO_TICKS(10)); // debounce delay
            }
            last_b_btn = b_btn_bool;
            
            // C_BUTTON: detect falling edge (pressed)
            if (last_c_btn &amp;amp;&amp;amp; !c_btn_bool) {
                ESP_LOGI(TAG, &quot;C button pressed!&quot;);
                c_btn();
                vTaskDelay(pdMS_TO_TICKS(10)); // debounce delay
            }
            last_c_btn = c_btn_bool;
            
            // D_BUTTON: detect falling edge (pressed)
            if (last_d_btn &amp;amp;&amp;amp; !d_btn_bool) {
                ESP_LOGI(TAG, &quot;D button pressed!&quot;);
                d_btn();
                vTaskDelay(pdMS_TO_TICKS(10)); // debounce delay
            }
            last_d_btn = d_btn_bool;
            
            // E_BUTTON: detect falling edge (pressed)
            if (last_e_btn &amp;amp;&amp;amp; !e_btn_bool) {
                ESP_LOGI(TAG, &quot;E button pressed!&quot;);
                e_btn();
                vTaskDelay(pdMS_TO_TICKS(10)); // debounce delay
            }
            last_e_btn = e_btn_bool;
            
            // F_BUTTON: detect falling edge (pressed)
            if (last_f_btn &amp;amp;&amp;amp; !f_btn_bool) {
                ESP_LOGI(TAG, &quot;F button pressed!&quot;);
                f_btn();
                vTaskDelay(pdMS_TO_TICKS(10)); // debounce delay
            }
            last_f_btn = f_btn_bool;
            
            // G_BUTTON: detect falling edge (pressed)
            if (last_g_btn &amp;amp;&amp;amp; !g_btn_bool) {
                ESP_LOGI(TAG, &quot;G button pressed!&quot;);
                g_btn();
                vTaskDelay(pdMS_TO_TICKS(10)); // debounce delay
            }
            last_g_btn = g_btn_bool;
            
            // H_BUTTON: detect falling edge (pressed)
            if (last_h_btn &amp;amp;&amp;amp; !h_btn_bool) {
                ESP_LOGI(TAG, &quot;H button pressed!&quot;);
                h_btn();
                vTaskDelay(pdMS_TO_TICKS(10)); // debounce delay
            }
            last_h_btn = h_btn_bool;

            // RT_BUTTON: detect falling edge (pressed)
            if (last_rt_btn &amp;amp;&amp;amp; !rt_btn_bool) {
                ESP_LOGI(TAG, &quot;RT button pressed!&quot;);
                rt_btn();
                vTaskDelay(pdMS_TO_TICKS(10)); // debounce delay
            }
            last_rt_btn = rt_btn_bool;
        }
        else {
            vTaskDelay(pdMS_TO_TICKS(10));
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호출되는 a_btn()과 같은 함수는 아래와 같이 생겼어요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a_btn()가 호출되면 key_code_send(HID_KEY_A)가 호출되는 형태인데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에 여러 키가 입력이 되도록 하려면 b_btn()처럼 구성하시면 됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기는 필요한 버튼을 구성해보시면 좋아요!&lt;/p&gt;
&lt;pre id=&quot;code_1775981820875&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void a_btn(void)
{
    key_code_send(HID_KEY_A);
}

static void b_btn(void)
{
    key_code_send(HID_KEY_1);
    vTaskDelay(pdMS_TO_TICKS(10));
    key_code_send(HID_KEY_2);
}

static void c_btn(void)
{
    key_code_send(HID_KEY_C);
}

...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 먼저 테스트 해보겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aaabbbccddabcdabcdefghefghefghabcdabcdefghefghabcdabcd &amp;lt;&amp;lt; 입력한 흔적 ㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력이 잘됩니다!!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2920&quot; data-origin-height=&quot;1674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8gkm8/dJMcajhvrzy/wKzquAw0p1LFQ5eS5DX5B1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8gkm8/dJMcajhvrzy/wKzquAw0p1LFQ5eS5DX5B1/img.png&quot; data-alt=&quot;아주 잘된다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8gkm8/dJMcajhvrzy/wKzquAw0p1LFQ5eS5DX5B1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8gkm8%2FdJMcajhvrzy%2FwKzquAw0p1LFQ5eS5DX5B1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2920&quot; height=&quot;1674&quot; data-origin-width=&quot;2920&quot; data-origin-height=&quot;1674&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아주 잘된다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 여기에 로터리 엔코더도 연결해야하는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드가 너무 길어져서 엔코더는 다른 포스팅에 이어서 진행하겠습니다!!&lt;/p&gt;
&lt;div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csbwSz/dJMcab4BL8A/H6ZSrvFkcJV86yCNNuqeoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csbwSz/dJMcab4BL8A/H6ZSrvFkcJV86yCNNuqeoK/img.png&quot; data-alt=&quot;PCBWay 감사합니다 :D&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csbwSz/dJMcab4BL8A/H6ZSrvFkcJV86yCNNuqeoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsbwSz%2FdJMcab4BL8A%2FH6ZSrvFkcJV86yCNNuqeoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;425&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PCBWay 감사합니다 :D&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고&amp;nbsp;이 포스팅은&amp;nbsp;PCBWay의 지원을 받아 제작하게 되었다는 점 알려드립니다 :D&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PCBWay에 감사드립니다!&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DIY</category>
      <category>DIY</category>
      <category>ESP32</category>
      <category>MacroPad</category>
      <category>pcb</category>
      <category>PCBWay</category>
      <author>데브구일</author>
      <guid isPermaLink="true">https://dev91.tistory.com/76</guid>
      <comments>https://dev91.tistory.com/76#entry76comment</comments>
      <pubDate>Sun, 12 Apr 2026 17:32:23 +0900</pubDate>
    </item>
    <item>
      <title>[DIY] 매크로 패드 제작기 5편 (케이스 제작)</title>
      <link>https://dev91.tistory.com/75</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 데브구일입니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저번에 SMT 작업을 마쳤지요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 케이스를 제작해보려고합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;케이스 설계는 AutoDesk Fusion 무료버전을 사용했습니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아 그리고 케이스 설계하다보니 제작 PCB 수치를 잘못입력한게 있었더라구요 ㅠ&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 부분은 전에 포스팅에서 전부 수정해서 올려놨습니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 하판입니다! 파츠를 나눠서 제작했어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하판은 먼 패드가 올라가는 부분에 약간의 경사를 줬어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인체 공학 어쩌구... 하는거 따라해본다고 대충 각도를 줬습니다만&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;확인해보니까 5.5도 더군요 ㅋㅋㅋ&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;효과가 있을지는 모르겠습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 나름 여러번 뽑아보면서 이게 좋을거같은데!? 하면서 제작했어요 ㅋㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G4eVD/dJMcagY8PLV/SSeROZlTBgKwFBR9Erkxz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G4eVD/dJMcagY8PLV/SSeROZlTBgKwFBR9Erkxz0/img.png&quot; data-alt=&quot;인체 공학 디자인 어쩌고 5.5도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G4eVD/dJMcagY8PLV/SSeROZlTBgKwFBR9Erkxz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG4eVD%2FdJMcagY8PLV%2FSSeROZlTBgKwFBR9Erkxz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;550&quot; height=&quot;307&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인체 공학 디자인 어쩌고 5.5도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 스위치가 들어가는 부분에&lt;b&gt; 아래쪽은 핀이 조금씩 튀어나오기 때문에 빈 공간을 살짝 줬어요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;우측에 있는 공간은 MCU랑 USB 부분&lt;/b&gt;입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 아래쪽에 보시면 낮은 공간이 하나 있는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 &lt;b&gt;로터리 엔코더&lt;/b&gt;를 설치할 부분이에요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조금씩 파여있는 부분은 와이어를 연결하려고 파뒀습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;773&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mzudu/dJMcab4BLXP/WzHT4OJImC0jUZykjWA0b0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mzudu/dJMcab4BLXP/WzHT4OJImC0jUZykjWA0b0/img.png&quot; data-alt=&quot;패드 하판 파츠!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mzudu/dJMcab4BLXP/WzHT4OJImC0jUZykjWA0b0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmzudu%2FdJMcab4BLXP%2FWzHT4OJImC0jUZykjWA0b0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;370&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;773&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;패드 하판 파츠!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래쪽에는 &lt;b&gt;볼트 머리부분까지 다 들어가도록 설계&lt;/b&gt;했어요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위쪽에서 바라봤을때 고정용 볼트가 보이면... 이상할 거 같아서!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;나름대로 설계해봤습니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 부분은 완성하고나서 보여드릴게요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp8LFr/dJMcagdNAew/CpSkAZkoFvwhQSoHxbpWTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp8LFr/dJMcagdNAew/CpSkAZkoFvwhQSoHxbpWTk/img.png&quot; data-alt=&quot;아래로 끼우는 볼트!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp8LFr/dJMcagdNAew/CpSkAZkoFvwhQSoHxbpWTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp8LFr%2FdJMcagdNAew%2FCpSkAZkoFvwhQSoHxbpWTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;444&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;948&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아래로 끼우는 볼트!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 상판인데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상판 부분에서는 키 패드가 밖으로 보이게 하도록 뻥 뚫어놨습니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;높이는 키의 스위치 부분은 키보드 처럼 스위치가 보이지 않도록!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;높이를 지정해줬습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패드 상판은 하판에서 들어오는 볼트가 맞물리도록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홀을 다 뚫어놨습니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AcUWt/dJMcah4Qbbr/hCjLqEmRhpotKyVktikGc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AcUWt/dJMcah4Qbbr/hCjLqEmRhpotKyVktikGc1/img.png&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;748&quot; data-is-animation=&quot;false&quot; width=&quot;600&quot; height=&quot;350&quot; style=&quot;width: 48.6781%; margin-right: 10px;&quot; data-widthpercent=&quot;49.25&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AcUWt/dJMcah4Qbbr/hCjLqEmRhpotKyVktikGc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAcUWt%2FdJMcah4Qbbr%2FhCjLqEmRhpotKyVktikGc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1284&quot; height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkVsgL/dJMcadVCqpi/p3RqeKqBUtbEoPoz6PDki1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkVsgL/dJMcadVCqpi/p3RqeKqBUtbEoPoz6PDki1/img.png&quot; data-origin-width=&quot;1270&quot; data-origin-height=&quot;718&quot; data-is-animation=&quot;false&quot; width=&quot;600&quot; height=&quot;339&quot; style=&quot;width: 50.1591%;&quot; data-widthpercent=&quot;50.75&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkVsgL/dJMcadVCqpi/p3RqeKqBUtbEoPoz6PDki1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkVsgL%2FdJMcadVCqpi%2Fp3RqeKqBUtbEoPoz6PDki1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1270&quot; height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;패드 상판 파츠!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 측면에 있는 스위치가 있었죠!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;측면 스위치를 노출하기보다는 &lt;b&gt;누르기 편하게 하기위해서&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래처럼 설계를 했어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스위치 앞쪽에 살짝 튀어나오게 하였고, 한쪽 면에만 붙어있어서&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;누르면 안쪽에 스위치가 눌리도록 설계했습니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옆에는 USB-C 타입을 꽂을 수 있게 뚫어놨어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1384&quot; data-origin-height=&quot;762&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baSge4/dJMcaaScfEB/lUadPkttyJLcph5aAdF9Qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baSge4/dJMcaaScfEB/lUadPkttyJLcph5aAdF9Qk/img.png&quot; data-alt=&quot;USB와 스위치 부분&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baSge4/dJMcaaScfEB/lUadPkttyJLcph5aAdF9Qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaSge4%2FdJMcaaScfEB%2FlUadPkttyJLcph5aAdF9Qk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;330&quot; data-origin-width=&quot;1384&quot; data-origin-height=&quot;762&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;USB와 스위치 부분&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 로터리 엔코더를 감싸줄 상판입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 로터리 엔코더의 손잡이 부분도 같이 설계를 해줬어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 더 큰 손잡이로 바꿔봤습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 보니 무슨 자전거 벨 처럼 생겼네요 ㅋㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lo9NP/dJMcajnYara/caRXsAPsYyZ1157cffKlaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lo9NP/dJMcajnYara/caRXsAPsYyZ1157cffKlaK/img.png&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;675&quot; data-is-animation=&quot;false&quot; style=&quot;width: 53.1523%; margin-right: 10px;&quot; data-widthpercent=&quot;53.78&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lo9NP/dJMcajnYara/caRXsAPsYyZ1157cffKlaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flo9NP%2FdJMcajnYara%2FcaRXsAPsYyZ1157cffKlaK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;971&quot; height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4Tm6o/dJMcajhen5r/HOGug8guYWBQF8EBx1VJPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4Tm6o/dJMcajhen5r/HOGug8guYWBQF8EBx1VJPk/img.png&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;626&quot; data-is-animation=&quot;false&quot; style=&quot;width: 45.6849%;&quot; data-widthpercent=&quot;46.22&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4Tm6o/dJMcajhen5r/HOGug8guYWBQF8EBx1VJPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4Tm6o%2FdJMcajhen5r%2FHOGug8guYWBQF8EBx1VJPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;774&quot; height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;로터리 엔코더 상판과 손잡이 부분!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 조립전에 먼저 로터리 엔코더를 달아주겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와이어에 납땜해서 연결해줬어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kGJ7S/dJMcaivRSbI/zkUCMMyLeBLXJDdQy74kO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kGJ7S/dJMcaivRSbI/zkUCMMyLeBLXJDdQy74kO0/img.png&quot; data-alt=&quot;엔코더는 납땜으로!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kGJ7S/dJMcaivRSbI/zkUCMMyLeBLXJDdQy74kO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkGJ7S%2FdJMcaivRSbI%2FzkUCMMyLeBLXJDdQy74kO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;388&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;엔코더는 납땜으로!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하판에 PCB를 올리고 상판을 결합한다음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하판에 볼트를 끼워주면되는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;볼트를 끼우게되면 아래처럼 볼트 머리 부분이 안쪽으로 들어가서&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;바닥은 평평하게 됩니다!&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ECRnO/dJMb996NRTq/BSgMCGUreddvA76wjNmDnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ECRnO/dJMb996NRTq/BSgMCGUreddvA76wjNmDnK/img.png&quot; data-alt=&quot;볼트 머리는 안쪽으로 들어간다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ECRnO/dJMb996NRTq/BSgMCGUreddvA76wjNmDnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FECRnO%2FdJMb996NRTq%2FBSgMCGUreddvA76wjNmDnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;409&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;517&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;볼트 머리는 안쪽으로 들어간다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로터리 엔코더 손잡이는 이정도로 커졌습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거의 4배?? 5배? 정도로 커진거 같죠? ㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TRD6v/dJMcafMKaQD/zPf48kQbvzVYkLv8Bj1cu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TRD6v/dJMcafMKaQD/zPf48kQbvzVYkLv8Bj1cu0/img.png&quot; data-alt=&quot;많이 커진 엔코더 손잡이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TRD6v/dJMcafMKaQD/zPf48kQbvzVYkLv8Bj1cu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTRD6v%2FdJMcafMKaQD%2FzPf48kQbvzVYkLv8Bj1cu0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;540&quot; height=&quot;381&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;381&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;많이 커진 엔코더 손잡이&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이 부분이 스위치 부분인데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;USB도 바로 꽂을 수 있고!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스위치 부분을&amp;nbsp; 누르면 안쪽 스위치가 눌립니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 스위치는 리셋스위치에요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUruI8/dJMcafFXc8Z/S4KgcPXKUBoxnYBMOSmS5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUruI8/dJMcafFXc8Z/S4KgcPXKUBoxnYBMOSmS5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUruI8/dJMcafFXc8Z/S4KgcPXKUBoxnYBMOSmS5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUruI8%2FdJMcafFXc8Z%2FS4KgcPXKUBoxnYBMOSmS5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;402&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 짜잔-&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다 조립을 하면 이런 모습이 됩니다! 오예~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 펌웨어를 하나씩 수정해봐야겠네요!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엔코더도 달았으니 엔코더 테스트도 해봐야하구요!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dodD6b/dJMcagLDH23/KppA8VjWaIVvkttxxVnTbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dodD6b/dJMcagLDH23/KppA8VjWaIVvkttxxVnTbK/img.png&quot; data-alt=&quot;케이스 완성!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dodD6b/dJMcagLDH23/KppA8VjWaIVvkttxxVnTbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdodD6b%2FdJMcagLDH23%2FKppA8VjWaIVvkttxxVnTbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;464&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;케이스 완성!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 여기까지 설계하는 과정에 여러번 설계가 바뀌긴 했습니다 ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조금씩 변경되어서 버려진 케이스들도 있습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘못뽑힌 부분도 있고 볼트 구멍이 안맞기도 했구요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 어찌저찌 케이스 제작이 되었네요! ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1081&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLZuKI/dJMcafMKaLS/kTwTPSvVwbJJr5jQetta61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLZuKI/dJMcafMKaLS/kTwTPSvVwbJJr5jQetta61/img.png&quot; data-alt=&quot;아까워라 흑흑 ㅠㅠ&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLZuKI/dJMcafMKaLS/kTwTPSvVwbJJr5jQetta61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLZuKI%2FdJMcafMKaLS%2FkTwTPSvVwbJJr5jQetta61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;450&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1081&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아까워라 흑흑 ㅠㅠ&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에 펌웨어를 수정해보도록 하겠습니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 다음 포스팅에 봐요~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csbwSz/dJMcab4BL8A/H6ZSrvFkcJV86yCNNuqeoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csbwSz/dJMcab4BL8A/H6ZSrvFkcJV86yCNNuqeoK/img.png&quot; data-alt=&quot;PCBWay 감사합니다 :D&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csbwSz/dJMcab4BL8A/H6ZSrvFkcJV86yCNNuqeoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsbwSz%2FdJMcab4BL8A%2FH6ZSrvFkcJV86yCNNuqeoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;425&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PCBWay 감사합니다 :D&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고&amp;nbsp;이 포스팅은&amp;nbsp;PCBWay의 지원을 받아 제작하게 되었다는 점 알려드립니다 :D&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PCBWay에 감사드립니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>DIY</category>
      <category>DIY</category>
      <category>ESP32</category>
      <category>MacroPad</category>
      <category>pcb</category>
      <category>PCBWay</category>
      <author>데브구일</author>
      <guid isPermaLink="true">https://dev91.tistory.com/75</guid>
      <comments>https://dev91.tistory.com/75#entry75comment</comments>
      <pubDate>Sun, 22 Mar 2026 12:13:30 +0900</pubDate>
    </item>
    <item>
      <title>[DIY] 매크로 패드 제작기 4편 (SMT 작업)</title>
      <link>https://dev91.tistory.com/74</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 데브구일입니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기다리던 PCB가 도착을 했습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대략 저는 2주 정도 조금 안되게 걸린 것 같습니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ICwon/dJMcaaLktGd/eKeTf4S7IhElrBWA344tjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ICwon/dJMcaaLktGd/eKeTf4S7IhElrBWA344tjk/img.png&quot; data-alt=&quot;드디어 도착한 PCB!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ICwon/dJMcaaLktGd/eKeTf4S7IhElrBWA344tjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FICwon%2FdJMcaaLktGd%2FeKeTf4S7IhElrBWA344tjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;736&quot; height=&quot;462&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;드디어 도착한 PCB!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 작업을 해보도록 하겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 PCB를 고정해주어야합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 이렇게 손으로 작업하는 경우에 같은 PCB를 이런식으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빙~ 둘러서 가운데 PCB가 움직이지 않도록 합니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6AD7A/dJMcaaR7n90/KolufE5Gd75iSra0QdO3k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6AD7A/dJMcaaR7n90/KolufE5Gd75iSra0QdO3k1/img.png&quot; data-alt=&quot;움직이지 못하게 둘러서 고정한다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6AD7A/dJMcaaR7n90/KolufE5Gd75iSra0QdO3k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6AD7A%2FdJMcaaR7n90%2FKolufE5Gd75iSra0QdO3k1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;565&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;움직이지 못하게 둘러서 고정한다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 고정을 시킨 뒤에 스탠실을 얹어줍니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스탠실은 아래 고정된 PCB 패드가 다 보이도록 잘 맞춰주셔야합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 위로 크림납을 바르기 때문에이예요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 크림납을 바르고 나면 스탠실은 살며시 들어내야 하기때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 위쪽만 마스킹 테이프로 고정시키는게 나중에 떼어낼때 편해요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;465&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0lEpg/dJMcai3BtqY/3FYYybmxnkV60tAIQ7Wm70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0lEpg/dJMcai3BtqY/3FYYybmxnkV60tAIQ7Wm70/img.png&quot; data-alt=&quot;이런식으로 잘 맞춰서 고정시켜 줍니다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0lEpg/dJMcai3BtqY/3FYYybmxnkV60tAIQ7Wm70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0lEpg%2FdJMcai3BtqY%2F3FYYybmxnkV60tAIQ7Wm70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;469&quot; height=&quot;465&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;465&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이런식으로 잘 맞춰서 고정시켜 줍니다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고정이 된 스탠실 위로 크림납을 발라야 하는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크림납을 소량만 사용하신다면 아래와 같은 주사기 형태로된 크림납도 있어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저도 이런 주사기 형태로된 소량만 들어있는 크림납을 사용했어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 크림납을 바를때 사용할 헤라 같은게 필요한데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 별도의 헤라는 없고 그냥 스타벅스 기프트 카드로 대체했습니다 ㅋㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용하지 않는 카드가 있다면 활용해보시면 좋아요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGaZCV/dJMcah4LeZO/VgFbfiQ0ehz3xXadSsFfhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGaZCV/dJMcah4LeZO/VgFbfiQ0ehz3xXadSsFfhK/img.png&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;494&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; style=&quot;width: 55.1712%; margin-right: 10px;&quot; data-widthpercent=&quot;55.82&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGaZCV/dJMcah4LeZO/VgFbfiQ0ehz3xXadSsFfhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGaZCV%2FdJMcah4LeZO%2FVgFbfiQ0ehz3xXadSsFfhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;744&quot; height=&quot;494&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E3MW5/dJMcahXYZcB/zo4oxJhs7atH9k4vRwzrU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E3MW5/dJMcahXYZcB/zo4oxJhs7atH9k4vRwzrU1/img.png&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;625&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;44.18&quot; data-filename=&quot;blob&quot; style=&quot;width: 43.666%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E3MW5/dJMcahXYZcB/zo4oxJhs7atH9k4vRwzrU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE3MW5%2FdJMcahXYZcB%2Fzo4oxJhs7atH9k4vRwzrU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;625&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;크림납과 스타벅스 카드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 주사기 형태의 크림납은 사용하면 크림을 다시 넣을 수가 없으니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소량만 사용하시면 됩니다! 부족하면 더 짜면되니까!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사진처럼 짜내고 나서!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카드를 가지고 잘 펴바르면 됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작은 팁을 알려드리자면!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바를때는 너무 여러번 펴바르면 좋지 않아요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;되도록 한 두번만 지나가는게 좋습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러번 지나가면 크림납이 번지더라구요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l8C3k/dJMcaa5DkpC/pgHaKcVEqozTDB8kmPCzx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l8C3k/dJMcaa5DkpC/pgHaKcVEqozTDB8kmPCzx0/img.png&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;433&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.1827%; margin-right: 10px;&quot; data-widthpercent=&quot;49.76&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l8C3k/dJMcaa5DkpC/pgHaKcVEqozTDB8kmPCzx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl8C3k%2FdJMcaa5DkpC%2FpgHaKcVEqozTDB8kmPCzx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;583&quot; height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/so0Ck/dJMcab4wRbT/M21k7zYdkutR27oXoSBtR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/so0Ck/dJMcab4wRbT/M21k7zYdkutR27oXoSBtR0/img.png&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;423&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.24&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.6545%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/so0Ck/dJMcab4wRbT/M21k7zYdkutR27oXoSBtR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fso0Ck%2FdJMcab4wRbT%2FM21k7zYdkutR27oXoSBtR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;575&quot; height=&quot;423&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;크림납을 바르자!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바르게 되면 아래와 같이 크림납이 발릴텐데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다 바르고 나서 스탠실을 조심스럽게 떼어내주셔야합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹여나 잘 못바르셨다면 닦아내고 다시 바르시면 됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 걱정할 필요는 없어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMpOFr/dJMcaakgjgQ/kgmSkXB1zaDxPAFtUWZLt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMpOFr/dJMcaakgjgQ/kgmSkXB1zaDxPAFtUWZLt0/img.png&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;369&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;49.82&quot; style=&quot;width: 49.2436%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMpOFr/dJMcaakgjgQ/kgmSkXB1zaDxPAFtUWZLt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMpOFr%2FdJMcaakgjgQ%2FkgmSkXB1zaDxPAFtUWZLt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;497&quot; height=&quot;369&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rm3Dn/dJMcaibxIks/CbHiIZZLv28jXRkDeGjDck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rm3Dn/dJMcaibxIks/CbHiIZZLv28jXRkDeGjDck/img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;418&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.5937%;&quot; data-widthpercent=&quot;50.18&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rm3Dn/dJMcaibxIks/CbHiIZZLv28jXRkDeGjDck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRm3Dn%2FdJMcaibxIks%2FCbHiIZZLv28jXRkDeGjDck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;크림납을 다 발랐다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 여기에 부품을 하나하나 올려주셔야 합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부품은 회로와 아트웍을 참고해서 하나하나 올려주셔야 합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 대량 생산을 할때는 공장에서 착착 알아서 올려주겠지만...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여긴 공장이 아니기 때문에 수동으로... 손으로 하나하나 올려야 합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 올려놓는 부분을 영상으로 찍은 줄 알았는데 ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;녹화 버튼이 안눌린 모양입니다 ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다 올려놓은 사진밖에 없네요 ㅠㅠ 죄송합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패드 위에 아래처럼 부품을 올려주시면 됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGP325/dJMcaiCzoef/qOEYqboElZkWgJnGO7NTD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGP325/dJMcaiCzoef/qOEYqboElZkWgJnGO7NTD1/img.png&quot; data-alt=&quot;부품을 하나하나... 올려놓아요&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGP325/dJMcaiCzoef/qOEYqboElZkWgJnGO7NTD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGP325%2FdJMcaiCzoef%2FqOEYqboElZkWgJnGO7NTD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;295&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;부품을 하나하나... 올려놓아요&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 핫플레이트를 사용해서 PCB를 구워(?)줍니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCB를 굽기 위해 잠시 빌려왔습니다 ㅋㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 230도로 설정했어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;열이 오르는데 시간이 10분 정도 걸리는 것 같습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;611&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSBZNW/dJMcafePUph/lB7HygRGGwK3Klx34kJiXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSBZNW/dJMcafePUph/lB7HygRGGwK3Klx34kJiXK/img.png&quot; data-alt=&quot;핫플레이드 (임대)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSBZNW/dJMcafePUph/lB7HygRGGwK3Klx34kJiXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSBZNW%2FdJMcafePUph%2FlB7HygRGGwK3Klx34kJiXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;415&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;611&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;핫플레이드 (임대)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온도가 올라가면 점점 크림납이 녹으면서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부품들이 제자리를 찾아가요!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;육안으로 확인하면서 혹시나 쇼트가 나고 있는 부분이 있는지 확인해줍니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 핫플레이트에 올려져 있을때는 부품이 떨어지기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 부품을 잘 정렬하는게 좋아요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;부품들이 잘 붙었다면!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;핫플레이트를 끄고 PCB가 식을때까지 기다려줍니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;매우 뜨거우니 조심!!!!&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EM3iR/dJMcaa5DnXb/tGjjknecPkf8mWElw68Sj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EM3iR/dJMcaa5DnXb/tGjjknecPkf8mWElw68Sj1/img.png&quot; data-alt=&quot;크림납이 녹고 있다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EM3iR/dJMcaa5DnXb/tGjjknecPkf8mWElw68Sj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEM3iR%2FdJMcaa5DnXb%2FtGjjknecPkf8mWElw68Sj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;337&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;크림납이 녹고 있다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부품이 다 붙었다면!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 스위치를 마저 납땜해보겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스위치는 하나하나 올려서 납땜하시면 됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;붙일때 생각보다 삐뚤어지길래...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삐뚤어지지 않게 잘 정렬해야겠더라구요 ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k0dmI/dJMcajg9yn6/Fmt0E3m2HJMOlRmkNYqks1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k0dmI/dJMcajg9yn6/Fmt0E3m2HJMOlRmkNYqks1/img.png&quot; data-alt=&quot;잘 정렬해서 납땜해주자&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k0dmI/dJMcajg9yn6/Fmt0E3m2HJMOlRmkNYqks1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk0dmI%2FdJMcajg9yn6%2FFmt0E3m2HJMOlRmkNYqks1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;627&quot; height=&quot;476&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잘 정렬해서 납땜해주자&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 위쪽은 흑축으로 하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래쪽은 청축으로 해보았어요 ㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스위치 개수 부족... 6개씩 있어서 4개씩 달았어요... T^T&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u9vqp/dJMcai3Bxmz/5lPyZ8gvdxBMifrqKhKOEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u9vqp/dJMcai3Bxmz/5lPyZ8gvdxBMifrqKhKOEk/img.png&quot; data-alt=&quot;흑축 4개 청축 4개&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u9vqp/dJMcai3Bxmz/5lPyZ8gvdxBMifrqKhKOEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu9vqp%2FdJMcai3Bxmz%2F5lPyZ8gvdxBMifrqKhKOEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;697&quot; height=&quot;448&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;흑축 4개 청축 4개&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 여기에 키캡을 달아주시면 되는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 가지고 있는 키캡이...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전에 키보드 분해해서 남은 키캡 뿐이라...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이중에 몇개 골라서 끼워봤습니다 ㅎㅎ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3D 프린터로 뽑을까 싶었는데, 지금은 필라멘트 컬러가 한개 뿐이라서 ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나중에 기회되면 한번 뽑아서 달아보겠습니다 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7xXtp/dJMcafTpx1W/3HvimHBeFD2F0v5UKy0V0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7xXtp/dJMcafTpx1W/3HvimHBeFD2F0v5UKy0V0K/img.png&quot; data-alt=&quot;집에 굴러다니는 키캡 끼워보기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7xXtp/dJMcafTpx1W/3HvimHBeFD2F0v5UKy0V0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7xXtp%2FdJMcafTpx1W%2F3HvimHBeFD2F0v5UKy0V0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;765&quot; height=&quot;419&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;집에 굴러다니는 키캡 끼워보기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 납땜을 끝내고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굴러다니는 키캡 몇개 끼워봤습니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 로터리 엔코더를 부착하진 않았는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 케이스를 만들어야 위치를 고정할 수 있어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;케이스를 제작하고 난 뒤에 부착하도록하겠습니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cV8vgM/dJMcacWE3bu/xWwpmdwjKWBWVSYnU6kMq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cV8vgM/dJMcacWE3bu/xWwpmdwjKWBWVSYnU6kMq0/img.png&quot; data-alt=&quot;로터리 엔코더는 케이스하면서 같이 할거예요&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cV8vgM/dJMcacWE3bu/xWwpmdwjKWBWVSYnU6kMq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcV8vgM%2FdJMcacWE3bu%2FxWwpmdwjKWBWVSYnU6kMq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;362&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;620&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로터리 엔코더는 케이스하면서 같이 할거예요&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 SMT 작업을 마쳤구요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에 케이스 제작해보도록 하겠습니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; data-alt=&quot;PCBWay 감사합니다 :D&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeDrjL%2FdJMcahXSFlr%2FhhRnDt5IjKKNlzuihE0y50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;425&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PCBWay 감사합니다 :D&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고&amp;nbsp;이 포스팅은&amp;nbsp;PCBWay의 지원을 받아 제작하게 되었다는 점 알려드립니다 :D&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PCBWay에 감사드립니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>DIY</category>
      <category>DIY</category>
      <category>ESP32</category>
      <category>MacroPad</category>
      <category>pcb</category>
      <category>PCBWay</category>
      <author>데브구일</author>
      <guid isPermaLink="true">https://dev91.tistory.com/74</guid>
      <comments>https://dev91.tistory.com/74#entry74comment</comments>
      <pubDate>Mon, 16 Mar 2026 20:44:13 +0900</pubDate>
    </item>
    <item>
      <title>[DIY] 매크로 패드 제작기 3편 (PCB 주문하기)</title>
      <link>https://dev91.tistory.com/73</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 데브구일입니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 저번에 그린 PCB를 주문해보도록 하겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주문은 PCBWay에서 지원을 해주셔서 PCBWay 서비스를 이용하였습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JV6vY/dJMcad2c7K3/gKRKB92tdOJFc44uSzIYnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JV6vY/dJMcad2c7K3/gKRKB92tdOJFc44uSzIYnK/img.png&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;441&quot; data-is-animation=&quot;false&quot; style=&quot;width: 54.2767%; margin-right: 10px;&quot; data-widthpercent=&quot;54.92&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JV6vY/dJMcad2c7K3/gKRKB92tdOJFc44uSzIYnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJV6vY%2FdJMcad2c7K3%2FgKRKB92tdOJFc44uSzIYnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;674&quot; height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwteh0/dJMcacbdDIO/pnKzW4UdPAFKkCmStolJ10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwteh0/dJMcacbdDIO/pnKzW4UdPAFKkCmStolJ10/img.png&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;526&quot; data-is-animation=&quot;false&quot; style=&quot;width: 44.5605%;&quot; data-widthpercent=&quot;45.08&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwteh0/dJMcacbdDIO/pnKzW4UdPAFKkCmStolJ10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbwteh0%2FdJMcacbdDIO%2FpnKzW4UdPAFKkCmStolJ10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;거버 파일을 첨부하는 베타 버전이 있다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 첨부하게되면 아래 처럼 화면이 바뀌면서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCB 사이즈라던지 기본정보가 자동으로 입력됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그에 맞춰 가격도 바꼈어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;541&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wEK0m/dJMcafeKpRQ/8qlugwNFKnJb1pkOGHTXw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wEK0m/dJMcafeKpRQ/8qlugwNFKnJb1pkOGHTXw1/img.png&quot; data-alt=&quot;거버를 첨부하면 자동 입력이 된다! 편함!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wEK0m/dJMcafeKpRQ/8qlugwNFKnJb1pkOGHTXw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwEK0m%2FdJMcafeKpRQ%2F8qlugwNFKnJb1pkOGHTXw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;417&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;541&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;거버를 첨부하면 자동 입력이 된다! 편함!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 몇 가지는 기본값으로 입력이 되는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 원하시면 색상을 바꾸실 수도 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;우선 저는 파란색으로 색상을 변경해보았어요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;몇몇 색상은 추가 요금이 붙게되지만, 기본적인 색상들은 별도의 추가요금이 없습니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파란색으로 했을때 저는 별도의 추가 요금이 없었어요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단! 주문 하실때 색상에 따라 사양이 조금씩 다른 부분이 있습니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;꼭! 확인하셔야해요! :D&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;823&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cypumU/dJMcahKnT6I/32L1t6yUktfcPqh9KGOuF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cypumU/dJMcahKnT6I/32L1t6yUktfcPqh9KGOuF1/img.png&quot; data-alt=&quot;다양한 옵션이 있다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cypumU/dJMcahKnT6I/32L1t6yUktfcPqh9KGOuF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcypumU%2FdJMcahKnT6I%2F32L1t6yUktfcPqh9KGOuF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;478&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;823&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;다양한 옵션이 있다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 저는 SMD-Stencil을 같이 사용할 예정인데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;별도의 SMD 부품을 사용하지 않는다면 굳이 사용할 필요는 없습니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;저는 SMD 부품들이 포함되어 있기 때문에 Stencil이 있으면 아무래도 편하겠지요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고 손으로 직접 할 것이기 때문에 프레임 없이 제작하고!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이즈만 조금 더 작게 변경했습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스탠실 가격은 10달러가 추가되네요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKeHgr/dJMcajuCg9C/XCanAZ8m5sAxIc9LeZl8CK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKeHgr/dJMcajuCg9C/XCanAZ8m5sAxIc9LeZl8CK/img.png&quot; data-alt=&quot;Stencil 사양도 고를 수 있다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKeHgr/dJMcajuCg9C/XCanAZ8m5sAxIc9LeZl8CK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKeHgr%2FdJMcajuCg9C%2FXCanAZ8m5sAxIc9LeZl8CK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;335&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Stencil 사양도 고를 수 있다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 장바구니에 담아두고 확인을 해보곘습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 두 가지해서 총 &lt;b&gt;30.26달러&lt;/b&gt;가 나오네요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수량은 기본 최소 5개 였습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에 배송비를.. 포함시키면... 53.02 달러네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fedex로 했더니 비싸긴하네요 ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nNs7p/dJMcahp4u9B/BQ8p7Qtzlq4WQamEInAH4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nNs7p/dJMcahp4u9B/BQ8p7Qtzlq4WQamEInAH4K/img.png&quot; width=&quot;700&quot; height=&quot;495&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;719&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;61.24&quot; style=&quot;width: 60.53%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nNs7p/dJMcahp4u9B/BQ8p7Qtzlq4WQamEInAH4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnNs7p%2FdJMcahp4u9B%2FBQ8p7Qtzlq4WQamEInAH4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1017&quot; height=&quot;719&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ldh4v/dJMcacvx1V7/n1kXIcodt4bVe861xzvzGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ldh4v/dJMcacvx1V7/n1kXIcodt4bVe861xzvzGk/img.png&quot; data-origin-width=&quot;333&quot; data-origin-height=&quot;372&quot; data-is-animation=&quot;false&quot; style=&quot;width: 38.3072%;&quot; data-widthpercent=&quot;38.76&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ldh4v/dJMcacvx1V7/n1kXIcodt4bVe861xzvzGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLdh4v%2FdJMcacvx1V7%2Fn1kXIcodt4bVe861xzvzGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;333&quot; height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;배송비가 반이다...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이렇게 주문하였습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 물품이 도착하면 제작해보도록 하겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 예제 정도는 미리 만들어놔도 좋을 것 같네요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;457&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k072v/dJMb99Mi7Rd/0msAfmpmRe4nkDGmac5zgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k072v/dJMb99Mi7Rd/0msAfmpmRe4nkDGmac5zgK/img.png&quot; data-alt=&quot;주문 완료!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k072v/dJMb99Mi7Rd/0msAfmpmRe4nkDGmac5zgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk072v%2FdJMb99Mi7Rd%2F0msAfmpmRe4nkDGmac5zgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;797&quot; height=&quot;457&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;457&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;주문 완료!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도착하면 바로 제작해서!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포스팅 올려보도록 하겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; data-alt=&quot;PCBWay 감사합니다 :D&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeDrjL%2FdJMcahXSFlr%2FhhRnDt5IjKKNlzuihE0y50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;425&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PCBWay 감사합니다 :D&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고&amp;nbsp;이 포스팅은&amp;nbsp;PCBWay의 지원을 받아 제작하게 되었다는 점 알려드립니다 :D&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PCBWay에 감사드립니다!&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>DIY</category>
      <category>DIY</category>
      <category>ESP32</category>
      <category>MacroPad</category>
      <category>pcb</category>
      <category>PCBWay</category>
      <author>데브구일</author>
      <guid isPermaLink="true">https://dev91.tistory.com/73</guid>
      <comments>https://dev91.tistory.com/73#entry73comment</comments>
      <pubDate>Mon, 9 Mar 2026 19:24:54 +0900</pubDate>
    </item>
    <item>
      <title>[DIY] 매크로 패드 제작기 2편 (회로 및 아트웍)</title>
      <link>https://dev91.tistory.com/71</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 데브구일입니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 편에서는 회로도를 하나씩 그리면서 설명을 해볼까 합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회로 그리는 툴은 EasyEDA를 사용했으니 참고하시기 바랍니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작해보겠습니다~!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 MCU 부분 회로도 입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 전원 부분 회로와, 리셋 부분인데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원은 별도의 레귤레이터를 사용합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레귤레이터는 3.3V로 전압을 낮춰주는 &lt;b&gt;BL8072&lt;/b&gt;를 사용했습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;리셋 스위치는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;풀 업 스위치&lt;/b&gt;로 구성을 해주시면 됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K1ry5/dJMcac92OjX/WgwZUonCZm4LC5dreq3ZfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K1ry5/dJMcac92OjX/WgwZUonCZm4LC5dreq3ZfK/img.png&quot; data-alt=&quot;전원부와 MCU 회로도!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K1ry5/dJMcac92OjX/WgwZUonCZm4LC5dreq3ZfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK1ry5%2FdJMcac92OjX%2FWgwZUonCZm4LC5dreq3ZfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1054&quot; height=&quot;433&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;전원부와 MCU 회로도!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 스위치 부분입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스위치는 Boot 핀을 포함해서 총 8개를 배치하려고합니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회로는 &lt;b&gt;모두 동일하게 풀 업 스위치&lt;/b&gt;로 구성했어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키보드를 만들때는 보통 키보드의 키가 많기때문에, 적은 핀으로 많은 키를 연결하기 위해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행렬 구조 형태의 매트릭스 회로를 보통 사용하는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 제가 만드는 방식은 키 입력 자체가 많지 않아서! 하나하나 1:1로 매칭해서 제작하려고합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키 스위치가 적다면 ! 이게 훨씬 단순하기 때문이에요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 키가 많다면 매트릭스 회로를 사용할 수 밖에 없을거에요!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IuHmg/dJMcaiia8fN/QOBpFZ9NxvZynNDgbIWpvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IuHmg/dJMcaiia8fN/QOBpFZ9NxvZynNDgbIWpvk/img.png&quot; data-alt=&quot;GPIO를 1:1로 매칭해서 스위치를 연결했음!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IuHmg/dJMcaiia8fN/QOBpFZ9NxvZynNDgbIWpvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIuHmg%2FdJMcaiia8fN%2FQOBpFZ9NxvZynNDgbIWpvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;828&quot; height=&quot;354&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GPIO를 1:1로 매칭해서 스위치를 연결했음!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 로터리 엔코더 부분인데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기는 단순하게 납땝을 해서 사용하려고합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별도의 PCB를 제작하는게 아니라, 이 부분은 고정할 수 있돌고 나온 로터리 엔코더 모듈을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;납땜해서 사용할 수 있도록 하려고해요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;저는 디바이스마트에서 DFROBOT의 EC11 로터리 엔코더 모듈을 골랐어요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사진과 같이 생긴 제품인데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 별도의 와이어로 납땜해서 사용하려고합니다!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 회로는 그냥 매칭하는 형태로 구성을 했어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfl6Sc/dJMcacbcKmY/ZUvpvK8dN06NcmSSeVG4Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfl6Sc/dJMcacbcKmY/ZUvpvK8dN06NcmSSeVG4Lk/img.png&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;323&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.4122%; margin-right: 10px;&quot; data-widthpercent=&quot;52.02&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfl6Sc/dJMcacbcKmY/ZUvpvK8dN06NcmSSeVG4Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcfl6Sc%2FdJMcacbcKmY%2FZUvpvK8dN06NcmSSeVG4Lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;436&quot; height=&quot;323&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3CoOJ/dJMcag5KHax/gxOgmsv3V8ABkUT1c8ZdkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3CoOJ/dJMcag5KHax/gxOgmsv3V8ABkUT1c8ZdkK/img.png&quot; data-origin-width=&quot;193&quot; data-origin-height=&quot;155&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.425%;&quot; data-widthpercent=&quot;47.98&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3CoOJ/dJMcag5KHax/gxOgmsv3V8ABkUT1c8ZdkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3CoOJ%2FdJMcag5KHax%2FgxOgmsv3V8ABkUT1c8ZdkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;193&quot; height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;로터리 엔코더는 와이어로 연결할 예정!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 마지막으로 USB를 연결해줘야하는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;USB-C 타입으로 선택을 했구요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;USB-C는 아래와 같이 회로를 구성했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 USB-C 타입 회로를 참고해서 그렸어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에&lt;b&gt; MCU에서 USB_DP와 DN핀은 각각 GPIO20 GPIO19핀이 고정&lt;/b&gt;이므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 매칭하셔야합니다! 이 부분은 제가 저번 포스팅때 링크를 같이 올려드렸는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 부분을 참고하시면 좋을 것 같습니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7l0SA/dJMcacI3TnJ/fuLBgTKymumqMe4MY5YKF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7l0SA/dJMcacI3TnJ/fuLBgTKymumqMe4MY5YKF1/img.png&quot; data-alt=&quot;USB-C 타입 커넥터 회로도~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7l0SA/dJMcacI3TnJ/fuLBgTKymumqMe4MY5YKF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7l0SA%2FdJMcacI3TnJ%2FfuLBgTKymumqMe4MY5YKF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;301&quot; height=&quot;305&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;305&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;USB-C 타입 커넥터 회로도~&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 회로를 완성하시면 이제 아트웍이 남았습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아트웍은 먼저 스위치는 4X2 배열로 배치했습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 스위치마다 풀업 저항과 캐패시터를 옆에 배치했구요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 SW2번이 BOOT핀에 연결된 스위치입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;729&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtKK1N/dJMcafy1xTn/xrknBWDwrh0MOIK698NvgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtKK1N/dJMcafy1xTn/xrknBWDwrh0MOIK698NvgK/img.png&quot; data-alt=&quot;배열은 4X2로 배치!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtKK1N/dJMcafy1xTn/xrknBWDwrh0MOIK698NvgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtKK1N%2FdJMcafy1xTn%2FxrknBWDwrh0MOIK698NvgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;376&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;729&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;배열은 4X2로 배치!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스위치 끼리의 간격은 가운데 중심으로 약 19.050mm입니다!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가로세로 모두 동일하게 배치했습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wA0sb/dJMcaiJd1zl/jqdNxohluM0v7PYcTE7B0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wA0sb/dJMcaiJd1zl/jqdNxohluM0v7PYcTE7B0K/img.png&quot; data-alt=&quot;간격은 19.050로 배치했습니다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wA0sb/dJMcaiJd1zl/jqdNxohluM0v7PYcTE7B0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwA0sb%2FdJMcaiJd1zl%2FjqdNxohluM0v7PYcTE7B0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;294&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;간격은 19.050로 배치했습니다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 전원부랑 USB 커넥터 부분인데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기 SW1이 리셋 스위치이고!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;USB에서 들어오는 전원을 레귤레이터로 연결해주었습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 간단하게 로고도 넣어봤어요! ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dy8FA3/dJMcaibrRlt/KZKYsswOx8BSIHivWFSq4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dy8FA3/dJMcaibrRlt/KZKYsswOx8BSIHivWFSq4k/img.png&quot; data-alt=&quot;전원부와 USB, 그리고 리셋 스위치 배치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dy8FA3/dJMcaibrRlt/KZKYsswOx8BSIHivWFSq4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdy8FA3%2FdJMcaibrRlt%2FKZKYsswOx8BSIHivWFSq4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;476&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;전원부와 USB, 그리고 리셋 스위치 배치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음... 여기는 MCU를 달아주었는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 ESP32-S3 MCU를 사용하는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 저는 ESP32-S3-WROOM-1과 1U 둘 중에 어떤걸 쓸까 고민했다가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESP32-S3-WROOM-1을 쓰기로 했습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘다 동일한 핀 레이아웃을 가지고 있어서 어떤걸로 배치를 해도 상관은 없는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설계를 하실때 주의 하실 점이 있습니다!&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;바로 안테나 부분인데요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;우측에 보이는 사진처럼 안테나 부분 아래쪽에는 &lt;/b&gt;&lt;b&gt;어떠한 쿠퍼 영역도 지나가지 않습니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;저렇게 비어있는 공간을 주는게 일반적입니다!&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아래 링크에서도 확인하실 수 있습니다!&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1772984089242&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;PCB Layout Design - ESP32-S3 -  &amp;mdash; ESP Hardware Design Guidelines latest documentation&quot; data-og-description=&quot;When ESP32-S3 sends data packages, the voltage ripple is small, but RF TX performance is poor. Analysis: The RF TX performance can be affected not only by voltage ripples, but also by the crystal itself. Poor quality and big frequency offsets of the crysta&quot; data-og-host=&quot;docs.espressif.com&quot; data-og-source-url=&quot;https://docs.espressif.com/projects/esp-hardware-design-guidelines/en/latest/esp32s3/pcb-layout-design.html&quot; data-og-url=&quot;https://docs.espressif.com/projects/esp-hardware-design-guidelines/en/latest/esp32s3/pcb-layout-design.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Fol5O/dJMb83kqYWL/kPJAzFl5WmQ1J3HSU6P1mk/img.png?width=1259&amp;amp;height=1106&amp;amp;face=0_0_1259_1106,https://scrap.kakaocdn.net/dn/VbcJV/dJMb82MA8VX/CXH0RrOIsjoTqLKBWvcgt0/img.png?width=1225&amp;amp;height=1131&amp;amp;face=0_0_1225_1131,https://scrap.kakaocdn.net/dn/CuGPN/dJMb86nVAUZ/5ihlr8efDVrG7ftXLh4HY1/img.png?width=1400&amp;amp;height=976&amp;amp;face=0_0_1400_976&quot;&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-hardware-design-guidelines/en/latest/esp32s3/pcb-layout-design.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.espressif.com/projects/esp-hardware-design-guidelines/en/latest/esp32s3/pcb-layout-design.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Fol5O/dJMb83kqYWL/kPJAzFl5WmQ1J3HSU6P1mk/img.png?width=1259&amp;amp;height=1106&amp;amp;face=0_0_1259_1106,https://scrap.kakaocdn.net/dn/VbcJV/dJMb82MA8VX/CXH0RrOIsjoTqLKBWvcgt0/img.png?width=1225&amp;amp;height=1131&amp;amp;face=0_0_1225_1131,https://scrap.kakaocdn.net/dn/CuGPN/dJMb86nVAUZ/5ihlr8efDVrG7ftXLh4HY1/img.png?width=1400&amp;amp;height=976&amp;amp;face=0_0_1400_976');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;PCB Layout Design - ESP32-S3 - &amp;mdash; ESP Hardware Design Guidelines latest documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;When ESP32-S3 sends data packages, the voltage ripple is small, but RF TX performance is poor. Analysis: The RF TX performance can be affected not only by voltage ripples, but also by the crystal itself. Poor quality and big frequency offsets of the crysta&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.espressif.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg9lzw/dJMcadnChno/KCDKHd0XVkNE6j3KjsVxWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg9lzw/dJMcadnChno/KCDKHd0XVkNE6j3KjsVxWK/img.png&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;403&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;64.67&quot; style=&quot;width: 63.9144%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg9lzw/dJMcadnChno/KCDKHd0XVkNE6j3KjsVxWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg9lzw%2FdJMcadnChno%2FKCDKHd0XVkNE6j3KjsVxWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;736&quot; height=&quot;403&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CAgfi/dJMcacvxryA/u4QTlPkCcZ9Vn7dKQEEJe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CAgfi/dJMcacvxryA/u4QTlPkCcZ9Vn7dKQEEJe1/img.png&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;474&quot; data-is-animation=&quot;false&quot; style=&quot;width: 34.9228%;&quot; data-widthpercent=&quot;35.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CAgfi/dJMcacvxryA/u4QTlPkCcZ9Vn7dKQEEJe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCAgfi%2FdJMcacvxryA%2Fu4QTlPkCcZ9Vn7dKQEEJe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;473&quot; height=&quot;474&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;MCU 종류와 안테나 설계 레이아웃 참고 자료!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 제가 아래처럼 배치를 해보았습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 배치를 하면 안테나가 우측 바깥쪽으로 나가게되어서!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안테나 설계 사양에 맞게됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게되면 나중에 무선을 사용하게 된다면!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무선 기능 사용시 문제가 없겠죠!? ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M4yIK/dJMcahcvJps/tqWt7SKtETz30d7V4sMX20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M4yIK/dJMcahcvJps/tqWt7SKtETz30d7V4sMX20/img.png&quot; data-alt=&quot;안테나를 바깥쪽으로 빼내기 위한 MCU 배치?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M4yIK/dJMcahcvJps/tqWt7SKtETz30d7V4sMX20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM4yIK%2FdJMcahcvJps%2FtqWt7SKtETz30d7V4sMX20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;358&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;533&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;안테나를 바깥쪽으로 빼내기 위한 MCU 배치?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 MCU 아래쪽에 로터리 엔코더를 연결할 헤더 부분도 만들어줬습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로터리 엔코더는 저번 포스팅에 보여드린 엔코더를 사용할 예정이라!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 연결할 수 있도록 핀 아웃을 매칭해놨어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJUA9G/dJMcaaEubg2/crKZaBVJKgZFGbL0n4tFZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJUA9G/dJMcaaEubg2/crKZaBVJKgZFGbL0n4tFZ1/img.png&quot; data-alt=&quot;로터리 엔코더를 연결할 헤더 부분!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJUA9G/dJMcaaEubg2/crKZaBVJKgZFGbL0n4tFZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJUA9G%2FdJMcaaEubg2%2FcrKZaBVJKgZFGbL0n4tFZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;257&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;318&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로터리 엔코더를 연결할 헤더 부분!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게해서 전체적인 아트웍 모습을 보시면!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사진처럼 됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1665&quot; data-origin-height=&quot;787&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k5FyU/dJMcab4q0af/idZk7Lbbj6PepZmUFHi950/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k5FyU/dJMcab4q0af/idZk7Lbbj6PepZmUFHi950/img.png&quot; data-alt=&quot;전체 아트웍 모습 !&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k5FyU/dJMcab4q0af/idZk7Lbbj6PepZmUFHi950/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk5FyU%2FdJMcab4q0af%2FidZk7Lbbj6PepZmUFHi950%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1665&quot; height=&quot;787&quot; data-origin-width=&quot;1665&quot; data-origin-height=&quot;787&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;전체 아트웍 모습 !&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 회로부터 아트웍까지 진행해보았습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 포스팅에서 PCB 주문을 해보도록 하겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; data-alt=&quot;PCBWay 감사합니다 :D&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeDrjL%2FdJMcahXSFlr%2FhhRnDt5IjKKNlzuihE0y50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;425&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PCBWay 감사합니다 :D&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고&amp;nbsp;이 포스팅은&amp;nbsp;PCBWay의 지원을 받아 제작하게 되었다는 점 알려드립니다 :D&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PCBWay에 감사드립니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DIY</category>
      <category>DIY</category>
      <category>ESP32</category>
      <category>MacroPad</category>
      <category>pcb</category>
      <category>PCBWay</category>
      <author>데브구일</author>
      <guid isPermaLink="true">https://dev91.tistory.com/71</guid>
      <comments>https://dev91.tistory.com/71#entry71comment</comments>
      <pubDate>Sat, 7 Mar 2026 15:41:58 +0900</pubDate>
    </item>
    <item>
      <title>[DIY] 매크로 패드 제작기 1편 (기획 및 테스트)</title>
      <link>https://dev91.tistory.com/70</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 데브구일입니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러분은 매크로 패드를 알고 계시나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 흔하게 알려져 있는 제품은 바로 스트림덱 같은 제품이 있죠!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방송하시는 분들이나, 업무에 단축키가 많이 필요한 분들이 사용하시는 편입니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CvGuA/dJMcafsajK5/d6LAyrY4s75xZ7T8o2Pdj1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CvGuA/dJMcafsajK5/d6LAyrY4s75xZ7T8o2Pdj1/img.jpg&quot; data-alt=&quot;스트림덱! 갖고싶다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CvGuA/dJMcafsajK5/d6LAyrY4s75xZ7T8o2Pdj1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCvGuA%2FdJMcafsajK5%2Fd6LAyrY4s75xZ7T8o2Pdj1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스트림덱! 갖고싶다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 하는건 뭔가 복잡한 스트림덱은 아니더라고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매크로를 입력할 수 있는 간단한 패드를 제가 한번 제작을 해보고싶었어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 어떤식으로 만들지 기획을 해봅니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 키보드의 역할을 해야하므로, HID가 가능한 디바이스를 사용해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HID는 Human Interface Device의 줄임말 입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희가 흔히 사용하는 키보드, 마우스 등의 장치를 말해요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bN5mnD/dJMcafMvj2U/ygnpUGWv87RZmNP72KPbY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bN5mnD/dJMcafMvj2U/ygnpUGWv87RZmNP72KPbY0/img.png&quot; data-alt=&quot;키보드 마우스와 같은 걸 HID라 해요!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bN5mnD/dJMcafMvj2U/ygnpUGWv87RZmNP72KPbY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbN5mnD%2FdJMcafMvj2U%2FygnpUGWv87RZmNP72KPbY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;333&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키보드 마우스와 같은 걸 HID라 해요!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 제가 자주 사용하는 MCU는 STM32와 ESP32 두 가지가 있는데요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ESP32가 DIY 하는데 있어서 활용도가 높다고 생각해서 ESP32를 사용하려고 합니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ESP32 시리즈 중에서 S3는 기본적으로 USB 인터페이스를 지원하기도하며, HID의 역할로 사용도 가능&lt;/b&gt;하기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MCU는 ESP32-S3를 사용해서 제작하려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 ESP32를 사용했을때 장점은...!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;무선 기능! 와이파이, 블루투스 기능을 기본 탑재하고 있는 MCU&lt;/b&gt;라서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나중에 무선으로 변경할 수 있으면 변경도 해보려고 ESP32-S3로 선택했습니다 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유선으로 먼저 제작하고 나서, 나중에 무선으로 만들어볼 생각이예요!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GcPKR/dJMcahwMcpN/vW42ZawO4nYetDgqwpRNck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GcPKR/dJMcahwMcpN/vW42ZawO4nYetDgqwpRNck/img.png&quot; data-alt=&quot;ESP32 개발 보드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GcPKR/dJMcahwMcpN/vW42ZawO4nYetDgqwpRNck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGcPKR%2FdJMcahwMcpN%2FvW42ZawO4nYetDgqwpRNck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ESP32 개발 보드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 버튼을 넣어줘야하는데, 저는 그냥 스위치보다는 누르는 재미가 있는!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기계식 스위치를 사용하려고 합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기계식 스위치는 저희가 흔히 알고있는 기계식 키보드에 사용되는 스위치에요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 기계식 키보드와 같은 대중들이 많이 사용하는 스위치를 사용했을 장점도 있어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 다양한 키캡을 사용할 수 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 굿즈로 나오거나, 꾸미기용 키캡들은 대부분 기계식 스위치에 맞도록 설계 되는 경우가 많습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키를 6~8개 정도..? 배치하는 쪽으로 생각중입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;체리 스위치가 하나에 300~500원 정도로 생각하시면 됩니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VGdYY/dJMcai3rNb0/WkFgB5w4nZ1JOS5D2w8uz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VGdYY/dJMcai3rNb0/WkFgB5w4nZ1JOS5D2w8uz1/img.jpg&quot; data-alt=&quot;대표적인 스위치는 체리 스위치!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VGdYY/dJMcai3rNb0/WkFgB5w4nZ1JOS5D2w8uz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVGdYY%2FdJMcai3rNb0%2FWkFgB5w4nZ1JOS5D2w8uz1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대표적인 스위치는 체리 스위치!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 여기에 추가로 &lt;b&gt;로터리 엔코더&lt;/b&gt;를 연결해서!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마우스 휠 처럼 사용하거나, 볼륨 제어가 가능하도록 해보려고 합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로터리 엔코더는 포텐셜미터와 다르게, 회전 각도의 제한이 없어서 계속 회전시킬 수 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로터리 엔코더도 어떤걸 사용할지 골라서 제품을 적어보도록 하겠습니다 :D&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPJzdy/dJMcac9Z19G/K7taM6JrgTRgK6f5OqGiNk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPJzdy/dJMcac9Z19G/K7taM6JrgTRgK6f5OqGiNk/img.jpg&quot; data-alt=&quot;로터리 엔코더&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPJzdy/dJMcac9Z19G/K7taM6JrgTRgK6f5OqGiNk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPJzdy%2FdJMcac9Z19G%2FK7taM6JrgTRgK6f5OqGiNk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;367&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로터리 엔코더&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이제 브레드 보드에서 테스트를 해보겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;펌웨어 업로드와 HID 연결을 하나의 USB를 사용할 건데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESP32-S3는 기본적으로 USB 인터페이스를 지원합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 아래 사진을 보시면 &lt;b&gt;기본적으로 GPIO19, GPIO20 번이 USB 통신 역할&lt;/b&gt;을 합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기를 연결하게되면 별도의 장치없이 USB로 연결하여, 업로드를 하거나 HID 통신이 가능합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 페이지 링크는 여기를 참고하세요!&lt;/p&gt;
&lt;figure id=&quot;og_1772441268347&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;USB Device Stack - ESP32-S3 -  &amp;mdash; ESP-IDF Programming Guide v5.5.3 documentation&quot; data-og-description=&quot;To install the Device Stack, please call tinyusb_driver_install(). The Device Stack's configuration is specified in a tinyusb_config_t structure that is passed as an argument to tinyusb_driver_install(). Note The tinyusb_config_t structure can be zero-init&quot; data-og-host=&quot;docs.espressif.com&quot; data-og-source-url=&quot;https://docs.espressif.com/projects/esp-idf/en/stable/esp32s3/api-reference/peripherals/usb_device.html&quot; data-og-url=&quot;https://docs.espressif.com/projects/esp-idf/en/stable/esp32s3/api-reference/peripherals/usb_device.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vQjGa/dJMb88eX9fS/YdKFMjSoKioHZDznVqUOK0/img.png?width=3618&amp;amp;height=1321&amp;amp;face=0_0_3618_1321&quot;&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/stable/esp32s3/api-reference/peripherals/usb_device.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.espressif.com/projects/esp-idf/en/stable/esp32s3/api-reference/peripherals/usb_device.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vQjGa/dJMb88eX9fS/YdKFMjSoKioHZDznVqUOK0/img.png?width=3618&amp;amp;height=1321&amp;amp;face=0_0_3618_1321');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;USB Device Stack - ESP32-S3 - &amp;mdash; ESP-IDF Programming Guide v5.5.3 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;To install the Device Stack, please call tinyusb_driver_install(). The Device Stack's configuration is specified in a tinyusb_config_t structure that is passed as an argument to tinyusb_driver_install(). Note The tinyusb_config_t structure can be zero-init&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.espressif.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;730&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Do022/dJMcaaj6LZ0/W00p7oPYy23PlVmFoozg01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Do022/dJMcaaj6LZ0/W00p7oPYy23PlVmFoozg01/img.png&quot; data-alt=&quot;ESP32-S3의 USB 하드웨어 연결&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Do022/dJMcaaj6LZ0/W00p7oPYy23PlVmFoozg01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDo022%2FdJMcaaj6LZ0%2FW00p7oPYy23PlVmFoozg01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;434&quot; data-origin-width=&quot;730&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ESP32-S3의 USB 하드웨어 연결&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 USB로 연결할때, 업로드를 할때는 부트로더로 진입해야하는데요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이때는 &lt;b&gt;BOOT 핀&lt;/b&gt;을 제어해 줘야합니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;저는 키중에 하나를 &lt;b&gt;BOOT핀&lt;/b&gt;으로 세팅해두고,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;부팅 후에는 기본 스위치로 사용하려고합니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ESP32-S3에서는 &lt;b&gt;BOOT핀이 GPIO0 핀에 할당&lt;/b&gt; 되어 있습니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JjB3i/dJMcagED0nh/BqvA3pxDdgpMfR4JwRhue0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JjB3i/dJMcagED0nh/BqvA3pxDdgpMfR4JwRhue0/img.png&quot; data-alt=&quot;부트로더 진입을 하기 위해 GPIO0을 제어해줘야함!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JjB3i/dJMcagED0nh/BqvA3pxDdgpMfR4JwRhue0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJjB3i%2FdJMcagED0nh%2FBqvA3pxDdgpMfR4JwRhue0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;338&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;부트로더 진입을 하기 위해 GPIO0을 제어해줘야함!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;BOOT 핀을 LOW로 내려줘야 부트로더 모드로 진입&lt;/b&gt;할 수 있기 때문에&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;저는 아래와 같이 회로를 구성했어요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;BOOT 스위치를 누르고 있는 상태에서 리셋 버튼을 누르면 부트로더 모드로 진입할 수 있어요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 되면 이제 업로드를 할 준비는 되었습니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSc8c1/dJMcahDvsOK/7TbtJmZ6aUEFxeOT5kKREK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSc8c1/dJMcahDvsOK/7TbtJmZ6aUEFxeOT5kKREK/img.png&quot; data-alt=&quot;BOOT 핀 회로 구성!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSc8c1/dJMcahDvsOK/7TbtJmZ6aUEFxeOT5kKREK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSc8c1%2FdJMcahDvsOK%2F7TbtJmZ6aUEFxeOT5kKREK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;330&quot; height=&quot;227&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;227&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;BOOT 핀 회로 구성!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;나머지 스위치도 동일하게 구성해주셔도 됩니다!&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;저는 동일하게 구성하려고해요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 어차피 기계식 스위치도 일반 스위치와 동일한 구조이기 때문에&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;테스트할때는 그냥 택트스위치를 사용할게요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 전원 회로는 3.3V 전원을 연결해주면 사용할 수 있는 상태가 됩니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;USB에 연결되는 VBUS의 경우 PC에 연결하면 기본적으로 5V 전원&lt;/b&gt;이 흐르기 때문에&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;레귤레이터를 사용해서 3.3V 전원으로 낮춰주셔야하는데요!&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우선은 테스트이기 때문에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;별도의 브레드보드 전원 모듈을 사용해서 3.3V를 공급해줬어요!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아래 사진에 나와있는 보드의 경우 테스트할때 쓰는 보드 하나 빌려와서 하고있습니다 ㅎㅎ&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;개발보드를 쓰셔도 무방합니다!&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HnTuY/dJMcag5HuJm/yhP4hy7Ra07FyxF7DQraC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HnTuY/dJMcag5HuJm/yhP4hy7Ra07FyxF7DQraC1/img.png&quot; data-alt=&quot;브레드보드 테스트!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HnTuY/dJMcag5HuJm/yhP4hy7Ra07FyxF7DQraC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHnTuY%2FdJMcag5HuJm%2FyhP4hy7Ra07FyxF7DQraC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;323&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;브레드보드 테스트!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해서 업로드를 부트로더로 진입하는지 체크를 해보았고!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거기에 HID 펌웨어 예제를 넣어서 간단하게 되는지 먼저 확인을 해보았습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 HID 예제는 esp32 예제 중에 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 링크로 가시면 예제 코드가 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ESP32 예제 코드도 여러가지 많기 때문에, 시간이 되시면 한번 둘러보시는 것도 추천드립니다!&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1772459874445&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;esp-idf/examples/peripherals/usb/device/tusb_hid at master &amp;middot; espressif/esp-idf&quot; data-og-description=&quot;Espressif IoT Development Framework. Official development framework for Espressif SoCs. - espressif/esp-idf&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/espressif/esp-idf/tree/master/examples/peripherals/usb/device/tusb_hid&quot; data-og-url=&quot;https://github.com/espressif/esp-idf/tree/master/examples/peripherals/usb/device/tusb_hid&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ccSeNd/dJMb86nU3Lv/bAKv6MmD3fqt8H4FmmVNdk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/i9AQ3/dJMb82eKznh/e2aZI2pFdHR0D5w9R5SRrK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/espressif/esp-idf/tree/master/examples/peripherals/usb/device/tusb_hid&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/espressif/esp-idf/tree/master/examples/peripherals/usb/device/tusb_hid&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ccSeNd/dJMb86nU3Lv/bAKv6MmD3fqt8H4FmmVNdk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/i9AQ3/dJMb82eKznh/e2aZI2pFdHR0D5w9R5SRrK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;esp-idf/examples/peripherals/usb/device/tusb_hid at master &amp;middot; espressif/esp-idf&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Espressif IoT Development Framework. Official development framework for Espressif SoCs. - espressif/esp-idf&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 예제에서 업로드를 해보시면 연결되었을 때, 간단하게 움직이는걸 보실 수 있는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 조금 수정해서 제가 연결한 택트 스위치에 매칭 시켜봤습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;누르면 Hello가 입력되도록 수정해봤어요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영상으로 올리고 싶었는데! 따로 컷편집 해야할 것 같아서!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 나중에 유튜브에 첨부하도록 하겠습니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단은 사진으로!!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2612&quot; data-origin-height=&quot;1452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cG8wR0/dJMcabww2zk/I68VkRykRd5KZ9jbvSLqKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cG8wR0/dJMcabww2zk/I68VkRykRd5KZ9jbvSLqKK/img.png&quot; data-alt=&quot;스위치를 누르면 입력이 된다!!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cG8wR0/dJMcabww2zk/I68VkRykRd5KZ9jbvSLqKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcG8wR0%2FdJMcabww2zk%2FI68VkRykRd5KZ9jbvSLqKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;334&quot; data-origin-width=&quot;2612&quot; data-origin-height=&quot;1452&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스위치를 누르면 입력이 된다!!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음 포스팅도 쭉쭉 작성하면서&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;펌웨어, 회로, PCB 주문까지 차차 포스팅 하도록 하겠습니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;감사합니다! :D&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; data-alt=&quot;PCBWay 감사합니다 :D&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beDrjL/dJMcahXSFlr/hhRnDt5IjKKNlzuihE0y50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeDrjL%2FdJMcahXSFlr%2FhhRnDt5IjKKNlzuihE0y50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;425&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PCBWay 감사합니다 :D&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고&amp;nbsp;이 포스팅은&amp;nbsp;PCBWay의 지원을 받아 제작하게 되었다는 점 알려드립니다 :D&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PCBWay에 감사드립니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>DIY</category>
      <category>DIY</category>
      <category>ESP32</category>
      <category>MacroPad</category>
      <category>pcb</category>
      <category>PCBWay</category>
      <author>데브구일</author>
      <guid isPermaLink="true">https://dev91.tistory.com/70</guid>
      <comments>https://dev91.tistory.com/70#entry70comment</comments>
      <pubDate>Wed, 4 Mar 2026 19:01:37 +0900</pubDate>
    </item>
    <item>
      <title>[Ubuntu 24.04] 프로그램 자동 실행 방법</title>
      <link>https://dev91.tistory.com/66</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 데브구일입니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 프로그램을 자동 실행하는 방법을 알아보겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 내장된 스타트업 프로그램을 사용하면 좋습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사진 처럼 startup을 검색해보시면 프로그램 하나가 보일텐데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 실행하면 다음과 같은 프로그램이 실행됩니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5omS2/btsOpFzuXpW/9bSEdgYRl1mn9QMEGv4POK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5omS2/btsOpFzuXpW/9bSEdgYRl1mn9QMEGv4POK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1668&quot; data-origin-height=&quot;1177&quot; data-filename=&quot;2.png&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5omS2/btsOpFzuXpW/9bSEdgYRl1mn9QMEGv4POK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5omS2%2FbtsOpFzuXpW%2F9bSEdgYRl1mn9QMEGv4POK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1668&quot; height=&quot;1177&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwLgOB/btsOp6XJjCv/kIzdxgLr4VWjJF95oANZ50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwLgOB/btsOp6XJjCv/kIzdxgLr4VWjJF95oANZ50/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1668&quot; data-origin-height=&quot;1177&quot; data-filename=&quot;3.png&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwLgOB/btsOp6XJjCv/kIzdxgLr4VWjJF95oANZ50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwLgOB%2FbtsOp6XJjCv%2FkIzdxgLr4VWjJF95oANZ50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1668&quot; height=&quot;1177&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;기본 내장 프로그램인 Startup Application&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 프로그램을 사용한다면 그냥 추가를 누르고 프로그램을 선택해주면 되는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 여기에 5초의 지연 시간을 주고 크롬 브라우저를 실행하려고 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 지연 시간을 넣었더니 크롬이 실행이 안되는 문제가 생겨 실행을 못했는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 쉘 스크립트를 하나 만들어서 쉘 스크립트를 실행하도록 해보았습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 쉘 스크립트를 작성하기 위해 vi 에디터로 파일을 생성해보겠습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 Documents 폴더에 startup 폴더를 생성해서 chrome_script.sh로 지정했습니다!&lt;/p&gt;
&lt;pre id=&quot;code_1749017417770&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vi /home/odroid/Documents/startup/chrome_script.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에 쉘 스크립트를 작성해주면되는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5초간 지연시간 후 link에 주소를 크롬 브라우저 전체화면으로 실행하는 쉘 스크립트를 구성해보았습니다!&lt;/p&gt;
&lt;pre id=&quot;code_1749017299103&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin/bash
# 5초 지연 후 link를 크롬 브라우저 풀스크린으로 실행
link=&quot;air.itact.co.kr&quot;
sleep 5
google-chrome --start-fullscreen ${link}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 쉘 스크립트를 저장해주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1668&quot; data-origin-height=&quot;1177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFHxVi/btsOp4r32mk/B9nFOD2xyHSapq8oPN7Rvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFHxVi/btsOp4r32mk/B9nFOD2xyHSapq8oPN7Rvk/img.png&quot; data-alt=&quot;쉘 스크립트를 만들자~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFHxVi/btsOp4r32mk/B9nFOD2xyHSapq8oPN7Rvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFHxVi%2FbtsOp4r32mk%2FB9nFOD2xyHSapq8oPN7Rvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1668&quot; height=&quot;1177&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1668&quot; data-origin-height=&quot;1177&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쉘 스크립트를 만들자~&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 생성한 쉘 스크립트를 Startup Applications에 추가해줍니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Name이랑 comment는 본인이 알아볼 수 있도록 작성해주시면됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가를 하게되면 아래와 같이 추가된 것을 확인 할 수 있습니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmXLVf/btsOqalmXHP/DjkylZJ9kVJxJZeRyBXksk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmXLVf/btsOqalmXHP/DjkylZJ9kVJxJZeRyBXksk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;428&quot; data-filename=&quot;4.png&quot; style=&quot;width: 49.0828%; margin-right: 10px;&quot; data-widthpercent=&quot;49.66&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmXLVf/btsOqalmXHP/DjkylZJ9kVJxJZeRyBXksk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmXLVf%2FbtsOqalmXHP%2FDjkylZJ9kVJxJZeRyBXksk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBhtkm/btsOoQIFAUM/3qbBdAXVt5nZr6zql94dMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBhtkm/btsOoQIFAUM/3qbBdAXVt5nZr6zql94dMK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;418&quot; data-filename=&quot;5.png&quot; style=&quot;width: 49.7544%;&quot; data-widthpercent=&quot;50.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBhtkm/btsOoQIFAUM/3qbBdAXVt5nZr6zql94dMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBhtkm%2FbtsOoQIFAUM%2F3qbBdAXVt5nZr6zql94dMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Startup Applications에 추가하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 재부팅을 해보시면! 프로그램이 실행이 되는 걸 확인하실 수 있습니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;1668&quot; data-origin-height=&quot;1177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzPIG4/btsOp8HQUvF/d5gSKeUkpRKOsvWd7A2DSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzPIG4/btsOp8HQUvF/d5gSKeUkpRKOsvWd7A2DSk/img.png&quot; data-alt=&quot;잘 실행된다 ~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzPIG4/btsOp8HQUvF/d5gSKeUkpRKOsvWd7A2DSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzPIG4%2FbtsOp8HQUvF%2Fd5gSKeUkpRKOsvWd7A2DSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1668&quot; height=&quot;1177&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;1668&quot; data-origin-height=&quot;1177&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잘 실행된다 ~&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그런데 부팅이 되면 비밀번호 입력창이 뜨시는 분들이 계실텐데요!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 경우 keyring을 세팅해두면 비밀번호 입력없이 실행 할 수 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키링은 아래 포스팅을 참고해주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev91.tistory.com/67&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Linux] - [Ubuntu 24.04] 자동실행시 비밀번호 입력 문제 해결방법&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux</category>
      <category>Startup</category>
      <category>ubuntu</category>
      <category>부팅시</category>
      <category>우분투</category>
      <category>자동실행</category>
      <author>데브구일</author>
      <guid isPermaLink="true">https://dev91.tistory.com/66</guid>
      <comments>https://dev91.tistory.com/66#entry66comment</comments>
      <pubDate>Thu, 5 Jun 2025 19:39:13 +0900</pubDate>
    </item>
    <item>
      <title>[Ubuntu 24.04] 부팅시 Overview 실행 방지</title>
      <link>https://dev91.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 데브구일입니다 :D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 오버뷰는 현재 실행된 프로그램을 한눈에 볼 수 있도록 해주는 기능인데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키보드에 win키를 누르면 나오는 기능입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아마 기능이름이 뭔지 모르시는 분들도 계셨을 것 같아요! (제가 그랬음)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오후 3.48.31.png&quot; data-origin-width=&quot;1525&quot; data-origin-height=&quot;1082&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lmm7Q/btsOp7oRN1p/OwMENdJK89MnvYCFSLbJ60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lmm7Q/btsOp7oRN1p/OwMENdJK89MnvYCFSLbJ60/img.png&quot; data-alt=&quot;오버뷰! 좋은 기능입니다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lmm7Q/btsOp7oRN1p/OwMENdJK89MnvYCFSLbJ60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLmm7Q%2FbtsOp7oRN1p%2FOwMENdJK89MnvYCFSLbJ60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1525&quot; height=&quot;1082&quot; data-filename=&quot;스크린샷 2025-06-04 오후 3.48.31.png&quot; data-origin-width=&quot;1525&quot; data-origin-height=&quot;1082&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;오버뷰! 좋은 기능입니다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 기능이지만 !!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투를 재부팅했더니 Overview가 실행되는 분들이 계실텐데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 프로그램을 자동으로 실행하시려는 분들에게는 불편한 부분입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 부팅시 오버뷰를 비활성화 하지 않으시면, 아래와 같이 화면이 나오실 거예요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 부팅시 크롬을 자동실행하도록 구성했을때! 부팅시 화면인데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클릭해 줄때까지 저러고 있습니다 :(&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오후 3.31.53.png&quot; data-origin-width=&quot;1525&quot; data-origin-height=&quot;1082&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o2VlF/btsOpbr0Bf7/jP43cAq5Vj6iS00eJLBj60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o2VlF/btsOpbr0Bf7/jP43cAq5Vj6iS00eJLBj60/img.png&quot; data-alt=&quot;부팅할때 오버뷰... 방해된다..!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o2VlF/btsOpbr0Bf7/jP43cAq5Vj6iS00eJLBj60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo2VlF%2FbtsOpbr0Bf7%2FjP43cAq5Vj6iS00eJLBj60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1525&quot; height=&quot;1082&quot; data-filename=&quot;스크린샷 2025-06-04 오후 3.31.53.png&quot; data-origin-width=&quot;1525&quot; data-origin-height=&quot;1082&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;부팅할때 오버뷰... 방해된다..!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 어떻게 해결하느냐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 Extension manager입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치는 아래 포스팅에도 있으니 참고해주시고요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev91.tistory.com/64&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Linux] - [Ubuntu 24.04] Dock 숨기기&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Browse에서 overview start를 검색해주시면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;No overview at start-up 이라는 Extension이 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 설치해주세요!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l98pg/btsOpxO9BqF/ByWtE5jXmkmCEskQfoGnS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l98pg/btsOpxO9BqF/ByWtE5jXmkmCEskQfoGnS1/img.png&quot; data-alt=&quot;No overview at start-up&amp;amp;nbsp;설치!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l98pg/btsOpxO9BqF/ByWtE5jXmkmCEskQfoGnS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl98pg%2FbtsOpxO9BqF%2FByWtE5jXmkmCEskQfoGnS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;642&quot; height=&quot;484&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;No overview at start-up&amp;nbsp;설치!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 다 되시면 자동으로 적용이 되는데요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 재부팅을 하시면 부팅시에 오버뷰가 실행되지 않게됩니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;1668&quot; data-origin-height=&quot;1177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WopO8/btsOoQhIrXE/RIeO4FA9qKbm55zV8OGaY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WopO8/btsOoQhIrXE/RIeO4FA9qKbm55zV8OGaY1/img.png&quot; data-alt=&quot;와아 잘된다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WopO8/btsOoQhIrXE/RIeO4FA9qKbm55zV8OGaY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWopO8%2FbtsOoQhIrXE%2FRIeO4FA9qKbm55zV8OGaY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1668&quot; height=&quot;1177&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;1668&quot; data-origin-height=&quot;1177&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;와아 잘된다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 오버뷰 실행없이! 자동실행을 설정한 크롬이 전체화면으로 실행되는 것까지!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동작이 잘 되는 것을 확인해보았습니다!&lt;/p&gt;
&lt;p style=&quot;color: #9a9692; text-align: start;&quot; data-darkreader-inline-color=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux</category>
      <category>overview</category>
      <category>ubuntu</category>
      <category>win키누르면 나오는거</category>
      <category>숨기기</category>
      <category>우분투</category>
      <author>데브구일</author>
      <guid isPermaLink="true">https://dev91.tistory.com/68</guid>
      <comments>https://dev91.tistory.com/68#entry68comment</comments>
      <pubDate>Thu, 5 Jun 2025 19:25:35 +0900</pubDate>
    </item>
  </channel>
</rss>