STM32 MCU는 ezButton 라이브러리를 통해 디바운싱으로 키패드 핀을 직접 읽습니다
Qualcomm MPU는 Debian Linux를 실행하며 Wi-Fi, Python, 클라우드 연결을 처리합니다
이 섹션에서는 MCU만 프로그래밍됩니다 — Linux 측은 유휴 상태입니다. 나중의 섹션에서는 두 프로세서가 Bridge를 통해 함께 작동하는 방법을 보여줍니다.
1x4 키패드의 각 키는 핀과 GND 사이에 연결된 버튼처럼 작동합니다. ezButton 라이브러리는 4개 키 모두에 대해 자동으로 디바운싱을 처리합니다.
/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-keypad-1x4 */#include <ezButton.h>#define KEY_NUM 4#define PIN_KEY_1 3 // Arduino UNO Q MCU pin connected to key 1#define PIN_KEY_2 2 // Arduino UNO Q MCU pin connected to key 2#define PIN_KEY_3 5 // Arduino UNO Q MCU pin connected to key 3#define PIN_KEY_4 4 // Arduino UNO Q MCU pin connected to key 4ezButton keypad_1x4[KEY_NUM] = {ezButton(PIN_KEY_1),ezButton(PIN_KEY_2),ezButton(PIN_KEY_3),ezButton(PIN_KEY_4)};voidsetup() {Serial.begin(115200);delay(1500);for (byte i = 0; i < KEY_NUM; i++) { keypad_1x4[i].setDebounceTime(100); }Serial.println("Arduino UNO Q Keypad 1x4 ready");}voidloop() {int key = getKeyPressed();if (key) {Serial.print("Key pressed: ");Serial.println(key); }}int getKeyPressed() {for (byte i = 0; i < KEY_NUM; i++) keypad_1x4[i].loop(); // MUST call loop() firstfor (byte i = 0; i < KEY_NUM; i++) {if (keypad_1x4[i].isPressed())return (i + 1); }return 0;}
빠른 단계
Arduino UNO Q 처음이신가요? 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.
연결하기: 위의 배선도와 같이 1x4 키패드를 Arduino UNO Q MCU에 연결합니다.
Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q를 감지할 때까지 기다립니다 — 처음 시작할 때는 몇 분이 걸릴 수 있습니다.
새 앱 만들기:Create New App 버튼을 클릭합니다.
앱에 이름을 지정합니다(예: Keypad1x4).
Create를 클릭하여 확인합니다.
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.
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
ezButtonArduinoGetStarted.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
업로드: Arduino App Lab의 Run 버튼을 클릭하여 STM32로 컴파일하고 업로드합니다.
Serial Monitor 열기하고 키패드의 각 키를 누릅니다. 키 번호가 출력되는 것이 보입니다.
DIYables_Apps
Stop
sketch.ino
1#include"Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
이 섹션에서는 Linux 측이 원격으로 키패드 누름을 읽을 수 있도록 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하는 방법을 보여줍니다:
1x4 키패드는 MCU(STM32)에 연결되어 있습니다 — MCU는 loop() 내에서 디바운싱을 사용하여 각 키를 폴링합니다
MPU는 키패드 핀을 직접 읽을 수 없습니다 — Bridge.call()을 통해 MCU로부터 마지막 누른 키를 요청해야 합니다
MPU는 Wi-Fi를 가지고 있습니다 — 전체 Debian Linux를 실행하여 키 누름에 반응하고 인터넷을 통해 알림을 보낼 수 있습니다
Arduino_RouterBridge는 두 프로세서 간 RPC 통신을 활성화합니다
⚠️ /dev/ttyHS1 (Linux)와 Serial1 (MCU)은 라우터에 의해 예약됨 — 사용자 코드에서 열지 마세요
간단히 말해: MCU가 키패드를 폴링합니다 → MPU는 Bridge를 통해 마지막 키를 읽습니다 → MPU는 인터넷을 통해 어디서나 키 누름에 반응할 수 있습니다.
참고: Bridge 스케치에서 ezButton 폴링 루프는 Arduino loop() 함수 내에 배치되어 버튼 상태를 업데이트 상태로 유지합니다 — 이는 필수이며 Bridge 통신을 방해하지 않습니다.
MCU 코드 (Bridge)
/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-keypad-1x4 */#include <ezButton.h>#include"Arduino_RouterBridge.h"#define KEY_NUM 4#define PIN_KEY_1 3#define PIN_KEY_2 2#define PIN_KEY_3 5#define PIN_KEY_4 4ezButton keypad_1x4[KEY_NUM] = {ezButton(PIN_KEY_1),ezButton(PIN_KEY_2),ezButton(PIN_KEY_3),ezButton(PIN_KEY_4)};int last_key = 0;String get_key(String arg) {int key = last_key; last_key = 0; // clear after readingreturnString(key);}String get_status(String arg) {if (last_key == 0)return"No key pressed";return"Last key: " + String(last_key);}voidsetup() {Bridge.begin(); Monitor.begin();for (byte i = 0; i < KEY_NUM; i++) { keypad_1x4[i].setDebounceTime(100); }Bridge.provide("get_key", get_key);Bridge.provide("get_status", get_status); Monitor.println("Arduino UNO Q Keypad 1x4 Bridge ready");}voidloop() {for (byte i = 0; i < KEY_NUM; i++) keypad_1x4[i].loop();for (byte i = 0; i < KEY_NUM; i++) {if (keypad_1x4[i].isPressed()) { last_key = i + 1; Monitor.println("Key pressed: " + String(last_key)); } }}
Python 코드 (Bridge)
/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-keypad-1x4 */from arduino.app_utils import *import timedef loop(): result = Bridge.call("get_key") key = int(result)if key != 0:print(f"Key pressed: {key}")else:print("No key pressed") time.sleep(0.2)App.run(user_loop=loop)
빠른 단계
연결하기: 배선도와 같이 1x4 키패드를 Arduino UNO Q에 연결합니다.
Arduino App Lab 열기: Arduino App Lab을 시작하고 보드가 감지될 때까지 기다립니다.
새 앱 만들기:Create New App를 클릭하고, 이름을 Keypad1x4Bridge로 지정한 다음 Create를 클릭합니다.
MCU 스케치 붙여넣기: 위의 MCU Bridge 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
Python 코드 붙여넣기: 위의 Python Bridge 코드를 복사하여 앱의 Python 파일에 붙여넣습니다.
업로드: Arduino App Lab의 Run 버튼을 클릭합니다.
키패드의 키를 누르고 Python 콘솔을 봅니다.
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))