<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>아!두이노, 라즈베리, 코딩 노가다</title>
    <link>https://raspberrystory.tistory.com/</link>
    <description>아두이노, 라즈베리 공부 중입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 9 Aug 2026 00:07:02 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>아이스뭐라카노</managingEditor>
    <item>
      <title>다시 시작 하는 ESP8266 펌웨어 가이드</title>
      <link>https://raspberrystory.tistory.com/278</link>
      <description>&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bDl8RG/dJMcagzjWS2/FXdGqFrHamfMpK0cmkFFI0/ESP8266_AT_Firmware_Guide.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;ESP8266_AT_Firmware_Guide.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.45MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&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;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bQegyW/dJMcadJibrr/WRMuEjO5Di1h2MEDppcW70/ESP8266_NONOS_SDK-3.0.6.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;ESP8266_NONOS_SDK-3.0.6.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;5.97MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cTMCAJ/dJMcagsy9F2/choZ7spp6mobb2otLmhyE1/ESP-WROOM-02-AT-V2.2.2.0.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;ESP-WROOM-02-AT-V2.2.2.0.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;14.75MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>ESP8266</category>
      <author>아이스뭐라카노</author>
      <guid isPermaLink="true">https://raspberrystory.tistory.com/278</guid>
      <comments>https://raspberrystory.tistory.com/278#entry278comment</comments>
      <pubDate>Fri, 3 Jul 2026 21:26:04 +0900</pubDate>
    </item>
    <item>
      <title>ESP8266 펌웨어 다운로드 방법 정리</title>
      <link>https://raspberrystory.tistory.com/277</link>
      <description>&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bDY0Jo/dJMcado0viK/CLOBwOxkMoMs5hroq75pW0/ESP8266_AT_Firmware_Guide.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;ESP8266_AT_Firmware_Guide.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.45MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ESP8266</category>
      <author>아이스뭐라카노</author>
      <guid isPermaLink="true">https://raspberrystory.tistory.com/277</guid>
      <comments>https://raspberrystory.tistory.com/277#entry277comment</comments>
      <pubDate>Fri, 3 Jul 2026 15:59:23 +0900</pubDate>
    </item>
    <item>
      <title>ES 스테이션 커스텀 메뉴 만들기</title>
      <link>https://raspberrystory.tistory.com/276</link>
      <description>&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bBLEqd/dJMcacp1AMJ/b2N7RKjgdYMfAxZJkarES0/%EC%97%90%EB%AE%AC%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%85%98%20%ED%95%98%EC%9D%B4%EB%B8%8C%EB%A6%AC%EB%93%9C%20%EC%BB%A4%EC%8A%A4%ED%85%80%20%EB%A9%94%EB%89%B4%20%EA%B5%AC%EC%B6%95%20%EA%B0%80%EC%9D%B4%EB%93%9C%20%281%29.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;에뮬스테이션 하이브리드 커스텀 메뉴 구축 가이드 (1).pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.51MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #2d3748; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #742a2a;&quot;&gt;에뮬스테이션 하이브리드 커스텀 메뉴 구축 가이드&lt;/div&gt;
&lt;div style=&quot;color: #4a5568;&quot;&gt;gamelist.xml 메타데이터 매핑 및 확장자별 통합 분기(launcher.sh) 시스템 빌드&lt;/div&gt;
&lt;div style=&quot;color: #718096;&quot;&gt;개정일: 2026년 6월 | 대상 플랫폼: RetroPie, Batocera, EmuELEC 기반 시스템&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본 가이드는 에뮬스테이션(EmulationStation)에서 쉘 스크립트(.sh) 파일만 노출되어 UI가 투박해지는 한계를 극복하고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;멋진 타이틀 이름, 스크린샷, 로고, 상세 가이드 설명이 미디어 파일과 완벽히 믹싱된 하이브리드 메뉴판&lt;/b&gt;을 제작하는 고급 커스텀 기법을 다룹니다.&lt;/p&gt;
&lt;h2 style=&quot;color: #9b2c2c; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. 하이브리드 매핑 시스템의 핵심 원리&lt;/h2&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;실제 백엔드에서는 볼륨 조절 스크립트나 이미지 뷰어가 돌아가더라도, 에뮬스테이션 프론트엔드 화면에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;gamelist.xml&lt;span&gt;&amp;nbsp;&lt;/span&gt;데이터를 강제로 파싱하여 정갈한 한글 이름과 아이콘, 설명으로 치환해 노출시키는 구조입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #2d3748; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;실제 파일 구조:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;vol_setting.sh,&lt;span&gt;&amp;nbsp;&lt;/span&gt;jamma_pinout.png,&lt;span&gt;&amp;nbsp;&lt;/span&gt;readme.txt&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 체감 화면:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;테마 레이아웃에 맞춰 스크린샷 썸네일과 조작 안내가 포함된 고화질 커스텀 휠 메뉴판&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #9b2c2c; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. 구체적인 단계별 구현 절차&lt;/h2&gt;
&lt;h3 style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #e53e3e; color: #ffffff;&quot;&gt;STEP 1&lt;/span&gt;시스템 설정 파일 (es_systems.cfg) 수정&lt;/h3&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스크립트 외에 이미지나 텍스트 문서 파일도 파일 목록(롬 리스트)으로 인식할 수 있도록 확장자를 추가하고, 중앙 집중형 매핑 런처인&lt;span&gt;&amp;nbsp;&lt;/span&gt;launcher.sh를 호출하도록 커맨드를 수정합니다.&lt;/p&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파일 경로:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;/opt/retropie/configs/all/emulationstation/es_systems.cfg&lt;/p&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background-color: #f7fafc; color: #2d3748; text-align: start;&quot;&gt;&lt;code&gt;&amp;lt;system&amp;gt;
    &amp;lt;name&amp;gt;arcade_tools&amp;lt;/name&amp;gt;
    &amp;lt;fullname&amp;gt;아케이드 기통 설정 및 매뉴얼&amp;lt;/fullname&amp;gt;
    &amp;lt;path&amp;gt;/home/pi/RetroPie/roms/arcade_tools&amp;lt;/path&amp;gt;
    &amp;lt;extension&amp;gt;.sh .SH .png .PNG .txt .TXT .pdf .PDF&amp;lt;/extension&amp;gt;
    &amp;lt;command&amp;gt;bash /home/pi/RetroPie/roms/arcade_tools/launcher.sh %ROM%&amp;lt;/command&amp;gt;
    &amp;lt;platform&amp;gt;arcade_tools&amp;lt;/platform&amp;gt;
    &amp;lt;theme&amp;gt;arcade_tools&amp;lt;/theme&amp;gt;
