아두이노 우노 Q OLED 128x64

이 튜토리얼에서는 Arduino UNO Q에서 SSD1306 OLED 128x64 디스플레이를 사용하는 방법을 보여줍니다. 기본 텍스트부터 도형, 이미지 및 원격 Telegram 제어까지 다룹니다.

Arduino UNO Q - oLED 128x64

하드웨어 필요 사항

1×Arduino UNO Q 아마존
1×USB Cable for Arduino Uno Q 아마존
1×SSD1306 I2C OLED 디스플레이 128x64 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

OLED 128x64 디스플레이에 대해

SSD1306 OLED 128x64는 SSD1306 컨트롤러에 의해 I2C를 통해 구동되는 작은 단색 디스플레이입니다. 128×64 픽셀을 가지고 있으며 선명한 텍스트, 아이콘, 차트 및 사용자 정의 그래픽을 표시할 수 있습니다.

OLED 핀아웃

  • GNDGND에 연결
  • VCC — 3.3V 또는 5V에 연결
  • SCL — I2C 클록 신호
  • SDA — I2C 데이터 신호
oLED 사용법 핀아웃

※ 주의:

핀 순서는 제조업체마다 다를 수 있습니다. 항상 OLED 모듈 자체에 인쇄된 레이블을 참조하세요. 이 튜토리얼은 DIYables 모듈로 테스트된 SSD1306 기반 OLED를 사용합니다.

배선 다이어그램

Arduino UNO Q oLED 128x64 연결 배선도

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

OLED PinArduino UNO Q Pin
GNDGND
VCC3.3V
SCLSCL
SDASDA

OLED를 프로그래밍하는 방법

Adafruit SSD1306 라이브러리는 OLED를 구동하는 데 필요한 모든 함수를 제공합니다.

  • 라이브러리 포함:
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
  • OLED 객체 생성 (128x64):
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
  • setup()에서 초기화:
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { while (true); // halt if OLED not found } oled.clearDisplay();
  • 텍스트 표시:
oled.setTextSize(1); // Font size (1–8) oled.setTextColor(WHITE); // Text color oled.setCursor(0, 0); // Cursor position (x, y) oled.println("Hello!"); oled.display(); // Push buffer to screen — required!

※ 주의:

drawing 명령 후 항상 oled.display()를 호출하여 버퍼를 화면으로 전송하세요. drawing 명령만으로는 표시되는 내용이 업데이트되지 않습니다.

Arduino UNO Q 코드 — SSD1306 OLED에서 Hello World

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

아래 스케치는 서로 다른 크기의 두 가지 텍스트를 OLED에 표시합니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-oled-128x64 */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Monitor.begin(9600); if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Monitor.println(F("SSD1306 allocation failed")); for (;;); } delay(2000); oled.clearDisplay(); // Line 1 — size 1 oled.setTextSize(1); oled.setTextColor(WHITE); oled.setCursor(0, 0); oled.println(F("Hello, World!")); // Line 2 — size 2 oled.setTextSize(2); oled.setCursor(0, 20); oled.println(F("DIYables")); // Line 3 — size 1 oled.setTextSize(1); oled.setCursor(0, 50); oled.println(F("OLED 128x64 SSD1306")); oled.display(); } void loop() {}

