아두이노 우노 Q 스위치 (ON/OFF 토글)

ON/OFF 스위치(토글 스위치라고도 함)는 뒤집어졌을 때 그 위치에 머물러 있으며, 누르기 버튼과 달리 누르고 있을 때만 활성화됩니다. 이 튜토리얼에서는 Arduino UNO Q를 사용하여 ON/OFF 스위치의 상태를 읽고, 토글될 때를 감지하고, Telegram을 통해 원격으로 상태를 확인하는 방법을 배우게 됩니다.

Arduino UNO Q - switch on/off toggle

필요한 하드웨어

1×Arduino UNO Q 아마존
1×USB Cable for Arduino Uno Q 아마존
1×ON/OFF Square 스위치 아마존
1×(또는) ON/OFF Round 스위치 아마존
1×(또는) On/Off Switch Module 아마존
1×Wires 아마존
1×(옵션) 수축 튜브 세트 아마존
1×(옵션) 전기 인두기 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

ON/OFF 스위치 정보

핀아웃

대부분의 일반적인 ON/OFF 스위치는 두 개의 핀을 가지고 있으며, 어느 핀을 연결하는지는 중요하지 않습니다.

on/off switch 사용법 핀아웃

작동 방식

  • 한 핀을 GND에 연결하고 다른 핀을 INPUT_PULLUP으로 구성된 Arduino UNO Q 핀에 연결합니다.
  • 스위치가 ON → 핀이 LOW를 읽음
  • 스위치가 OFF → 핀이 HIGH를 읽음

※ 주의:

누르기 버튼처럼 ON/OFF 스위치도 디바운싱이 필요합니다. ezButton 라이브러리는 내부적으로 디바운싱을 처리하므로 추가 코드가 필요하지 않습니다.

배선도

Arduino UNO Q on/off switch 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

스위치 핀에 와이어를 납땜하고 열수축 튜브로 연결을 덮어 신뢰할 수 있고 내구성 있는 연결을 만드는 것이 좋습니다.

MCU 코드 — ON/OFF 스위치

Arduino UNO Q는 두 개의 프로세서를 가지고 있습니다: STM32 MCU(실시간 하드웨어 제어를 처리)와 Qualcomm MPU(Debian Linux 실행). 이 섹션에서는 STM32 MCU만 프로그래밍됩니다 — Linux 쪽은 유휴 상태입니다. 나중 섹션에서는 두 프로세서가 함께 작동하는 방법을 보여줄 것입니다.

ezButton 라이브러리는 디바운싱과 상태 읽기를 모두 처리합니다. OFF→ON 전환을 감지하려면 isPressed()를 사용하고 ON→OFF에는 isReleased()를 사용합니다:

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-switch */ #include <ezButton.h> ezButton toggleSwitch(7); // create ezButton object attached to pin 7 void setup() { toggleSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { toggleSwitch.loop(); // MUST call the loop() function first if (toggleSwitch.isPressed()) { // switch just turned ON (OFF → ON transition) // TO DO: add your ON action here } if (toggleSwitch.isReleased()) { // switch just turned OFF (ON → OFF transition) // TO DO: add your OFF action here } int state = toggleSwitch.getState(); if (state == HIGH) { // switch is currently OFF // TO DO: continuous OFF action here } else { // switch is currently ON // TO DO: continuous ON action here } }

※ 주의:

두 가지 일반적인 사용 사례:

  • 레벨 기반: getState() == LOW를 확인하여 스위치가 현재 ON인지 알 수 있습니다.
  • 엣지 기반: OFF→ON에는 isPressed()를 사용하고 ON→OFF 전환에는 isReleased()를 사용합니다.

빠른 단계

  • 처음 Arduino UNO Q를 사용하신가요? 계속하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.
  • 스위치 배선: 배선도에 따라 한 핀을 GND에 연결하고 다른 핀을 핀 7에 연결합니다.
  • 연결: USB-C 케이블로 Arduino UNO Q를 컴퓨터에 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q를 감지할 때까지 기다립니다.
  • 새 앱 만들기: Create New App 버튼을 클릭합니다.