&amp;lt;/system&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #e53e3e; color: #ffffff;&quot;&gt;STEP 2&lt;/span&gt;디렉토리 및 파일 배치&lt;/h3&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;지정한 메뉴 롬 폴더(/home/pi/RetroPie/roms/arcade_tools/)를 생성하고 구동할 다양한 리소스 파일을 자유롭게 배치합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #2d3748; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;vol_setting.sh&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 볼륨 조절 리눅스 스크립트&lt;/li&gt;
&lt;li&gt;jamma_pinout.png&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 잠마 표준 28핀 배열 회로도 이미지&lt;/li&gt;
&lt;li&gt;readme.txt&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 기통 구동 전 필독 주의사항 텍스트 문서&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #e53e3e; color: #ffffff;&quot;&gt;STEP 3&lt;/span&gt;gamelist.xml 작성을 통한 파일과 UI 바인딩&lt;/h3&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;해당 폴더 내부에&lt;span&gt;&amp;nbsp;&lt;/span&gt;gamelist.xml&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일을 생성하고 아래 구조로 작성하여 스크립트와 일반 파일이 완벽하게 하나의 '게임 선택 목록'처럼 믹싱되도록 설계합니다.&lt;/p&gt;
&lt;pre class=&quot;xml&quot; style=&quot;background-color: #f7fafc; color: #2d3748; text-align: start;&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;gameList&amp;gt;
    &amp;lt;!-- 1. 쉘 스크립트 매핑 (볼륨 설정) --&amp;gt;
    &amp;lt;game&amp;gt;
        &amp;lt;path&amp;gt;./vol_setting.sh&amp;lt;/path&amp;gt;
        &amp;lt;name&amp;gt;  디지털 시스템 볼륨 설정&amp;lt;/name&amp;gt;
        &amp;lt;desc&amp;gt;아케이드 기통의 내부 메인 사운드 볼륨을 디지털로 정밀 조절합니다.&amp;lt;/desc&amp;gt;
        &amp;lt;image&amp;gt;./media/images/volume_thumb.png&amp;lt;/image&amp;gt;
    &amp;lt;/game&amp;gt;

    &amp;lt;!-- 2. 이미지 파일 매핑 (회로도 보기) --&amp;gt;
    &amp;lt;game&amp;gt;
        &amp;lt;path&amp;gt;./jamma_pinout.png&amp;lt;/path&amp;gt;
        &amp;lt;name&amp;gt;  JAMMA 28핀 배열 회로도&amp;lt;/name&amp;gt;
        &amp;lt;desc&amp;gt;버튼 배선 및 전원 공급 라인 확인을 위한 아케이드 표준 잠마 핀배열도입니다.&amp;lt;/desc&amp;gt;
        &amp;lt;image&amp;gt;./jamma_pinout.png&amp;lt;/image&amp;gt;
    &amp;lt;/game&amp;gt;

    &amp;lt;!-- 3. 텍스트 파일 매핑 (안내 문구) --&amp;gt;
    &amp;lt;game&amp;gt;
        &amp;lt;path&amp;gt;./readme.txt&amp;lt;/path&amp;gt;
        &amp;lt;name&amp;gt;⚠️ 기통 구동 전 필독 주의사항&amp;lt;/name&amp;gt;
        &amp;lt;desc&amp;gt;초기 부팅 전압 설정 및 모니터 주파수(15kHz/31kHz) 변경 시 주의사항 안내문.&amp;lt;/desc&amp;gt;
        &amp;lt;image&amp;gt;./media/images/warning_thumb.png&amp;lt;/image&amp;gt;
    &amp;lt;/game&amp;gt;
&amp;lt;/gameList&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #9b2c2c; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. 확장자별 백엔드 실행 명령어 고도화 (launcher.sh)&lt;/h2&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위와 같이 믹스했을 때,&lt;span&gt;&amp;nbsp;&lt;/span&gt;.sh&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일 외에 일반 이미지나 텍스트 파일은 에뮬스테이션이 자체적으로 열 수 없습니다. 따라서 중앙 실행 런처(launcher.sh)가 인자값(%ROM%)을 받아 확장자별 최적의 리눅스 콘솔 앱으로 안전하게 분기 호출하도록 설계해야 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;런처 스크립트 경로:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;/home/pi/RetroPie/roms/arcade_tools/launcher.sh&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f7fafc; color: #2d3748; text-align: start;&quot;&gt;&lt;code&gt;#!/bin/bash
ROM_FILE=&quot;$1&quot;
EXTENSION=&quot;${ROM_FILE##*.}&quot;

case &quot;$EXTENSION&quot; in
    sh|SH)
        # 스크립트 파일은 그대로 bash 쉘로 독립 실행
        bash &quot;$ROM_FILE&quot;
        ;;
    png|PNG|jpg|JPG)
        # 이미지 파일은 프레임버퍼 뷰어(fbv)를 호출하여 화면 전체에 다이렉트 출력
        fbv -f &quot;$ROM_FILE&quot;
        ;;
    txt|TXT)
        # 텍스트 파일은 ncurses 기반 터미널 대화창(dialog) 텍스트박스로 출력
        dialog --textbox &quot;$ROM_FILE&quot; 22 70
        ;;
    *)
        echo &quot;지원하지 않는 메뉴 포맷입니다.&quot;
        ;;