빠른 단계

  • Arduino UNO Q를 처음 사용하시나요? 계속 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따르세요. 개발 환경을 준비하세요.
  • OLED 배선: GND→GND, VCC→3.3V, SCL→SCL, SDA→SDA를 연결하세요.
  • 연결: 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_OLED_128x64
  • 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 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
    • Search for Adafruit SSD1306 created by Adafruit 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
    Adafruit SSD1306 Adafruit

    SSD1306 oled driver library for monochrome 128x64 and 128x32 displays

    2.5.9
    Install
    More Info
    • 업로드: Arduino App Lab의 Run 버튼을 클릭하여 STM32로 컴파일 및 업로드하세요.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q

    OLED를 보세요. "Hello, World!", "DIYables" 및 "OLED 128x64 SSD1306"이 표시됩니다!

    Arduino UNO Q 코드 — SSD1306 OLED에 텍스트 표시

    이 예제는 서로 다른 텍스트 크기와 OLED에 정수, 부동소수점 및 16진수를 표시하는 방법을 보여줍니다.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-oled-128x64 */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Monitor.begin(9600); if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Monitor.println(F("SSD1306 allocation failed")); for (;;); } delay(2000); // ── Text size demo ── oled.clearDisplay(); oled.setTextColor(WHITE); oled.setTextSize(1); oled.setCursor(0, 0); oled.println(F("Size 1: Arduino")); oled.setTextSize(2); oled.setCursor(0, 16); oled.println(F("Size 2")); oled.setTextSize(3); oled.setCursor(0, 40); oled.println(F("S3")); oled.display(); delay(3000); // ── Integer ── oled.clearDisplay(); oled.setTextSize(2); oled.setCursor(0, 0); oled.print(F("Int: ")); oled.println(12345); oled.display(); delay(3000); // ── Float ── oled.clearDisplay(); oled.setTextSize(2); oled.setCursor(0, 0); oled.print(F("Float:")); oled.setCursor(0, 24); oled.println(3.14); oled.display(); delay(3000); // ── Hexadecimal ── oled.clearDisplay(); oled.setTextSize(2); oled.setCursor(0, 0); oled.print(F("Hex: ")); oled.println(255, HEX); oled.display(); delay(3000); } void loop() {}

    빠른 단계

    • 위의 코드를 복사하여 sketch/sketch.ino에 붙여넣으세요.
    • Arduino App Lab의 Run 버튼을 클릭하세요.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q

    OLED는 텍스트 크기 데모를 순환한 다음 정수, 부동소수점 및 16진수를 표시합니다.

    유용한 디스플레이 함수 참고

    일반적으로 사용되는 SSD1306 OLED 함수의 빠른 참고:

    • oled.clearDisplay() — 프레임 버퍼 지우기 (모든 픽셀 끔)
    • oled.display() — 버퍼를 화면으로 전송 — 모든 drawing 호출 후 필수
    • oled.drawPixel(x, y, color) — 단일 픽셀 설정 또는 지우기
    • oled.setTextSize(n) — 글꼴을 계수 *n*로 조정 (1 = 6×8 px, 2 = 12×16 px, …)
    • oled.setCursor(x, y) — 텍스트 커서를 픽셀 좌표 *(x, y)*로 이동
    • oled.setTextColor(WHITE) — 텍스트 전경만 (투명 배경)
    • oled.setTextColor(BLACK, WHITE) — 명시적 배경이 있는 텍스트
    • oled.println("message") — 문자열 출력 및 다음 줄로 진행
    • oled.println(number) — 10진수로 정수 출력
    • oled.println(number, HEX) — 16진수로 정수 출력
    • oled.startscrollright(start, stop) — 페이지 간 하드웨어 스크롤 오른쪽
    • oled.startscrollleft(start, stop) — 하드웨어 스크롤 왼쪽
    • oled.startscrolldiagright(start, stop) — 대각선 스크롤 오른쪽
    • oled.startscrolldiagleft(start, stop) — 대각선 스크롤 왼쪽
    • oled.stopscroll() — 활성 하드웨어 스크롤 중지
    • oled.setContrast(value) — 밝기 조정 (0–255)
    • oled.dim(true/false) — 빠른 어두워짐 토글
    • oled.invertDisplay(true/false) — 하드웨어 수준 색상 반전

    Arduino UNO Q 코드 — SSD1306 OLED에 도형 그리기

    Adafruit SSD1306 라이브러리는 Adafruit_GFX에서 상속되어 픽셀, 선, 직사각형, 원, 삼각형 및 모서리가 있는 직사각형을 제공합니다. 아래 스케치는 모두를 순환합니다.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-oled-128x64 */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Monitor.begin(9600); if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Monitor.println(F("SSD1306 allocation failed")); for (;;); } delay(2000); oled.clearDisplay(); oled.display(); } void loop() { // ── Single pixel ── oled.clearDisplay(); for (int i = 0; i < SCREEN_WIDTH; i += 4) oled.drawPixel(i, SCREEN_HEIGHT / 2, WHITE); oled.display(); delay(2000); // ── Lines ── oled.clearDisplay(); oled.drawLine(0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, WHITE); oled.drawLine(SCREEN_WIDTH - 1, 0, 0, SCREEN_HEIGHT - 1, WHITE); oled.display(); delay(2000); // ── Rectangle ── oled.clearDisplay(); oled.drawRect(10, 10, 108, 44, WHITE); oled.display(); delay(2000); // ── Filled rectangle ── oled.clearDisplay(); oled.fillRect(10, 10, 108, 44, WHITE); oled.display(); delay(2000); // ── Rounded rectangle ── oled.clearDisplay(); oled.drawRoundRect(10, 10, 108, 44, 8, WHITE); oled.display(); delay(2000); // ── Filled rounded rectangle ── oled.clearDisplay(); oled.fillRoundRect(10, 10, 108, 44, 8, WHITE); oled.display(); delay(2000); // ── Circle ── oled.clearDisplay(); oled.drawCircle(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, 28, WHITE); oled.display(); delay(2000); // ── Filled circle ── oled.clearDisplay(); oled.fillCircle(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, 28, WHITE); oled.display(); delay(2000); // ── Triangle ── oled.clearDisplay(); oled.drawTriangle(64, 4, 10, 60, 118, 60, WHITE); oled.display(); delay(2000); // ── Filled triangle ── oled.clearDisplay(); oled.fillTriangle(64, 4, 10, 60, 118, 60, WHITE); oled.display(); delay(2000); }

    빠른 단계

    • 위의 코드를 복사하여 sketch/sketch.ino에 붙여넣으세요.
    • Arduino App Lab의 Run 버튼을 클릭하세요.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q

    OLED가 모든 도형 (픽셀, 선, 직사각형, 원, 모서리가 있는 직사각형 및 삼각형)을 순환합니다!

    Arduino UNO Q 코드 — SSD1306 OLED의 하드웨어 스크롤

    SSD1306는 CPU 작업 없이 콘텐츠를 이동하는 내장 하드웨어 스크롤 엔진을 가지고 있습니다. 라이브러리는 4가지 스크롤 방향을 제공합니다: 오른쪽, 왼쪽, 대각선 오른쪽 및 대각선 왼쪽입니다.

    ※ 주의:

    항상 스크롤을 시작하기 전에 oled.display()를 호출하여 콘텐츠를 OLED로 전송하세요. 새 콘텐츠를 그리기 전에 stopscroll()을 호출하세요.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-oled-128x64 */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Monitor.begin(9600); if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Monitor.println(F("SSD1306 allocation failed")); for (;;); } delay(2000); oled.clearDisplay(); oled.setTextSize(2); oled.setTextColor(WHITE); oled.setCursor(10, 24); oled.println(F("DIYables")); oled.display(); } void loop() { // Scroll right oled.startscrollright(0x00, 0x07); delay(3000); oled.stopscroll(); delay(500); // Scroll left oled.startscrollleft(0x00, 0x07); delay(3000); oled.stopscroll(); delay(500); // Diagonal scroll right oled.startscrolldiagright(0x00, 0x07); delay(3000); oled.stopscroll(); delay(500); // Diagonal scroll left oled.startscrolldiagleft(0x00, 0x07); delay(3000); oled.stopscroll(); delay(500); }

    빠른 단계

    • 위의 코드를 복사하여 sketch/sketch.ino에 붙여넣으세요.
    • Arduino App Lab의 Run 버튼을 클릭하세요.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q

    OLED는 "DIYables"를 오른쪽, 왼쪽, 대각선 오른쪽 및 대각선 왼쪽으로 스크롤합니다. 무한 반복됩니다.

    Arduino UNO Q 코드 — SSD1306 OLED에 비트맵 이미지 표시

    SSD1306 OLED에 비트맵을 표시하려면 먼저 이미지를 C 바이트 배열로 변환해야 합니다. 무료 Image to Bitmap Converter 도구를 사용하세요:

    1. 이미지 파일 (PNG, JPG, BMP 등)을 업로드합니다.
    2. 캔버스 크기를 128×64 (또는 더 작게)로 설정합니다.
    3. 출력 형식으로 Arduino code를 선택합니다.
    4. 생성된 배열을 스케치에 복사합니다.
    image to bitmap array

    아래 스케치는 16×16 하트 아이콘을 표시한 다음 128×64 Arduino 아이콘으로 전환합니다. 둘 다 코드에 바이트 배열로 저장됩니다:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-oled-128x64 */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // 16x16 heart bitmap const unsigned char heart16x16[] PROGMEM = { 0x00, 0x00, 0x03, 0xc0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0x3f, 0xfc, 0x1f, 0xf8, 0x0f, 0xf0, 0x03, 0xc0, 0x00, 0x00 }; // 128x64 Arduino icon bitmap const unsigned char ArduinoIcon[] PROGMEM = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xfc, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xf0, 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x00, 0x1f, 0xe0, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x7f, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xe0, 0x00, 0x0f, 0xc0, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x07, 0x80, 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x03, 0x80, 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x03, 0x00, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x7f, 0xff, 0x00, 0x0f, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x7f, 0xff, 0x80, 0x0f, 0x80, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x7f, 0xff, 0x80, 0x07, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0xff, 0xf0, 0x7f, 0xff, 0xc0, 0x07, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x7f, 0xff, 0xc0, 0x07, 0x80, 0x0f, 0xfe, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xc0, 0x07, 0x80, 0x0f, 0xfe, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xfc, 0x00, 0x01, 0xff, 0xc0, 0x07, 0x80, 0x0f, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x03, 0xff, 0xfc, 0x00, 0x01, 0xff, 0xc0, 0x07, 0x80, 0x0f, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x03, 0xff, 0xfc, 0x00, 0x01, 0xff, 0xc0, 0x07, 0x80, 0x0f, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x03, 0xff, 0xfc, 0x00, 0x01, 0xff, 0xc0, 0x07, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xc0, 0x07, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xc0, 0x07, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xc0, 0x07, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x7f, 0xff, 0xc0, 0x07, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0xff, 0xf0, 0x7f, 0xff, 0x80, 0x07, 0x80, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x7f, 0xff, 0x80, 0x07, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0f, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xe0, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x03, 0x00, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x07, 0x80, 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xe0, 0x00, 0x7f, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xe0, 0x00, 0x1f, 0xe0, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xf8, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x3f, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x7f, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xfc, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x01, 0xff, 0xfe, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x01, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; void setup() { Monitor.begin(9600); if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Monitor.println(F("SSD1306 allocation failed")); for (;;); } delay(2000); // Show heart icon centered oled.clearDisplay(); oled.drawBitmap( (SCREEN_WIDTH - 16) / 2, (SCREEN_HEIGHT - 16) / 2, heart16x16, 16, 16, WHITE); oled.display(); delay(3000); // Show full Arduino icon oled.clearDisplay(); oled.drawBitmap(0, 0, ArduinoIcon, SCREEN_WIDTH, SCREEN_HEIGHT, WHITE); oled.display(); } void loop() {}

    빠른 단계

    • 위의 코드를 복사하여 sketch/sketch.ino에 붙여넣으세요.
    • Arduino App Lab의 Run 버튼을 클릭하세요.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q

    OLED는 3초 동안 하트 아이콘을 표시한 다음 Arduino 아이콘으로 전환합니다.

    ※ 주의:

    비트맵 크기는 화면 해상도 (128×64)를 초과하면 안 됩니다.

    Arduino UNO Q 코드 — SSD1306 OLED의 명암비 및 어두워짐

    SSD1306는 256 명암비 수준 (0–255)을 지원합니다. 세밀한 제어를 위해 setContrast()를 사용하고 빠른 밝기 토글을 위해 dim()을 사용하세요.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-oled-128x64 */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Monitor.begin(9600); if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Monitor.println(F("SSD1306 allocation failed")); for (;;); } delay(2000); // Draw a checkerboard test pattern oled.clearDisplay(); for (int x = 0; x < SCREEN_WIDTH; x += 8) for (int y = 0; y < SCREEN_HEIGHT; y += 8) if ((x / 8 + y / 8) % 2 == 0) oled.fillRect(x, y, 8, 8, WHITE); oled.display(); delay(2000); } void loop() { // Ramp up: 0 → 255 for (int c = 0; c <= 255; c += 5) { oled.setContrast((uint8_t)c); delay(30); } delay(1000); // Ramp down: 255 → 0 for (int c = 255; c >= 0; c -= 5) { oled.setContrast((uint8_t)c); delay(30); } delay(1000); // Quick dim toggle oled.dim(true); // minimum brightness delay(2000); oled.dim(false); // restore delay(2000); }

    빠른 단계

    • 위의 코드를 복사하여 sketch/sketch.ino에 붙여넣으세요.
    • Arduino App Lab의 Run 버튼을 클릭하세요.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q

    OLED 밝기가 위아래로 변한 다음 어두워짐-켜기/어두워짐-끄기 주기가 뒤따릅니다.

    Arduino UNO Q 코드 — SSD1306 OLED의 사용자 정의 외부 글꼴

    Adafruit GFX 라이브러리에는 많은 FreeFont 서체가 포함되어 있습니다 (Serif, Sans, Mono — 여러 크기). setFont()를 호출하여 글꼴 헤더를 포함하고 사용합니다.

    ※ 주의:

    외부 글꼴이 활성화되면 커서 Y 좌표는 왼쪽 위 모서리가 아닌 텍스트 기준선을 참조합니다. 이것은 내장 5×7 글꼴과 다릅니다.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-oled-128x64 */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Fonts/FreeSerif9pt7b.h> #include <Fonts/FreeSansBold12pt7b.h> #include <Fonts/FreeMono9pt7b.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Monitor.begin(9600); if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Monitor.println(F("SSD1306 allocation failed")); for (;;); } delay(2000); oled.clearDisplay(); oled.display(); } void loop() { // ── Built-in 5×7 font ── oled.clearDisplay(); oled.setFont(NULL); oled.setTextSize(1); oled.setTextColor(WHITE); oled.setCursor(0, 0); oled.println(F("Built-in 5x7 font")); oled.println(); oled.setTextSize(2); oled.println(F("DIYables")); oled.display(); delay(3000); // ── FreeSerif 9pt ── oled.clearDisplay(); oled.setFont(&FreeSerif9pt7b); oled.setTextSize(1); oled.setTextColor(WHITE); oled.setCursor(0, 14); // Y = baseline oled.println(F("FreeSerif 9pt")); oled.setCursor(0, 38); oled.println(F("DIYables OLED")); oled.setCursor(0, 58); oled.println(F("Hello World!")); oled.display(); delay(3000); // ── FreeSansBold 12pt ── oled.clearDisplay(); oled.setFont(&FreeSansBold12pt7b); oled.setTextSize(1); oled.setTextColor(WHITE); oled.setCursor(0, 20); oled.println(F("SansBold")); oled.setCursor(0, 52); oled.println(F("DIYables")); oled.display(); delay(3000); // ── FreeMono 9pt ── oled.clearDisplay(); oled.setFont(&FreeMono9pt7b); oled.setTextSize(1); oled.setTextColor(WHITE); oled.setCursor(0, 14); oled.println(F("FreeMono 9pt")); oled.setCursor(0, 34); oled.println(F("0123456789")); oled.setCursor(0, 54); oled.println(F("!@#$%^&*()")); oled.display(); delay(3000); }

    빠른 단계

    • 위의 코드를 복사하여 sketch/sketch.ino에 붙여넣으세요.
    • Arduino App Lab의 Run 버튼을 클릭하세요.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q

    OLED는 내장 글꼴, FreeSerif 9pt, FreeSansBold 12pt 및 FreeMono 9pt를 순환합니다.

    Linux + MCU Bridge 프로그래밍

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

    • OLED는 MCU (STM32)에 연결됩니다 — I2C (SCL/SDA)를 통해. MCU만 직접 구동할 수 있습니다.
    • MPU는 OLED를 직접 제어할 수 없습니다 — MCU에서 Bridge.call("display_text", "text")를 호출하여 디스플레이를 업데이트하고 결과를 Monitor에 출력합니다.
    • MPU는 Wi-Fi를 가지고 있습니다 — MPU가 Wi-Fi를 지원하는 전체 Debian Linux를 실행하기 때문에 Telegram 명령을 수신하고 OLED에 메시지를 원격으로 표시할 수 있습니다.
    • 통신: Linux 측의 Bridge.call()은 MCU 측의 Bridge.provide_safe() 함수를 호출합니다 (OLED 디스플레이 쓰기가 하드웨어 API 호출이므로).
    • ⚠️ 예약됨: /dev/ttyHS1 (Linux) 및 Serial1 (MCU)는 Arduino Router에서 사용됩니다. 절대 직접 열지 마세요.

    간단히 말해: MPU는 Bridge → MCU를 통해 텍스트 전송 → MCU가 OLED 업데이트 → MCU가 Monitor에 결과 출력.

    MCU 스케치 — Bridge 및 Monitor 출력이 있는 OLED 128x64:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-oled-128x64 */ #include "Arduino_RouterBridge.h" #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); String current_text = ""; void display_text(String text) { current_text = text; oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(WHITE); oled.setCursor(0, 0); oled.println(text); oled.display(); Monitor.println("OLED: " + text); } void clear_oled() { current_text = ""; oled.clearDisplay(); oled.display(); Monitor.println("OLED cleared"); } void get_status() { Monitor.println("Text: " + current_text); } void setup() { Bridge.begin(); Monitor.begin(); if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Monitor.println("OLED init failed"); while (true); } delay(1000); oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(WHITE); oled.setCursor(0, 0); oled.println("Bridge Ready"); oled.display(); Bridge.provide_safe("display_text", display_text); Bridge.provide_safe("clear_oled", clear_oled); Bridge.provide("get_status", get_status); Monitor.println("OLED 128x64 Bridge ready"); } void loop() {}

    Python 스크립트 (Arduino App Lab) — Linux에서 OLED에 텍스트 표시:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-oled-128x64 */ from arduino.app_utils import * import time def loop(): result = Bridge.call("display_text", "Hello UNO Q\nOLED 128x64\nPython Bridge") print(result) time.sleep(3) result = Bridge.call("clear_oled") print(result) time.sleep(1) result = Bridge.call("display_text", "DIYables.io") print(result) time.sleep(3) App.run(user_loop=loop)

    빠른 단계

    • 새 앱 생성: Arduino App Lab을 열고 Create New App을 클릭하여 DIYables_OLED_128x64_Bridge라는 이름을 지정하고 Create를 클릭하세요.
    • MCU 스케치 붙여넣기: 위의 Bridge MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣으세요.
    • Python 스크립트 붙여넣기: 위의 Python 코드를 복사하여 앱의 Python 파일에 붙여넣으세요.
    • 앱 실행: Run 버튼을 클릭합니다. Python 측은 OLED에서 메시지를 순환합니다.

    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
    OLED 128x64 Bridge ready OLED: Hello UNO Q OLED cleared OLED: DIYables.io

    Telegram 통합

    Telegram에서 원격으로 OLED에 텍스트를 표시합니다.

    Telegram 봇이 아직 없으면 계속 진행하기 전에 아두이노 우노 Q - 텔레그램 봇을 보세요. 봇 토큰을 가져오세요.

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

    Python 스크립트 (Arduino App Lab) — OLED 128x64용 Telegram 봇:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-oled-128x64 */ 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.startswith("/display "): content = text[9:] result = Bridge.call("display_text", content) print(f"[Telegram] /display: {content}") send_message(chat_id, result) elif text == "/clear": result = Bridge.call("clear_oled") print(f"[Telegram] /clear") send_message(chat_id, result) elif text == "/status": result = Bridge.call("get_status") print(f"[Telegram] /status: {result}") send_message(chat_id, result) else: send_message(chat_id, "Commands:\n/display <text> — show text on OLED\n/clear — clear the OLED\n/status — show current OLED content") App.run(user_loop=loop)
    • 참고: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 얻은 토큰으로 바꾸세요.
    • /display Hello World를 보내면 텍스트가 OLED에 나타납니다.
    • /clear를 보내면 OLED 화면이 지워집니다.
    • /status를 보내면 봇이 현재 OLED 콘텐츠로 응답합니다.

    빠른 단계

    • MCU 스케치 업로드: 이전 섹션의 Bridge MCU 스케치를 사용합니다.
    • Telegram 스크립트 붙여넣기: 위의 Python 코드를 Python 탭에 복사합니다.
    • 토큰 설정: YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꾸세요.
    • 앱 실행: Run을 클릭합니다. 봇이 Telegram 명령을 수신하기 시작합니다.
    • 테스트: /display Arduino UNO Q를 보냅니다. 텍스트가 OLED에 표시되어야 합니다.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /display Arduino UNO Q [2026-04-29 12:00:01] OLED: Arduino UNO Q [2026-04-29 12:05:10] Telegram: /status [2026-04-29 12:05:10] Text: Arduino UNO Q [2026-04-29 12:10:20] Telegram: /clear [2026-04-29 12:10:20] OLED cleared
    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
    /display Arduino UNO Q
    10:15 AM ✓✓
    OLED: Arduino UNO Q
    10:16 AM
    /status
    10:17 AM ✓✓
    Text: Arduino UNO Q
    10:18 AM
    /clear
    10:19 AM ✓✓
    OLED cleared
    10:20 AM

    OpenClaw 통합

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

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

    • 컴팩트 센서 디스플레이: 착용식 또는 임베디드 프로젝트를 위해 작은 풋프린트로 온도, 습도 또는 거리 판독값을 표시합니다.
    • 원격 상태 보드: 센서 임계값을 초과할 때 Telegram을 통해 OLED에 알림 메시지를 푸시합니다.
    • Wi-Fi 신호 강도 계: MPU의 Wi-Fi 신호 강도 및 연결된 네트워크 이름을 OLED에 표시합니다.
    • 스톱워치/타이머: Telegram 시작/중지 명령으로 제어되는 밀리초 정확도 타이머를 OLED에 표시합니다.
    • 사용자 정의 아이콘 표시: drawRect, fillRectdrawBitmap을 사용하여 OLED에 배터리 아이콘 또는 신호 막대를 그립니다.

    자신을 도전해보세요

    • 쉬움: Telegram 봇을 수정하여 /big <text>를 지원하도록 합니다. 이는 글꼴 크기 2 (더 큰 문자)로 텍스트를 표시합니다.
    • 중간: 중심 정렬 추가: (SCREEN_WIDTH - textWidth) / 2를 계산하고 그것을 x 커서 위치로 사용합니다.
    • 고급: OLED에 실시간 시계 표시 — Bridge를 통해 MPU의 Linux 시계에서 현재 시간을 가져오고 매초 업데이트합니다.