create new app in 아두이노 app lab on Arduino UNO Q
  • 앱 이름을 지정합니다(예: DIYables_Switch).
  • Create를 클릭하여 확인합니다.
  • 새 앱 내에 생성된 폴더와 파일 세트를 볼 수 있습니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • sketch/sketch.ino 파일을 찾습니다 — 이곳이 MCU 스케치를 붙여넣을 위치입니다.
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 스케치 파일에 붙여넣습니다. 다른 파일은 기본값으로 유지합니다.
    • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
    add sketch 라이브러리 in 아두이노 app lab on Arduino UNO Q
    • Search for ezButton created by ArduinoGetStarted.com and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    ezButton ArduinoGetStarted.com

    Button library supports debounce, pressed/released events and the press counting. It is easy to use with multiple buttons. The library can be used for push-button, momentary switches, toggle switch, magnetic contact switch (door sensor)... It is designed for not only beginners but also experienced users.

    1.0.6
    Install
    More Info
    • Search for Arduino_RouterBridge created by Arduino and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    Arduino_RouterBridge Arduino

    This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

    0.4.1
    Install
    More Info
    • 업로드: Arduino App Lab에서 실행 버튼을 클릭하여 STM32로 컴파일하고 업로드합니다.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q
    • 스위치를 ON OFF 사이에서 전환합니다. 스위치 상태 및 전환은 다음 섹션의 Bridge Monitor를 통해 로깅됩니다.
    • Pro Tip: 각 블록 내부에 자신의 코드를 추가합니다 — 예를 들어, 스위치가 ON일 때 LED를 켜고 OFF일 때 끕니다.

    Linux + MCU Bridge 프로그래밍

    Arduino UNO Q는 함께 작동하는 두 개의 프로세서를 가지고 있습니다: MPU(Qualcomm, Debian Linux 실행)와 MCU(STM32, Zephyr OS 및 Arduino 스케치 실행). 이들은 Arduino_RouterBridge 라이브러리를 통해 RPC를 사용하여 통신합니다 — 원본 직렬 포트를 통해서는 절대 안 됩니다.

    • 스위치는 MCU(STM32)에 연결됩니다 — STM32의 디지털 입력 핀에 배선되어 있습니다. MCU는 ezButton 라이브러리를 사용하여 스위치를 읽고 디바운싱합니다.
    • MPU는 스위치를 직접 읽을 수 없습니다Bridge.call()을 통해 MCU에서 상태를 요청해야 합니다. MCU가 즉시 응답합니다.
    • MPU는 Wi-Fi를 가지고 있습니다 — MPU가 Wi-Fi를 포함한 전체 Debian Linux를 실행하기 때문에 필요에 따라 Telegram을 통해 스위치 상태를 보고할 수 있습니다.
    • 통신: Linux 쪽의 Bridge.call()이 MCU 쪽의 Bridge.provide() 함수를 호출합니다.
    • ⚠️ 예약됨: /dev/ttyHS1(Linux)과 Serial1(MCU)은 Arduino Router에 의해 사용됩니다 — 절대 직접 열지 마세요.

    요약하면: MPU가 스위치 상태 요청 → MCU가 핀 읽음 → MCU가 ON 또는 OFF 보고 → MPU가 로깅하거나 전달합니다.

    MCU 스케치 — Bridge 및 Monitor 출력이 있는 스위치:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-switch */ #include "Arduino_RouterBridge.h" #include <ezButton.h> ezButton toggleSwitch(7); void get_switch_state() { int state = toggleSwitch.getState(); if (state == HIGH) Monitor.println("Switch: OFF"); else Monitor.println("Switch: ON"); } void setup() { toggleSwitch.setDebounceTime(50); Bridge.begin(); Monitor.begin(); Bridge.provide("get_switch_state", get_switch_state); Monitor.println("ON/OFF Switch Bridge ready"); } void loop() { toggleSwitch.loop(); if (toggleSwitch.isPressed()) Monitor.println("Switch: OFF -> ON"); if (toggleSwitch.isReleased()) Monitor.println("Switch: ON -> OFF"); }

    Python 스크립트(Arduino App Lab) — Linux에서 스위치 상태 폴링:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-switch */ from arduino.app_utils import * import time def loop(): while True: state = Bridge.call("get_switch_state") print(f"Switch state: {state}") time.sleep(2) App.run(user_loop=loop)
    • 주의: MCU 스케치에서 Bridge.begin()이 호출되었고 Python 스크립트를 Linux 쪽에서 실행하기 전에 스케치가 업로드되었는지 확인하세요.
    • ⚠️ 경고: /dev/ttyHS1(Linux)을 직접 열거나 코드에서 Serial1(MCU)을 사용하지 마세요 — 이들은 Arduino Router에 의해 예약되어 있으며 접근하면 Bridge가 손상됩니다.

    빠른 단계

    • MCU 스케치 업로드: Arduino App Lab을 열고 새 앱을 만들고 위의 Bridge MCU 스케치를 sketch/sketch.ino에 붙여넣고 ezButtonArduino_RouterBridge 라이브러리를 설치한 후 실행을 클릭합니다.
    • Python 스크립트 추가: 위의 Python 코드를 동일한 앱의 Python 탭에 붙여넣습니다.
    • 앱 실행: 실행을 클릭합니다 — Python 쪽은 2초마다 스위치 상태를 폴링합니다.
    • 스위치를 ON OFF 사이에서 전환합니다.
    • 콘솔 확인: 콘솔 탭을 열고 → MCU Monitor 서브탭에서 실시간으로 로깅된 전환을 확인합니다.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Message (Enter to send a message to "Newbiely" on usb(2820070321))
    New Line
    9600 baud
    ON/OFF Switch Bridge ready Switch: OFF -> ON Switch: ON -> OFF Switch: OFF -> ON

    Telegram 통합

    Telegram을 통해 어디서나 원격으로 현재 스위치 상태를 확인합니다.

    아직 Telegram 봇이 없다면, 계속하기 전에 아두이노 우노 Q - 텔레그램 봇을 참조하여 봇 토큰을 얻으세요.

    MCU 스케치: 이전 Bridge 섹션에서의 동일한 MCU 스케치를 유지합니다 — 변경사항이 없습니다. 계속하기 전에 STM32에서 이미 업로드되고 실행 중인지 확인합니다.

    Python 스크립트(Arduino App Lab) — 스위치 상태를 위한 Telegram 봇:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-switch */ from arduino.app_utils import * import requests import time BOT_TOKEN = "YOUR_BOT_TOKEN" API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}" last_update_id = 0 def send_message(chat_id, text): requests.post(f"{API_URL}/sendMessage", json={"chat_id": chat_id, "text": text}) def get_updates(): global last_update_id resp = requests.get(f"{API_URL}/getUpdates", params={"offset": last_update_id + 1, "timeout": 5}) return resp.json().get("result", []) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() if text == "/state": state = Bridge.call("get_switch_state") send_message(chat_id, f"Switch is currently: {state}") else: send_message(chat_id, "Commands:\n/state — check switch state (ON or OFF)") time.sleep(1) App.run(user_loop=loop)
    • 주의: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 얻은 토큰으로 바꾸세요.
    • /state를 보내 스위치가 현재 ON인지 OFF인지 확인합니다.

    빠른 단계

    • MCU 스케치 업로드: 이전 섹션에서 Bridge MCU 스케치를 사용합니다(아직 업로드하지 않았다면 먼저 업로드합니다).
    • Telegram 스크립트 붙여넣기: 위의 Python 코드를 Arduino App Lab의 앱 Python 탭에 복사합니다.
    • 토큰 설정: 스크립트에서 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꿉니다.
    • 앱 실행: 실행을 클릭합니다 — 봇이 Telegram 메시지를 수신 대기합니다.
    • 테스트: 스위치를 ON으로 전환한 후 /state를 보내 "ON"을 읽는지 확인합니다.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /state [2026-04-29 12:00:01] Switch is currently: ON [2026-04-29 12:03:20] Telegram: /state [2026-04-29 12:03:20] Switch is currently: OFF
    Telegram
    Telegram 12:45
    Welcome to Telegram!
    ArduinoBot 10:19
    Chatting with Arduino...
    telegram-botfather
    BotFather Yesterday
    Your bot has been created.

    ArduinoBot

    bot
    Today
    /state
    10:15 AM ✓✓
    Switch is currently: ON
    10:16 AM
    /state
    10:17 AM ✓✓
    Switch is currently: OFF
    10:18 AM

    OpenClaw 통합

    아두이노 우노 Q - OpenClaw 튜토리얼의 지침을 참조하여 이 튜토리얼에 OpenClaw를 적용할 수 있습니다.

    애플리케이션/프로젝트 아이디어

    • Telegram 보고 모드 스위치: 물리적 스위치를 사용하여 두 가지 작동 모드 사이를 전환합니다 — Telegram을 통해 어떤 모드가 활성화되어 있는지 확인합니다.
    • 어플라이언스 원격 모니터: 스위치를 어플라이언스를 제어하는 릴레이에 배선합니다 — 원격으로 ON/OFF 상태를 확인합니다.
    • 보안 게이트: 스위치를 뒤집어 센서 기반 경보를 활성화 또는 비활성화합니다 — Telegram이 현재 활성화된 상태를 보고합니다.
    • 랩 벤치 전원: 스위치를 사용하여 일련의 출력을 활성화/비활성화합니다 — Telegram에서 모니터링합니다.
    • 스마트 홈 트리거: 스위치를 전환하여 MPU의 Linux 쪽에서 실행 중인 예약된 작업을 시작하거나 중지합니다.

    도전 자신

    • 쉬움: LED를 회로에 추가하여 스위치가 ON일 때 켜지고 OFF일 때 꺼집니다.
    • 중간: Bridge 스케치를 확장하여 스위치가 토글된 횟수를 추적하고 get_toggle_count()를 통해 개수를 노출합니다.
    • 고급: 스위치 상태가 변경될 때마다 자동으로 메시지를 보내는 Telegram 봇을 구축합니다 — Python에서 백그라운드 모니터링 루프를 사용합니다.