esac&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background-color: #fff5f5; color: #2d3748; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #9b2c2c;&quot;&gt; ️ 최종 활성화 필수 권한 설정 명령&lt;/div&gt;
&lt;div&gt;런처 및 내부 스크립트가 리눅스 커널 상에서 정상 기동하도록 반드시 터미널에 아래 커맨드를 입력하여 실행 권한을 활성화해야 합니다.&lt;br /&gt;chmod +x /home/pi/RetroPie/roms/arcade_tools/*.sh&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #9b2c2c; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4. 기대효과 및 트러블슈팅&lt;/h2&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본 고도화 아키텍처를 도입하면 에뮬스테이션 UI 상에서는 파일 포맷에 무관하게 통일감 있는 하나의 고품질 메뉴 시스템이 빌드됩니다. 만약 목록 수정 후 정상 노출되지 않는다면 에뮬스테이션 내&lt;span&gt;&amp;nbsp;&lt;/span&gt;UI Settings&lt;span&gt;&amp;nbsp;&lt;/span&gt;➔&lt;span&gt;&amp;nbsp;&lt;/span&gt;Parse Gamelist Only&lt;span&gt;&amp;nbsp;&lt;/span&gt;옵션을 해제한 뒤 리스타트하여 파싱 로그를 확인하십시오.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #9b2c2c; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5. 정석 시나리오: runcommand.sh 기반 독립 기능 메뉴 구성&lt;/h2&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비디오 재생, 매뉴얼 출력, 볼륨 조절 등 에뮬레이터와 무관한 독립된 기능 화면을 에뮬스테이션에 구성하는 가장 정석적이고 구체적인 시나리오입니다. 이 방식은 레트로파이(RetroPie)의 핵심 백엔드 구동기인&lt;span&gt;&amp;nbsp;&lt;/span&gt;runcommand.sh를 응용하여, 롬 파일 자리에 쉘 스크립트(.sh)를 밀어 넣고 구동하는 매커니즘입니다. 순서대로 따라 하면 나만의 시스템 메뉴를 빌드할 수 있습니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;  [1단계] 가상 시스템 등록 (es_systems.cfg)&lt;/h3&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;에뮬스테이션이 내 커스텀 메뉴 폴더와 쉘 스크립트 실행 명령어를 인식하도록 시스템 파일에 새 기종을 선언합니다.&lt;/p&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;수정할 파일 경로:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;/opt/retropie/configs/all/emulationstation/es_systems.cfg&lt;/p&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;파일 가장 아래쪽&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;/systemList&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;바로 위에 아래 코드를 추가합니다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background-color: #f7fafc; color: #2d3748; text-align: start;&quot;&gt;&lt;code&gt;&amp;lt;system&amp;gt;
    &amp;lt;name&amp;gt;arcade_tools&amp;lt;/name&amp;gt;
    &amp;lt;fullname&amp;gt;아케이드 기통 설정 및 매뉴얼&amp;lt;/fullname&amp;gt;
    &amp;lt;path&amp;gt;/home/pi/RetroPie/roms/arcade_tools&amp;lt;/path&amp;gt;
    &amp;lt;extension&amp;gt;.sh .SH&amp;lt;/extension&amp;gt;
    &amp;lt;command&amp;gt;bash /opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ arcade_tools %ROM%&amp;lt;/command&amp;gt;
    &amp;lt;platform&amp;gt;arcade_tools&amp;lt;/platform&amp;gt;
    &amp;lt;theme&amp;gt;arcade_tools&amp;lt;/theme&amp;gt;
&amp;lt;/system&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background-color: #fff5f5; color: #2d3748; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #9b2c2c;&quot;&gt;핵심 포인트&lt;/div&gt;
&lt;div&gt;&amp;lt;command&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;태그를 보면 일반 에뮬레이터(MAME 등) 대신&lt;span&gt;&amp;nbsp;&lt;/span&gt;runcommand.sh를 호출합니다. 뒤에 붙은 인자들은 이 스크립트가 실행될 때 레트로파이 시스템 환경을 유지하며 안전하게 터미널 백엔드에서 돌아가도록 만들어 줍니다.&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;  es_systems.cfg 파일 생성 및 수정 가이드&lt;/h3&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 새로 만들어야 할 때의 파일 정보&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #2d3748; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;확장자까지 포함한 전체 파일명:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;es_systems.cfg&lt;/li&gt;
&lt;li&gt;&lt;b&gt;파일 성격:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;일반 텍스트 파일 (메모장이나 Notepad++ 등으로 편집 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 파일이 이미 있을 때 수정하는 위치 (정석)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존&lt;span&gt;&amp;nbsp;&lt;/span&gt;es_systems.cfg&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일을 메모장으로 열면 아래와 같은 구조로 되어 있습니다. 가장 밑바닥으로 내려가서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;/systemList&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;바로 위에 제공된 코드를 삽입하시면 됩니다.&lt;/p&gt;
&lt;pre class=&quot;xml&quot; style=&quot;background-color: #f7fafc; color: #2d3748; text-align: start;&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;systemList&amp;gt;

    &amp;lt;system&amp;gt;
        &amp;lt;name&amp;gt;arcade_tools&amp;lt;/name&amp;gt;
        &amp;lt;fullname&amp;gt;아케이드 기통 설정 및 매뉴얼&amp;lt;/fullname&amp;gt;
        &amp;lt;path&amp;gt;/home/pi/RetroPie/roms/arcade_tools&amp;lt;/path&amp;gt;
        &amp;lt;extension&amp;gt;.sh .SH&amp;lt;/extension&amp;gt;
        &amp;lt;command&amp;gt;bash /opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ arcade_tools %ROM%&amp;lt;/command&amp;gt;
        &amp;lt;platform&amp;gt;arcade_tools&amp;lt;/platform&amp;gt;
        &amp;lt;theme&amp;gt;arcade_tools&amp;lt;/theme&amp;gt;
    &amp;lt;/system&amp;gt;
&amp;lt;/systemList&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 만약 경로에 파일이 아예 없어서 &quot;새로&quot; 만들어야 한다면?&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #fff5f5; color: #2d3748; text-align: start;&quot;&gt;
&lt;div&gt;경로가 텅 비어있다면 메모장을 켜고 위의 전체 구조(&amp;lt;?xml ...&amp;gt;부터&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;/systemList&amp;gt;까지)를 모두 적어주신 후, 저장할 때 파일 형식을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 파일(*.*)&lt;/b&gt;로 바꾸고 파일명을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;es_systems.cfg&lt;/b&gt;라고 정확히 입력하여 저장하시면 됩니다.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #fff5f5; color: #2d3748; text-align: start;&quot;&gt;
&lt;div&gt;&lt;b&gt;요약:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;최종 결과물 파일명은&lt;span&gt;&amp;nbsp;&lt;/span&gt;es_systems.cfg&lt;span&gt;&amp;nbsp;&lt;/span&gt;입니다!&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;  [2단계] 테마(Theme) 레이아웃 구성&lt;/h3&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;시스템 등록이 끝나면 게임기 선택 화면에서 내 메뉴가 멋지게 표시되도록 UI 폴더를 매핑해야 합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #2d3748; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;폴더 생성:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;현재 사용 중인 테마 폴더 안으로 이동하여 새로운 폴더를 만듭니다. 경로 예시:&lt;span&gt;&amp;nbsp;&lt;/span&gt;/etc/emulationstation/themes/사용중인테마폴더/arcade_tools/&lt;/li&gt;
&lt;li&gt;&lt;b&gt;리소스 복사 및 수정:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;맨땅에서 XML을 짜면 좌표 잡기가 어려우므로, 기존에 있던&lt;span&gt;&amp;nbsp;&lt;/span&gt;retropiemenu&lt;span&gt;&amp;nbsp;&lt;/span&gt;폴더나&lt;span&gt;&amp;nbsp;&lt;/span&gt;ports&lt;span&gt;&amp;nbsp;&lt;/span&gt;폴더 안에 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;theme.xml&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일을 그대로 복사해서 새 폴더에 붙여넣습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;디자인 변경:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;폴더 내에 있는 로고 이미지 파일(logo.png)을 아케이드 툴이나 매뉴얼 느낌이 나는 커스텀 투명 PNG 파일로 교체합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;  [3단계] 기능 구현을 위한 쉘 스크립트(.sh) 작성&lt;/h3&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 1단계에서 지정한 롬 경로(/home/pi/RetroPie/roms/arcade_tools) 폴더를 생성하고, 게임기 안에서 메뉴 리스트로 뜰 실행 파일들을 작성합니다. 파일 이름이 곧 에뮬스테이션 화면에 텍스트 목록으로 출력됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시 1) 아케이드 기통 가이드 영상 플레이어 (1_기통 사용 가이드.sh)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;롬 폴더에 파일을 만들고 아래 코드를 넣습니다. (mpv나&lt;span&gt;&amp;nbsp;&lt;/span&gt;omxplayer&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 리눅스 콘솔 플레이어 활용)&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f7fafc; color: #2d3748; text-align: start;&quot;&gt;&lt;code&gt;#!/bin/bash
# 에뮬스테이션 화면을 잠시 숨기고 풀스크린 가이드 영상 재생
mpv --fullscreen /home/pi/RetroPie/roms/arcade_tools/assets/guide_video.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시 2) 프레임버퍼 기반 매뉴얼 이미지 뷰어 (2_전체 회로도 보기.sh)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;X윈도우(데스크톱) 없이 아케이드 화면에 직접 이미지를 풀스크린으로 띄우는&lt;span&gt;&amp;nbsp;&lt;/span&gt;fbv(Framebuffer Viewer) 도구를 활용합니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f7fafc; color: #2d3748; text-align: start;&quot;&gt;&lt;code&gt;#!/bin/bash
# 16:9 비율로 맞춘 회로도 PNG 파일을 화면 전체에 출력
fbv -f /home/pi/RetroPie/roms/arcade_tools/assets/schematic.png&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시 3) 아케이드 볼륨 디지털 조절기 (3_시스템 볼륨 설정.sh)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;텍스트 기반의 편리한 리눅스 오디오 설정 창인&lt;span&gt;&amp;nbsp;&lt;/span&gt;alsamixer를 띄워 기통 내부 볼륨을 키보드/조이스틱 방향키로 조절하게 만듭니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f7fafc; color: #2d3748; text-align: start;&quot;&gt;&lt;code&gt;#!/bin/bash
alsamixer&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;  [4단계] 권한 부여 및 확인&lt;/h3&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스크립트 파일 작성이 완료되었다면, 에뮬스테이션이 이 파일들을 '실행 가능한 프로그램'으로 인지할 수 있도록 터미널에서 실행 권한(Chmod)을 반드시 부여해야 합니다.&lt;/p&gt;
&lt;pre class=&quot;awk&quot; style=&quot;background-color: #f7fafc; color: #2d3748; text-align: start;&quot;&gt;&lt;code&gt;chmod +x /home/pi/RetroPie/roms/arcade_tools/*.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모든 작업이 끝난 후 에뮬스테이션을 재시작(Restart EmulationStation)하면, 기존 MAME나 네오지오 게임기 목록 사이에 &quot;아케이드 기통 설정 및 매뉴얼&quot; 기종이 당당하게 자리 잡고 있으며, 안으로 들어가면 내가 만든 스크립트 목록이 게임 리스트처럼 정갈하게 뜨게 됩니다. 고른 후 실행하면 검은 화면의 리눅스 터미널 유출 없이 깔끔하게 풀스크린으로 해당 툴이 구동됩니다.&lt;/p&gt;
&lt;div style=&quot;color: #a0aec0; text-align: center;&quot;&gt;EmulationStation Custom Menu Build &amp;amp; Advanced Mixing Guide&lt;/div&gt;</description>
      <category>오락실</category>
      <author>아이스뭐라카노</author>
      <guid isPermaLink="true">https://raspberrystory.tistory.com/276</guid>
      <comments>https://raspberrystory.tistory.com/276#entry276comment</comments>
      <pubDate>Fri, 19 Jun 2026 11:16:28 +0900</pubDate>
    </item>
    <item>
      <title>피코 조이스틱</title>
      <link>https://raspberrystory.tistory.com/275</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/FeralAI/GP2040&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/FeralAI/GP2040&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780387272956&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 - FeralAI/GP2040: Gamepad firmware for Raspberry Pi Pico and other RP2040 microcontrollers supporting Nintendo Switch, XI&quot; data-og-description=&quot;Gamepad firmware for Raspberry Pi Pico and other RP2040 microcontrollers supporting Nintendo Switch, XInput and DirectInput - FeralAI/GP2040&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/FeralAI/GP2040&quot; data-og-url=&quot;https://github.com/FeralAI/GP2040&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cXii7k/dJMb8Qetrk8/iIuZEWQvxoseBoiEO1Ppe0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/b9XnGt/dJMb86n4PEH/SKwtKPSpMEK8YzGEXf1tc0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/FeralAI/GP2040&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/FeralAI/GP2040&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cXii7k/dJMb8Qetrk8/iIuZEWQvxoseBoiEO1Ppe0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/b9XnGt/dJMb86n4PEH/SKwtKPSpMEK8YzGEXf1tc0/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 - FeralAI/GP2040: Gamepad firmware for Raspberry Pi Pico and other RP2040 microcontrollers supporting Nintendo Switch, XI&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Gamepad firmware for Raspberry Pi Pico and other RP2040 microcontrollers supporting Nintendo Switch, XInput and DirectInput - FeralAI/GP2040&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;a href=&quot;https://github.com/OpenStickCommunity/GP2040-CE&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/OpenStickCommunity/GP2040-CE&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780387290493&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 - OpenStickCommunity/GP2040-CE: Multi-Platform Gamepad Firmware for Raspberry Pi Pico and other RP2040 boards&quot; data-og-description=&quot;Multi-Platform Gamepad Firmware for Raspberry Pi Pico and other RP2040 boards - OpenStickCommunity/GP2040-CE&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/OpenStickCommunity/GP2040-CE&quot; data-og-url=&quot;https://github.com/OpenStickCommunity/GP2040-CE&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ce93Rh/dJMb8T96T47/56GWBKVU00QSkexOBHmT0K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dZa4tA/dJMb8UHWtFK/1uipdKAhc7eYqInHR5Sjy1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/OpenStickCommunity/GP2040-CE&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/OpenStickCommunity/GP2040-CE&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ce93Rh/dJMb8T96T47/56GWBKVU00QSkexOBHmT0K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dZa4tA/dJMb8UHWtFK/1uipdKAhc7eYqInHR5Sjy1/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 - OpenStickCommunity/GP2040-CE: Multi-Platform Gamepad Firmware for Raspberry Pi Pico and other RP2040 boards&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Multi-Platform Gamepad Firmware for Raspberry Pi Pico and other RP2040 boards - OpenStickCommunity/GP2040-CE&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;a href=&quot;https://github.com/awalol/DS5Dongle&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/awalol/DS5Dongle&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1781820490217&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 - awalol/DS5Dongle: Turn your Pico 2 W into a DualSense 5 dongle.&quot; data-og-description=&quot;Turn your Pico 2 W into a DualSense 5 dongle. Contribute to awalol/DS5Dongle development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/awalol/DS5Dongle&quot; data-og-url=&quot;https://github.com/awalol/DS5Dongle&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ldKzM/dJMb8XkoIEs/XIuMZUf624nfBumft1hO40/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dbcmY3/dJMb8UHYuKs/7uMJvudCJdBWKD6f1XmE21/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/awalol/DS5Dongle&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/awalol/DS5Dongle&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ldKzM/dJMb8XkoIEs/XIuMZUf624nfBumft1hO40/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dbcmY3/dJMb8UHYuKs/7uMJvudCJdBWKD6f1XmE21/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 - awalol/DS5Dongle: Turn your Pico 2 W into a DualSense 5 dongle.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Turn your Pico 2 W into a DualSense 5 dongle. Contribute to awalol/DS5Dongle 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;</description>
      <category>오락실</category>
      <author>아이스뭐라카노</author>
      <guid isPermaLink="true">https://raspberrystory.tistory.com/275</guid>
      <comments>https://raspberrystory.tistory.com/275#entry275comment</comments>
      <pubDate>Tue, 2 Jun 2026 17:01:32 +0900</pubDate>
    </item>
    <item>
      <title>JST 규격 정리</title>
      <link>https://raspberrystory.tistory.com/274</link>
      <description>&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/ufyei/dJMb99Ni0dM/W4MLHkZ2j5jlwpxCp7LF0K/JST_%EC%BB%A4%EB%84%A5%ED%84%B0_PH_XH_%EA%B7%9C%EA%B2%A9%EC%A0%95%EB%A6%AC.docx?attach=1&amp;amp;knm=tfile.docx&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;JST_커넥터_PH_XH_규격정리.docx&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.01MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;JST 커넥터 XH, PH 규격&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;공통 특징&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JST(Japan Solderless Terminal)는 일본의 대표적인 커넥터 제조사로, XH와 PH는 모두 소형 전선-기판 연결용 커넥터입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;PH 시리즈&lt;/h4&gt;
&lt;div&gt;항목사양
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;피치&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;2.0mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;전류 정격&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;1A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;전압 정격&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;100V AC/DC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;전선 규격&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;AWG 32~28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;용도&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;소형 기기, 배터리 연결, RC 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소형/경량 기기에 널리 사용&lt;/li&gt;
&lt;li&gt;리튬 배터리 커넥터로 매우 흔함 (특히 드론, RC카)&lt;/li&gt;
&lt;li&gt;락(lock) 기구 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;XH 시리즈&lt;/h4&gt;
&lt;div&gt;항목사양
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;피치&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;2.5mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;전류 정격&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;3A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;전압 정격&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;250V AC/DC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;전선 규격&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;AWG 30~22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;용도&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;일반 전자기기, 가전, 산업기기&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PH보다 크고 전류 용량이 높음&lt;/li&gt;
&lt;li&gt;범용성이 높아 PCB 내부 배선에 자주 사용&lt;/li&gt;
&lt;li&gt;락(lock) 기구 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;비교 요약&lt;/h4&gt;
&lt;div&gt;구분PHXH
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;피치&lt;/td&gt;
&lt;td&gt;&lt;b&gt;2.0mm&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;2.5mm&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;전류&lt;/td&gt;
&lt;td&gt;1A&lt;/td&gt;
&lt;td&gt;3A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;크기&lt;/td&gt;
&lt;td&gt;더 작음&lt;/td&gt;
&lt;td&gt;더 큼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;주요 용도&lt;/td&gt;
&lt;td&gt;배터리, 소형기기&lt;/td&gt;
&lt;td&gt;범용 배선&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;1324&quot; data-origin-height=&quot;834&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehsb33/dJMcaf04lv4/mlckfsuk3k17KPyUihibWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehsb33/dJMcaf04lv4/mlckfsuk3k17KPyUihibWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehsb33/dJMcaf04lv4/mlckfsuk3k17KPyUihibWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fehsb33%2FdJMcaf04lv4%2Fmlckfsuk3k17KPyUihibWk%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;1324&quot; height=&quot;834&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;834&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;**피치(Pitch)**는 핀의 끝에서 끝이 아니라, &lt;b&gt;핀 중심에서 바로 옆 핀 중심까지의 거리&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 XH의 2.5mm 피치라면, 핀이 아무리 굵거나 얇아도 각 핀의 중심 간격은 항상 2.5mm로 고정됩니다. 이 규격이 다르면 커넥터가 물리적으로 맞지 않기 때문에, PH(2.0mm)와 XH(2.5mm)는 서로 호환되지 않습니다.&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;1324&quot; data-origin-height=&quot;856&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brwGXi/dJMcag6LFUz/8HjSDxarKTiO6rpjbR61B0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brwGXi/dJMcag6LFUz/8HjSDxarKTiO6rpjbR61B0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brwGXi/dJMcag6LFUz/8HjSDxarKTiO6rpjbR61B0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrwGXi%2FdJMcag6LFUz%2F8HjSDxarKTiO6rpjbR61B0%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;1324&quot; height=&quot;856&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;856&quot;/&gt;&lt;/span&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PH: 피치 2.0mm + 핀 너비 ~0.4mm = &lt;b&gt;캘리퍼스 2.4mm&lt;/b&gt; ✓&lt;/li&gt;
&lt;li&gt;XH: 피치 2.5mm + 핀 너비 ~0.5mm = &lt;b&gt;캘리퍼스 3.0mm&lt;/b&gt; ✓&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 실제로 피치를 캘리퍼스로 정확히 재고 싶다면, 핀 1번 중심 ~ 핀 2번 중심을 맞춰야 하는데 이게 육안으로는 어렵습니다. 실용적으로는 여러 핀에 걸쳐 측정한 후 핀 수로 나누는 방법(예: 핀 1번~5번 끝 재고 4로 나누기)이 더 정확합니다.&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;JST 공식 데이터시트 기준으로 보면 됩니다.&lt;/p&gt;
&lt;div&gt;PHXH
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;피치&lt;/td&gt;
&lt;td&gt;2.0mm&lt;/td&gt;
&lt;td&gt;2.5mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;핀 너비 (폭)&lt;/td&gt;
&lt;td&gt;0.4mm&lt;/td&gt;
&lt;td&gt;0.5mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;핀 두께&lt;/td&gt;
&lt;td&gt;0.4mm&lt;/td&gt;
&lt;td&gt;0.5mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;핀 길이 (접촉부)&lt;/td&gt;
&lt;td&gt;~4mm&lt;/td&gt;
&lt;td&gt;~5mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;하우징 높이&lt;/td&gt;
&lt;td&gt;~6mm&lt;/td&gt;
&lt;td&gt;~8mm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핀 단면은 거의 정사각형(0.4&amp;times;0.4, 0.5&amp;times;0.5)이고, 피치 대비 핀 너비 비율이 약 &lt;b&gt;1/5&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;1324&quot; data-origin-height=&quot;778&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBvwhG/dJMcahEzRPu/mpVUF9Qz8Sfd9GYeOyQDl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBvwhG/dJMcahEzRPu/mpVUF9Qz8Sfd9GYeOyQDl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBvwhG/dJMcahEzRPu/mpVUF9Qz8Sfd9GYeOyQDl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBvwhG%2FdJMcahEzRPu%2FmpVUF9Qz8Sfd9GYeOyQDl0%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;1324&quot; height=&quot;778&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;778&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;&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;PH 핀은 0.4&amp;times;0.4mm 정사각형 단면, 핀 사이 공간은 1.6mm&lt;/li&gt;
&lt;li&gt;XH 핀은 0.5&amp;times;0.5mm 정사각형 단면, 핀 사이 공간은 2.0mm&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 두 규격 모두 &quot;핀 너비 : 핀 간격&quot;이 약 1:4 비율이라 핀끼리 쇼트날 위험 없이 여유가 있는 구조입니다. 버니어로 재면 딱 핀 너비 한 개(0.4 또는 0.5mm)만큼 피치보다 크게 나오는 게 맞는 이유가 여기 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;JST 커넥터란?&lt;/b&gt; &amp;mdash; 개요 및 공통 특징&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PH / XH 규격 비교&lt;/b&gt; &amp;mdash; 피치, 전류, 전압, 전선 규격 비교표&lt;/li&gt;
&lt;li&gt;&lt;b&gt;피치 정의&lt;/b&gt; &amp;mdash; 중심간 거리 개념 설명&lt;/li&gt;
&lt;li&gt;&lt;b&gt;버니어 캘리퍼스 측정&lt;/b&gt; &amp;mdash; 왜 2.4 / 3.0mm가 나오는지 공식 포함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핀 치수 상세&lt;/b&gt; &amp;mdash; 단면 크기, 핀 간격 비율 분석&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 요약&lt;/b&gt; &amp;mdash; 전체 내용 한눈에 보기&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AVR</category>
      <author>아이스뭐라카노</author>
      <guid isPermaLink="true">https://raspberrystory.tistory.com/274</guid>
      <comments>https://raspberrystory.tistory.com/274#entry274comment</comments>
      <pubDate>Mon, 1 Jun 2026 11:41:54 +0900</pubDate>
    </item>
    <item>
      <title>아두이노 보드 정리</title>
      <link>https://raspberrystory.tistory.com/272</link>
      <description>&lt;div id=&quot;filters&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody id=&quot;tbody&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eeedfe; color: #3c3489;&quot;&gt;Classic&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Pro&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ATmega168 / 328P&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;AVR 8-bit&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V / 5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;16 / 32 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eeedfe; color: #3c3489;&quot;&gt;Classic&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Pro Mini&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ATmega168 / 328P&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;AVR 8-bit&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V / 5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;16 / 32 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eeedfe; color: #3c3489;&quot;&gt;Classic&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Uno R3&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ATmega328P&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;AVR 8-bit&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;32 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eeedfe; color: #3c3489;&quot;&gt;Classic&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Nano (Classic)&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ATmega328P&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;AVR 8-bit&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;32 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eeedfe; color: #3c3489;&quot;&gt;Classic&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Leonardo&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ATmega32U4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;AVR 8-bit&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;32 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eeedfe; color: #3c3489;&quot;&gt;Classic&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Micro&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ATmega32U4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;AVR 8-bit&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;32 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eeedfe; color: #3c3489;&quot;&gt;Classic&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Pro Micro&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ATmega32U4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;AVR 8-bit&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V / 5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;32 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eeedfe; color: #3c3489;&quot;&gt;Classic&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Uno R4 Minima&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;RA4M1&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eeedfe; color: #3c3489;&quot;&gt;Classic&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Uno R4 WiFi&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;RA4M1 + ESP32-S3&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e6f1fb; color: #0c447c;&quot;&gt;Mega&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Mega 2560&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ATmega2560&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;AVR 8-bit&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e6f1fb; color: #0c447c;&quot;&gt;Mega&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Mega ADK&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ATmega2560&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;AVR 8-bit&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #faeeda; color: #633806;&quot;&gt;Due&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Due&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;SAM3X8E&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M3&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;512 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #fbeaf0; color: #72243e;&quot;&gt;Zero&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Zero&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ATSAMD21G18&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M0+&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eaf3de; color: #27500a;&quot;&gt;Nano&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Nano Every&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ATMega4809&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;AVR 8-bit&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;5V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;48 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eaf3de; color: #27500a;&quot;&gt;Nano&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Nano ESP32&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ESP32-S3&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Xtensa LX7&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;16 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eaf3de; color: #27500a;&quot;&gt;Nano&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Nano 33 BLE&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;nRF52840&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;1 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eaf3de; color: #27500a;&quot;&gt;Nano&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Nano 33 BLE Sense&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;nRF52840&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;1 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eaf3de; color: #27500a;&quot;&gt;Nano&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Nano RP2040 Connect&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;RP2040 + NINA-W102&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M0+&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;16 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #eaf3de; color: #27500a;&quot;&gt;Nano&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Nano 33 IoT&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;SAMD21 + NINA-W102&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M0+&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e1f5ee; color: #085041;&quot;&gt;MKR&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino MKR Vidor 4000&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;SAMD21 + Intel Cyclone 10&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M0+&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e1f5ee; color: #085041;&quot;&gt;MKR&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino MKR WiFi 1010&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;SAMD21 + NINA-W102&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M0+&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e1f5ee; color: #085041;&quot;&gt;MKR&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino MKR WAN 1310&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;SAMD21 + SX1276&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M0+&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e1f5ee; color: #085041;&quot;&gt;MKR&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino MKR NB 1500&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;SAMD21 + uBlox SARA&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M0+&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e1f5ee; color: #085041;&quot;&gt;MKR&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino MKR GSM 1400&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;SAMD21 + uBlox SARA&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M0+&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e1f5ee; color: #085041;&quot;&gt;MKR&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino MKR1000 WiFi&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;SAMD21 + WINC1500&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M0+&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e1f5ee; color: #085041;&quot;&gt;MKR&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino MKR Zero&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;SAMD21G18A&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M0+&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;256 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #fcebeb; color: #791f1f;&quot;&gt;Portenta&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Portenta X8&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;NXP iMX8MM + STM32H747&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-A53/M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;16 GB (eMMC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #fcebeb; color: #791f1f;&quot;&gt;Portenta&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Portenta C33&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;RA6M5&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M33&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;2 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #fcebeb; color: #791f1f;&quot;&gt;Portenta&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Portenta H7&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;STM32H747XI&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M7/M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;2 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #fcebeb; color: #791f1f;&quot;&gt;Portenta&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Portenta H7 Lite&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;STM32H747XI&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M7/M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;2 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #f1efe8; color: #444441;&quot;&gt;GIGA&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino GIGA R1 WiFi&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;STM32H747AII6&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M7/M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;2 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #faeeda; color: #854f0b;&quot;&gt;Nicla&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Nicla Sense ME&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;nRF52832&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;512 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #faeeda; color: #854f0b;&quot;&gt;Nicla&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Nicla Voice&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;nRF52832 + Syntiant NDP120&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;512 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #faeeda; color: #854f0b;&quot;&gt;Nicla&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Nicla Vision&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;STM32H747AII6&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M7/M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;3.3V&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;2 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e1f5ee; color: #0f6e56;&quot;&gt;Opta&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Opta WiFi&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;STM32H747AII6&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M7/M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;24V DC&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;2 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e1f5ee; color: #0f6e56;&quot;&gt;Opta&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Opta RS485&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;STM32H747AII6&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M7/M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;24V DC&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;2 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;&lt;span style=&quot;background-color: #e1f5ee; color: #0f6e56;&quot;&gt;Opta&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;Arduino Opta Lite&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;STM32H747AII6&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;ARM Cortex-M7/M4&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;24V DC&lt;/td&gt;
&lt;td style=&quot;color: #141413;&quot;&gt;2 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;b&gt;37종&lt;/b&gt;으로 업데이트했습니다. 추가된 3종 보충 설명입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;분류 요약:&lt;/b&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;b&gt;Classic&lt;/b&gt; &amp;mdash; 입문용 표준 보드 (Uno, Leonardo, Nano 등), AVR 기반 5V&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Mega&lt;/b&gt; &amp;mdash; 핀과 메모리가 많은 대형 보드, AVR 기반 5V&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Due&lt;/b&gt; &amp;mdash; 최초 32-bit ARM 보드, 3.3V 주의&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Zero&lt;/b&gt; &amp;mdash; SAMD21 기반 디버깅 지원 보드&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Nano&lt;/b&gt; &amp;mdash; 소형 폼팩터, 최신형은 BLE&amp;middot;WiFi&amp;middot;RP2040&amp;middot;ESP32 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MKR&lt;/b&gt; &amp;mdash; IoT 특화 시리즈 (WiFi, LTE, LoRa, NB-IoT 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Portenta&lt;/b&gt; &amp;mdash; 산업용 고성능 보드, Cortex-M7까지 탑재&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GIGA&lt;/b&gt; &amp;mdash; 대형 폼팩터 고성능 보드 (STM32H7)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Nicla&lt;/b&gt; &amp;mdash; 초소형 센서&amp;middot;AI 엣지 모듈&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Opta&lt;/b&gt; &amp;mdash; PLC 대체용 산업용 보드, 최대 24V DC 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Arduino Pro&lt;/b&gt; &amp;mdash; 3.3V/8MHz 또는 5V/16MHz 두 버전이 있으며, 헤더핀 미납땜 상태로 출시되는 슬림한 폼팩터 보드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Arduino Pro Mini&lt;/b&gt; &amp;mdash; Pro에서 USB 인터페이스를 제거해 더 소형화한 버전으로, 프로그래밍 시 별도 FTDI/USB-Serial 어댑터가 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Arduino Pro Micro&lt;/b&gt; &amp;mdash; SparkFun이 설계하고 Arduino가 공식 채택한 보드로, ATmega32U4를 사용해 USB HID(키보드/마우스) 기능을 기본 지원합니다. Leonardo의 초소형 버전이라고 볼 수 있습니다.&lt;/p&gt;</description>
      <category>아두이노/보드</category>
      <author>아이스뭐라카노</author>
      <guid isPermaLink="true">https://raspberrystory.tistory.com/272</guid>
      <comments>https://raspberrystory.tistory.com/272#entry272comment</comments>
      <pubDate>Tue, 26 May 2026 16:28:55 +0900</pubDate>
    </item>
    <item>
      <title>기울기 체크를 데몬으로 실행하는 코드</title>
      <link>https://raspberrystory.tistory.com/270</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1779250984660&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import socket
import time
import re
import RPi.GPIO as GPIO  # 환경에 맞는 GPIO 라이브러리 사용

# ==========================================
# 1. 환경 설정
# ==========================================
TILT_PIN = 18          # 기울기 센서 연결 PIN
RA_IP = &quot;127.0.0.1&quot;
RA_PORT = 55355        # 레트로아크가 듣는 포트
MY_DAEMON_PORT = 55356 # 외부에서 이 데몬에게 상태를 물어볼 포트 (추가)
STABLE_DURATION = 0.5  # 상태 유지 필수 시간 (0.5초)

# GPIO 초기화
GPIO.setmode(GPIO.BCM)
GPIO.setup(TILT_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# [소켓 1] 레트로아크 상태 조회용 클라이언트 소켓
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(0.3)

# [소켓 2] 외부 프로그램의 질문에 답장해줄 데몬 서버 소켓 (추가)
daemon_server_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
daemon_server_sock.bind((&quot;127.0.0.1&quot;, MY_DAEMON_PORT))
daemon_server_sock.setblocking(False)  # 중요: 요청이 없어도 루프가 멈추지 않게 논블로킹 설정

# ==========================================
# 2. 상태 제어 변수 (핵심)
# ==========================================
# 현재 확정된 하드웨어 상태 (True: 90도 기울어짐 / False: 0도 평평함)
current_stable_state = (GPIO.input(TILT_PIN) == GPIO.LOW)

# 디바운싱용 추적 변수
last_raw_reading = current_stable_state  # 마지막으로 읽은 날것의 값
state_changed_time = time.time()         # 값이 처음 바뀐 시점 기록


# ==========================================
# 3. 비즈니스 로직 함수
# ==========================================
def execute_tilt_change(emulator, angle, rom_name):
    &quot;&quot;&quot;
    기울기 변화가 최종 확정되었을 때 호출되는 함수
    전달 인수: 에뮬레이터(코어), 각도(0 또는 90), 롬파일 이름
    &quot;&quot;&quot;
    print(&quot;\n&quot; + &quot;=&quot;*50)
    print(&quot;  [기울기 변경 이벤트 실행]&quot;)
    print(f&quot;▶ 롬파일 이름 : {rom_name}&quot;)
    print(f&quot;▶ 에뮬레이터  : {emulator}&quot;)
    print(f&quot;▶ 변경된 각도 : {angle}도&quot;)
    print(&quot;=&quot;*50 + &quot;\n&quot;)
    
    # ------------------------------------------------------------------
    # [여기에 실제 화면 회전 명령이나 모터 제어, 베젤 교체 코드를 넣으세요]
    # 예: os.system(f&quot;display_rotate_command --angle {angle}&quot;) 등
    # ------------------------------------------------------------------


def get_retroarch_info():
    &quot;&quot;&quot;
    레트로아크 상태를 조회하여 (게임중여부, 코어명, 롬파일명)을 반환
    &quot;&quot;&quot;
    try:
        sock.sendto(b&quot;GET_STATUS\n&quot;, (RA_IP, RA_PORT))
        data, _ = sock.recvfrom(1024)
        status_str = data.decode('utf-8').strip()
        
        # 레트로아크 응답 포맷 예시: &quot;GET_STATUS PLAYING,fbneo,내게임롬파일.zip&quot;
        if &quot;PLAYING&quot; in status_str:
            # 정규식이나 분할(split)을 이용해 코어와 파일명 추출
            parts = status_str.split(',')
            if len(parts) &amp;gt;= 3:
                emulator = parts[1]                     # 예: fbneo
                rom_path = parts[2]                     # 예: /roms/arcade/sf2.zip
                rom_name = rom_path.split('/')[-1]      # 파일명만 추출 (sf2.zip)
                return True, emulator, rom_name
                
    except (socket.timeout, ConnectionRefusedError):
        pass
    return False, None, None


# ==========================================
# 4. 메인 루프 (데몬 작동)
# ==========================================
print(&quot;안정화 및 외부 조회(UDP) 기능 포함 기울기 감시 데몬 가동 중...&quot;)

try:
    while True:
        # ------------------------------------------------------------------
        # [추가 기능] 외부에서 데몬에게 &quot;너 지금 몇도야?&quot; 라고 물어봤는지 체크
        # ------------------------------------------------------------------
        try:
            message, client_address = daemon_server_sock.recvfrom(1024)
            if message.decode('utf-8').strip() == &quot;GET_ANGLE&quot;:
                # 현재 확정된 stable 상태를 기준으로 90 또는 0을 답장합니다.
                response = &quot;90&quot; if current_stable_state else &quot;0&quot;
                daemon_server_sock.sendto(response.encode('utf-8'), client_address)
        except BlockingIOError:
            # 대기 중인 외부 메시지가 없으면 에러를 뱉지 않고 그냥 통과합니다 (논블로킹 핵심)
            pass

        # ------------------------------------------------------------------
        # 기존 기울기 센서 감시 및 안정화 로직
        # ------------------------------------------------------------------
        # 레트로아크가 게임 구동 중일 때만 기울기 로직 전반을 작동시킵니다.
        is_playing, emulator_name, current_rom = get_retroarch_info()
        
        if is_playing:
            # 센서 물리 값 읽기 (Low=기울어짐=True, High=평평함=False)
            raw_reading = (GPIO.input(TILT_PIN) == GPIO.LOW)
            now = time.time()
            
            # [경우의 수 A] 센서의 날것 값이 방금 막 바뀌었을 때 (진동 시작 혹은 전환 시작)
            if raw_reading != last_raw_reading:
                last_raw_reading = raw_reading
                state_changed_time = now  # 타이머 리셋 (여기서부터 버텨야 함)
                
            # [경우의 수 B] 센서 값이 바뀐 채로 흔들림 없이 설정한 시간(0.5초) 이상 유지되었을 때
            elif (now - state_changed_time) &amp;gt;= STABLE_DURATION:
                
                # 그 유지된 값이 '기존에 최종 확정되어 있던 상태'와 다르다면 수락!
                if raw_reading != current_stable_state:
                    current_stable_state = raw_reading  # 최종 상태 교체
                    
                    # 수락된 최종 상태에 따라 전달할 각도 매핑
                    final_angle = 90 if current_stable_state else 0
                    
                    # 최종 확정된 인수를 들고 대상 함수 실행
                    execute_tilt_change(emulator_name, final_angle, current_rom)
                    
        else:
            # 게임 중이 아닐 때는 센서 타이머와 이전 상태를 초기화하여 
            # 게임 진입 직후 오작동하는 것을 방지합니다.
            last_raw_reading = (GPIO.input(TILT_PIN) == GPIO.LOW)
            state_changed_time = time.time()

        # CPU 점유율 과부하 방지 (약 30Hz 감시)
        time.sleep(0.03)

except KeyboardInterrupt:
    print(&quot;\n데몬 프로그램을 종료합니다.&quot;)
finally:
    GPIO.cleanup()&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;pre id=&quot;code_1779249175376&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod +x /home/pi/tilt_stable_daemon.py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1779249268464&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl status tilt-stable.service
    ```
*   **실시간 인수 전달 로그 모니터링 (가장 유용):**
    코드가 정상 작동하여 0.5초간 안정화된 후 `execute_tilt_change` 함수가 실행되면 터미널에 프린트문이 찍힙니다. 이를 실시간으로 보려면 아래 명령어를 켜두고 테스트하시면 됩니다.
    
```bash
    sudo journalctl -u tilt-stable.service -f
    ```
*   **데몬 코드 수정 후 재시작할 때:**
    파이썬 코드(`tilt_stable_daemon.py`)를 수정하셨다면, 데몬을 한 번 껐다 켜주어야 수정본이 반영됩니다.
    
```bash
    sudo systemctl restart tilt-stable.service
    ```

```&amp;lt;/Step&amp;gt;&amp;lt;/Sequence&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1779249403267&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nano /etc/systemd/system/tilt-stable.service
    ```
  
   Ctrl+X)&quot;&amp;gt;
    열린 나노(nano) 편집기에 아래 내용을 그대로 복사해서 붙여넣습니다. 
    *(만약 라즈베리파이 사용자 이름이 `pi`가 아니거나 파이썬 파일 경로가 다르다면 `User`, `WorkingDirectory`, `ExecStart` 부분을 본인 환경에 맞게 수정해주세요.)*&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;pre id=&quot;code_1779249425012&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi
# 실행할 파이썬 절대경로와 스크립트 파일 지정
ExecStart=/usr/bin/python3 /home/pi/tilt_stable_daemon.py
# 프로그램이 예기치 않게 죽더라도 5초 후에 자동으로 부활시키는 핵심 설정
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target&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;pre id=&quot;code_1779249519794&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ni
[Unit]
Description=RetroArch Tilt Sensor Stable Monitor Daemon
# 네트워크와 오디오, 기본 시스템이 완전히 준비된 후에 데몬이 켜지도록 보장합니다.
After=network.target sound.target

[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi
# 실행할 파이썬 절대경로와 스크립트 파일 지정
ExecStart=/usr/bin/python3 /home/pi/tilt_stable_daemon.py
# 프로그램이 예기치 않게 죽더라도 5초 후에 자동으로 부활시키는 핵심 설정
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

방금 만든 설정 파일을 리눅스 시스템(systemd)에 인식시키고, 기기가 부팅될 때마다 자동으로 켜지도록 등록(Enable)합니다.

bash
sudo systemctl daemon-reload
sudo systemctl enable tilt-stable.service

이제 새로 만든 데몬 서비스를 지금 바로 백그라운드에서 실행시킵니다.

bash
sudo systemctl start tilt-stable.service&lt;/code&gt;&lt;/pre&gt;</description>
      <category>오락실</category>
      <author>아이스뭐라카노</author>
      <guid isPermaLink="true">https://raspberrystory.tistory.com/270</guid>
      <comments>https://raspberrystory.tistory.com/270#entry270comment</comments>
      <pubDate>Wed, 20 May 2026 12:58:51 +0900</pubDate>
    </item>
    <item>
      <title>나노바나나로 만든 나의 이미지</title>
      <link>https://raspberrystory.tistory.com/269</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;d0df33dc-e722-464d-b01e-e7a97b26d4a3.jfif&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HTga8/dJMcaja7FwK/wKL36dzezuZelxhngybxOK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HTga8/dJMcaja7FwK/wKL36dzezuZelxhngybxOK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HTga8/dJMcaja7FwK/wKL36dzezuZelxhngybxOK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHTga8%2FdJMcaja7FwK%2FwKL36dzezuZelxhngybxOK%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;1024&quot; height=&quot;559&quot; data-filename=&quot;d0df33dc-e722-464d-b01e-e7a97b26d4a3.jfif&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나노바나나로&amp;nbsp;만든&amp;nbsp;나의&amp;nbsp;이미지&lt;/p&gt;</description>
      <category>오락실</category>
      <author>아이스뭐라카노</author>
      <guid isPermaLink="true">https://raspberrystory.tistory.com/269</guid>
      <comments>https://raspberrystory.tistory.com/269#entry269comment</comments>
      <pubDate>Tue, 19 May 2026 16:46:55 +0900</pubDate>
    </item>
    <item>
      <title>레트로아크 실행되기전에 코드 삽입 하기</title>
      <link>https://raspberrystory.tistory.com/268</link>
      <description>&lt;pre id=&quot;code_1779194003356&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
import sys
import os

# GPIO 핀 번호 설정 (BCM 방식)
GPIO.setmode(GPIO.BCM)
TILT_PIN = 17
GPIO.setup(TILT_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# cfg 파일 생성 위치
CFG_DIR = &quot;/opt/retropie/configs/all/retroarch/configs&quot;

# 0도(수평) cfg 내용
CFG_CONTENT_0 = &quot;&quot;&quot;\
aspect_ratio_index            = &quot;22&quot;
input_overlay_enable          = &quot;false&quot;
input_overlay_opacity         = &quot;1.000000&quot;
video_integer_scale           = &quot;false&quot;
video_rotation                = &quot;0&quot;
menu_show_advanced_settings   = &quot;true&quot;
video_fullscreen              = &quot;true&quot;
video_window_show_decorations = &quot;false&quot;
video_viewport_bias_x         = &quot;0.5&quot;
video_viewport_bias_y         = &quot;0.5&quot;
&quot;&quot;&quot;

# 90도(수직) cfg 내용
CFG_CONTENT_90 = &quot;&quot;&quot;\
aspect_ratio_index            = &quot;22&quot;
input_overlay_enable          = &quot;false&quot;
input_overlay_opacity         = &quot;1.000000&quot;
video_integer_scale           = &quot;false&quot;
video_rotation                = &quot;3&quot;
menu_show_advanced_settings   = &quot;true&quot;
video_fullscreen              = &quot;true&quot;
video_window_show_decorations = &quot;false&quot;
video_viewport_bias_x         = &quot;0.5&quot;
video_viewport_bias_y         = &quot;0.5&quot;
&quot;&quot;&quot;

def create_file_for_0_degree(emulator_type, rom_name):
    &quot;&quot;&quot; 0도(수평)일 때 실행할 파일 생성 로직 &quot;&quot;&quot;
    print(f&quot;[INFO] 0도 수평 감지 | 에뮬레이터: {emulator_type} | 롬파일명: {rom_name}&quot;)

    if emulator_type == &quot;RetroArch&quot;:
        cfg_filename = f&quot;{rom_name}.cfg&quot;
        cfg_path = os.path.join(CFG_DIR, cfg_filename)

        with open(cfg_path, &quot;w&quot;) as f:
            f.write(CFG_CONTENT_0)

        print(f&quot;[INFO] 0도 cfg 파일 생성 완료: {cfg_path}&quot;)
    else:
        print(f&quot;[INFO] RetroArch가 아니므로 파일 생성 생략 ({emulator_type})&quot;)

def create_file_for_90_degree(emulator_type, rom_name):
    &quot;&quot;&quot; 90도(수직)일 때 실행할 파일 생성 로직 &quot;&quot;&quot;
    print(f&quot;[INFO] 90도 수직 감지 | 에뮬레이터: {emulator_type} | 롬파일명: {rom_name}&quot;)

    if emulator_type == &quot;RetroArch&quot;:
        cfg_filename = f&quot;{rom_name}.cfg&quot;
        cfg_path = os.path.join(CFG_DIR, cfg_filename)

        with open(cfg_path, &quot;w&quot;) as f:
            f.write(CFG_CONTENT_90)

        print(f&quot;[INFO] 90도 cfg 파일 생성 완료: {cfg_path}&quot;)
    else:
        print(f&quot;[INFO] RetroArch가 아니므로 파일 생성 생략 ({emulator_type})&quot;)

def main():
    # runcommand로부터 인자가 정상적으로 넘어왔는지 확인
    # 인자가 없으면 기본값(Unknown) 지정
    system_arg = sys.argv[1] if len(sys.argv) &amp;gt; 1 else &quot;unknown&quot;
    rom_path_arg = sys.argv[2] if len(sys.argv) &amp;gt; 2 else &quot;unknown.zip&quot;

    # 1. 에뮬레이터 종류 판별 로직
    system_lower = system_arg.lower()
    if &quot;libretro&quot; in system_lower or system_lower in [&quot;arcade&quot;, &quot;fba&quot;, &quot;neogeo&quot;]:
        emulator_type = &quot;RetroArch&quot;
    elif &quot;mame&quot; in system_lower:
        emulator_type = &quot;MAME&quot;
    else:
        emulator_type = f&quot;Other({system_arg})&quot;

    # 2. 롬 파일 이름 추출 로직
    base_name = os.path.basename(rom_path_arg)   # 예: 'mslug.zip'
    rom_name, _ = os.path.splitext(base_name)    # 예: 'mslug'

    try:
        # 센서 값 샘플링 - 채터링 방지
        low_count = 0
        high_count = 0
        for _ in range(5):
            if GPIO.input(TILT_PIN) == GPIO.LOW:
                low_count += 1
            else:
                high_count += 1
            time.sleep(0.02)

        # 각도 판별 및 cfg 파일 생성
        if low_count &amp;gt; high_count:
            create_file_for_90_degree(emulator_type, rom_name)
        else:
            create_file_for_0_degree(emulator_type, rom_name)

    except Exception as e:
        print(f&quot;[ERROR] 스크립트 실행 중 오류 발생: {e}&quot;, file=sys.stderr)

    finally:
        GPIO.cleanup(TILT_PIN)

if __name__ == &quot;__main__&quot;:
    main()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1779146012276&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nano /opt/retropie/configs/all/runcommand-onstart.sh

#!/bin/bash

# $1: 시스템 이름(예: arcade, mame-libretro)
# $3: 롬 파일의 전체 경로(예: /home/pi/RetroPie/roms/arcade/mslug.zip)
# 이 두 가지 정보를 파이썬 스크립트의 매개변수로 넘겨줍니다.
python3 /home/pi/check_tilt.py &quot;$1&quot; &quot;$3&quot;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>오락실</category>
      <author>아이스뭐라카노</author>
      <guid isPermaLink="true">https://raspberrystory.tistory.com/268</guid>
      <comments>https://raspberrystory.tistory.com/268#entry268comment</comments>
      <pubDate>Tue, 19 May 2026 08:13:41 +0900</pubDate>
    </item>
    <item>
      <title>배열 포인터 가끔 사용해서 기억 안나는것 정리</title>
      <link>https://raspberrystory.tistory.com/267</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;int *arr = new int [3*5];&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;int (*ptr)[5] = (int(*)[5])arr;&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;int (*ptr)[4][5] = (int(*)[4][5])array;&lt;/p&gt;</description>
      <category>C, C++</category>
      <author>아이스뭐라카노</author>
      <guid isPermaLink="true">https://raspberrystory.tistory.com/267</guid>
      <comments>https://raspberrystory.tistory.com/267#entry267comment</comments>
      <pubDate>Thu, 9 Apr 2026 13:17:14 +0900</pubDate>
    </item>
  </channel>
</rss>