아두이노 우노 Q 버튼으로 LED 제어
이 튜토리얼에서는 Arduino UNO Q에서 버튼을 사용하여 LED를 제어하는 방법을 보여줍니다. 두 가지 응용 프로그램이 다루어집니다:
응용 프로그램 1 — LED는 버튼 상태를 따릅니다:
- 버튼을 누르면 LED가 켜집니다
- 버튼을 놓으면 LED가 꺼집니다
응용 프로그램 2 — 각 누름에서 LED가 토글됩니다:
- 각 버튼 누름은 LED를 ON과 OFF 사이에서 전환합니다
- 버튼을 놓아도 LED 상태는 변경되지 않습니다
- 디바운스 없음 및 디바운스 버전 포함 (ezButton 사용)

필요한 하드웨어
| 1 | × | Arduino UNO Q | 아마존 | |
| 1 | × | USB Cable for Arduino Uno Q | 아마존 | |
| 1 | × | 캡이 있는 버튼 | 쿠팡 | 아마존 | |
| 1 | × | (또는) Panel-mount Push Button | 아마존 | |
| 1 | × | 푸시 버튼 모듈 | 아마존 | |
| 1 | × | LED | 쿠팡 | 아마존 | |
| 1 | × | LED Module | 아마존 | |
| 1 | × | 220 ohm Resistor | 아마존 | |
| 1 | × | 브레드보드 | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Sensors/Servo Expansion Shield for Arduino Uno | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 브레드보드 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 케이스 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |
배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
응용 프로그램 1 — LED는 버튼 상태를 따릅니다
MCU 코드
Arduino UNO Q에는 두 개의 프로세서가 있습니다: STM32 MCU (실시간 하드웨어 제어) 및 Qualcomm MPU (Debian Linux 실행). 이 섹션에서는 STM32 MCU만 프로그래밍됩니다. Linux 측은 유휴 상태입니다. 나중 섹션에서는 두 프로세서가 함께 작동하는 방법을 보여줍니다.
버튼이 눌러지면 (LOW), LED가 켜집니다. 놓아지면 (HIGH), LED가 꺼집니다:
빠른 단계
- Arduino UNO Q를 처음 사용하세요? 계속하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.
- 구성 요소를 배선합니다: 배선도에 따라 버튼을 핀 7에, LED (220 Ω 저항 포함)를 핀 3에 연결합니다.
- 연결: Arduino UNO Q를 USB-C 케이블로 컴퓨터에 연결합니다.
- Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q를 감지할 때까지 기다립니다.
- 새 앱 만들기: 새 앱 만들기 버튼을 클릭합니다.

- 앱에 이름을 지정합니다 (예: DIYables_ButtonLED).
- 만들기를 클릭하여 확인합니다.
- 새 앱 내에서 생성된 폴더 및 파일 집합이 표시됩니다.

- sketch/sketch.ino 파일을 찾습니다. 이것이 MCU 스케치를 붙여넣을 위치입니다.

- 버튼을 누르고 있습니다 — LED가 켜져야 합니다. 놓으세요 — LED가 꺼져야 합니다.
응용 프로그램 2 — 각 버튼 누름에서 LED 토글
MCU 코드 — 디바운스 없음
이 버전은 HIGH→LOW 전환을 감지하고 LED를 토글합니다. 디바운스 없이 빠른 접점 바운싱은 누름당 여러 토글을 일으킬 수 있습니다:
빠른 단계
- 응용 프로그램 1에서 같은 배선과 앱을 사용합니다.
- 스케치를 위의 코드로 바꾸고 실행을 클릭합니다.
- 버튼을 여러 번 누르고 놓습니다 — LED가 매번 토글되어야 합니다.
- 부정확한 동작 (이중 토글)을 볼 수 있습니다 — 이것은 버튼 바운싱으로 인한 것입니다.
MCU 코드 — 디바운스 포함 (ezButton 사용)
ezButton 라이브러리는 디바운싱을 자동으로 처리합니다 — 각 버튼 누름은 정확히 하나의 isPressed() 이벤트를 트리거합니다:
빠른 단계
- 위에서 같은 배선과 앱을 사용합니다.
- 스케치를 디바운스 버전으로 바꾸고 실행을 클릭합니다.
- Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.

- Search for ezButton created by ArduinoGetStarted.com and click the Install button.
- Search for Arduino_RouterBridge created by Arduino and click the Install button.
- 버튼을 여러 번 누르고 놓습니다 — LED는 이제 누름당 정확히 한 번 토글됩니다.
Linux + MCU Bridge 프로그래밍
Arduino UNO Q에는 함께 작동하는 두 개의 프로세서가 있습니다: MPU (Qualcomm, Debian Linux 실행) 및 MCU (STM32, Zephyr OS로 Arduino 스케치 실행). 그들은 Arduino_RouterBridge 라이브러리를 통해 RPC를 사용하여 통신합니다. 절대 원본 시리얼 포트를 통해 통신하지 않습니다.
- 버튼 및 LED는 MCU (STM32)에 연결됩니다 — 버튼은 디지털 입력 핀에, LED는 STM32의 디지털 출력 핀에 배선됩니다. MCU는 토글 논리 및 ezButton을 사용한 디바운싱을 처리합니다.
- MPU는 버튼을 읽거나 LED를 직접 제어할 수 없습니다 — Bridge.call()을 통해 MCU에서 LED 상태를 요청해야 합니다.
- MPU는 Wi-Fi입니다 — MPU가 Wi-Fi가 있는 전체 Debian Linux를 실행하기 때문에 Telegram을 통해 LED 상태를 보고할 수 있습니다.
- 통신: Linux 측의 Bridge.call()은 MCU 측의 Bridge.provide() 함수를 호출합니다
- ⚠️ 예약됨: /dev/ttyHS1 (Linux) 및 Serial1 (MCU)는 Arduino Router에서 사용합니다 — 절대 직접 열지 마십시오
요약하면: MPU가 LED 상태를 요청 → MCU가 현재 상태를 읽음 → MCU가 ON 또는 OFF를 보고 → MPU가 기록하거나 전달합니다.
MCU 스케치 — Bridge 및 Monitor 출력이 있는 버튼-LED 토글:
Python 스크립트 (Arduino App Lab) — Linux에서 LED 상태 폴링:
- 참고: Bridge.begin()이 MCU 스케치에서 호출되는지 확인하고 Linux 측에서 Python 스크립트를 실행하기 전에 스케치가 업로드되었는지 확인합니다.
- ⚠️ 경고: Linux에서 /dev/ttyHS1을 직접 열거나 MCU에서 Serial1을 사용하지 마십시오 — 이들은 Arduino Router에서 예약되어 있으며 액세스하면 Bridge가 손상됩니다.
빠른 단계
- MCU 스케치 업로드: Arduino App Lab을 열고, 새 앱을 만들고, Bridge MCU 스케치를 위의 sketch/sketch.ino에 붙여넣고, ezButton 및 Arduino_RouterBridge 라이브러리를 설치하고, 실행을 클릭합니다.
- Python 스크립트 추가: 위의 Python 코드를 같은 앱의 Python 탭에 붙여넣습니다.
- 앱 실행: 실행을 클릭합니다 — Python 측이 3초마다 LED 상태를 폴링합니다.
- 버튼을 여러 번 누릅니다 LED를 토글합니다.
- 콘솔 확인: 콘솔 탭을 열고 → MCU Monitor 서브탭으로 실시간으로 토글 이벤트가 기록되는 것을 확인합니다.
App Lab 콘솔 출력
Telegram 통합
Telegram을 통해 어디에서나 현재 LED 상태를 원격으로 확인합니다.
아직 Telegram 봇이 없으면 계속하기 전에 아두이노 우노 Q - 텔레그램 봇을 참고하여 봇 토큰을 획득합니다.
MCU 스케치: 이전 Bridge 섹션의 같은 MCU 스케치를 유지합니다 — 변경 필요 없음. STM32에 이미 업로드되어 있고 실행 중인지 확인합니다.
Python 스크립트 (Arduino App Lab) — LED 상태용 Telegram 봇:
- 참고: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 얻은 토큰으로 바꿉니다.
- /state를 보내 LED가 현재 ON 또는 OFF인지 확인합니다.
빠른 단계
- MCU 스케치 업로드: 이전 섹션의 Bridge MCU 스케치를 사용합니다 (아직 완료하지 않았으면 먼저 업로드합니다).
- Telegram 스크립트를 붙여넣습니다: 위의 Python 코드를 Arduino App Lab의 앱의 Python 탭에 복사합니다.
- 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꿉니다.
- 앱 실행: 실행을 클릭합니다 — 봇이 Telegram 메시지를 수신 대기합니다.
- 테스트: 버튼을 눌러 LED를 토글한 다음 /state를 보냅니다 — 상태가 일치하는지 확인합니다.
App Lab 콘솔 출력
ArduinoBot
OpenClaw 통합
이 튜토리얼을 OpenClaw에 적용하려면 아두이노 우노 Q - OpenClaw 튜토리얼의 지시를 참고합니다
응용 프로그램/프로젝트 아이디어
- Telegram LED 모니터: 물리 버튼을 눌러 램프를 토글하고 Telegram에서 원격으로 상태 확인
- 물리 경보 토글: 버튼을 사용하여 경보를 활성화/비활성화하고 어디에서나 상태 확인
- 프레젠테이션 컨트롤러: 버튼으로 디스플레이 또는 알림 표시등을 토글하면서 원격으로 상태 확인
- 야간 모드 스위치: 버튼을 눌러 기기의 야간 모드를 토글합니다. Telegram을 통해 모니터
- 액세스 확인: 버튼을 눌러 진입을 확인합니다. Telegram을 통해 LED/게이트 상태 확인
도전
- 쉬움: 첫 번째 LED가 켜질 때 꺼지는 두 번째 LED를 추가합니다 (LED 교대)
- 중간: Bridge 스케치를 확장하여 총 버튼 누름 수를 계산하고 개수를 get_press_count()로 노출합니다
- 고급: LED 상태가 변경될 때마다 자동으로 알림을 보내는 Telegram 봇을 빌드합니다 — Python에서 모니터링 루프를 사용하여 상태를 폴링하고 이전 값과 비교합니다