아두이노 우노 Q LCD I2C

이 튜토리얼은 Arduino UNO Q에서 LCD I2C 16x2 디스플레이를 사용하는 방법을 보여줍니다 — 기본 텍스트부터 커스텀 문자, 스크롤, Telegram 원격 제어까지.

Arduino UNO Q - lcd i2c

필요한 하드웨어

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

LCD I2C 16x2 정보

LCD I2C는 표준 16x2 LCD 패널과 I2C 백팩 모듈을 결합합니다. I2C 인터페이스를 사용하면 배선이 4개의 선만 필요하므로 병렬 LCD 연결보다 훨씬 간단합니다.

LCD 핀배치

LCD I2C에는 네 개의 핀이 있습니다:

  • GNDGND에 연결
  • VCC — 5V에 연결
  • SDA — I2C 데이터 신호
  • SCL — I2C 클록 신호
lcd i2c 핀배치

LCD 좌표

LCD I2C 16x2는 16개의 열과 2개의 행을 가지고 있으며, 열과 행은 0부터 시작하여 번호가 매겨집니다.

Arduino UNO Q lcd i2c 좌표

배선 다이어그램

Arduino UNO Q lcd i2c 배선 다이어그램

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

LCD I2C PinArduino UNO Q Pin
GNDGND
VCC5V
SDASDA
SCLSCL

※ 주의:

LCD의 I2C 주소는 제조업체에 따라 다를 수 있습니다. 이 튜토리얼에서는 DIYables 모듈의 기본값인 0x27을 사용합니다.

LCD I2C를 프로그래밍하는 방법

DIYables_LCD_I2C 라이브러리를 사용하면 LCD를 쉽게 제어할 수 있습니다.

  • 라이브러리 포함:
#include <DIYables_LCD_I2C.h>
  • I2C 주소, 열 개수, 행 개수로 LCD 객체 생성:
DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 columns, 2 rows
  • setup()에서 LCD 초기화:
lcd.init(); // Initialize the LCD lcd.backlight(); // Turn on the backlight
  • 커서를 위치로 이동 (열, 행):
lcd.setCursor(column_index, row_index);
  • 현재 커서 위치에 텍스트 출력:
lcd.print("Hello World!");

스크롤, 커스텀 문자 등에 대해서는 "LCD로 더 많이 하기" 섹션을 참조하십시오.

※ 주의:

I2C 주소는 제조업체에 따라 다를 수 있습니다. DIYables에서 지정한 0x27을 사용합니다.

Arduino UNO Q 코드 — LCD I2C에서 Hello World

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

아래 스케치는 LCD의 두 행에 텍스트를 표시합니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-i2c */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 columns, 2 rows void setup() { Monitor.begin(9600); lcd.init(); // Initialize the LCD lcd.backlight(); // Turn on the backlight lcd.setCursor(0, 0); lcd.print("Hello, World!"); lcd.setCursor(0, 1); lcd.print("Arduino UNO Q"); Monitor.println("LCD I2C Hello World done"); } void loop() {}

빠른 단계

  • 처음 Arduino UNO Q를 사용하시나요? 계속하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하십시오.
  • LCD 배선: VCC→5V, GND→GND, SDA→SDA, SCL→SCL을 연결합니다.
  • 연결: USB-C 케이블로 Arduino UNO Q를 컴퓨터에 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q를 감지할 때까지 기다립니다.
  • 새 App 생성: Create New App 버튼을 클릭합니다.
Arduino UNO Q에서 아두이노 app lab에 새 app 생성
  • 예를 들어 DIYables_LCD_I2C 같은 앱 이름을 입력합니다.
  • Create를 클릭하여 확인합니다.
  • 새 App 내에 생성된 폴더 및 파일 세트가 표시됩니다.
Arduino UNO Q에서 아두이노 app lab 앱 폴더 및 파일
  • 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 DIYables LCD I2C created by DIYables.io 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
    DIYables LCD I2C DIYables.io

    This library is designed for HD44780-based I2C LCD displays. It provides LiquidCrystal-compatible API plus helper functions (text alignment, progress bars, predefined custom characters). Supports multiple I2C buses (Wire, Wire1, Wire2) for advanced boards like Arduino Giga, Due, and ESP32. Compatible with all Arduino-based platforms including Arduino Uno, Mega, Nano, ESP32, ESP8266, STM32, and Raspberry Pi Pico.

    1.0.0
    Install
    More Info
    • 업로드: Arduino App Lab에서 Run 버튼을 클릭하여 STM32에 컴파일하고 업로드합니다.
    Arduino UNO Q에서 아두이노 app lab의 run 버튼 클릭

    LCD를 보면 — 행 0에 "Hello, World!"가 표시되고 행 1에 "Arduino UNO Q"가 표시됩니다!

    ※ 주의:

    LCD에 아무것도 표시되지 않거나 검은색 정사각형만 표시되면 작은 드라이버를 사용하여 I2C 모듈 뒷면의 대비 포텐셔미터를 조정합니다. LCD I2C에서 문제 해결을(를) 참조하세요.

    Arduino UNO Q 코드 — LCD I2C에 텍스트 및 숫자 표시

    이 예제는 일반 텍스트 문자열, 정수, 실수, 16진수를 LCD에 표시하는 방법을 보여줍니다.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-i2c */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 columns, 2 rows void setup() { Monitor.begin(9600); lcd.init(); lcd.backlight(); // Row 0: plain text string lcd.setCursor(0, 0); lcd.print("Text: UNO Q"); // Row 1: integer int count = 2025; lcd.setCursor(0, 1); lcd.print("Int: "); lcd.print(count); delay(3000); // Row 0: float (2 decimal places) float voltage = 3.14; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Float: "); lcd.print(voltage, 2); // Row 1: hexadecimal int value = 255; lcd.setCursor(0, 1); lcd.print("Hex: 0x"); lcd.print(value, HEX); Monitor.println("LCD I2C text demo done"); } void loop() {}

    빠른 단계

    • 위의 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
    • Arduino App Lab에서 Run 버튼을 클릭합니다.
    Arduino UNO Q에서 아두이노 app lab의 run 버튼 클릭

    LCD는 먼저 텍스트와 정수를 표시한 다음 3초 후에 지워지고 실수와 16진수를 표시합니다.

    유용한 LCD 함수 참조

    일반적으로 사용되는 DIYables_LCD_I2C 함수의 빠른 참조:

    • lcd.init() — LCD 초기화
    • lcd.backlight() — 백라이트 켜기
    • lcd.noBacklight() — 백라이트 끄기
    • lcd.setCursor(col, row) — 열 *col*, 행 *row*로 커서 이동 (둘 다 0부터 시작)
    • lcd.print("text") — 현재 커서 위치에 문자열 출력
    • lcd.print(number) — 정수 출력
    • lcd.print(number, HEX) — 16진수로 정수 출력
    • lcd.print(floatVal, decimals) — 지정된 소수 자릿수로 실수 출력
    • lcd.clear() — 디스플레이를 지우고 커서를 (0, 0)으로 이동
    • lcd.home() — 지우지 않고 커서를 (0, 0)으로 이동
    • lcd.createChar(id, array) — 커스텀 문자 등록 (id 0–7)
    • lcd.write((byte)id) — 등록된 커스텀 문자 표시
    • lcd.scrollDisplayLeft() — 모든 내용을 한 열 왼쪽으로 이동
    • lcd.scrollDisplayRight() — 모든 내용을 한 열 오른쪽으로 이동
    • lcd.cursor() — 밑줄 커서 표시
    • lcd.noCursor() — 커서 숨기기
    • lcd.blink() — 깜빡이는 블록 커서 표시
    • lcd.noBlink() — 깜빡이는 블록 커서 중지

    Arduino UNO Q 코드 — LCD I2C의 커스텀 문자

    lcd.print()는 ASCII 문자에만 작동합니다. 특수 기호(예: 하트, 화살표)를 표시하려면 8바이트 픽셀 데이터를 사용하여 커스텀 문자를 정의합니다. LCD 16x2 문자 셀은 8행 × 5열의 픽셀이며, 최대 8개의 커스텀 문자(ID 0–7)를 저장할 수 있습니다.

    Arduino UNO Q lcd 16x2 픽셀

    아래 문자 생성기를 사용하여 문자를 설계하고 이진 코드를 얻으십시오:

    Click on each pixel to select/deselect


    Copy below custom character code
    Replace the customChar[8] in the below code
    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-i2c */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 columns, 2 rows // Custom character 0: heart byte heart[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; // Custom character 1: smiley face byte smiley[8] = { 0b00000, 0b01010, 0b01010, 0b00000, 0b10001, 0b01110, 0b00000, 0b00000 }; // Custom character 2: music note byte note[8] = { 0b00100, 0b00110, 0b00101, 0b00101, 0b00100, 0b11100, 0b11100, 0b00000 }; // Custom character 3: arrow up byte arrowUp[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00000 }; void setup() { Monitor.begin(9600); lcd.init(); lcd.backlight(); // Register custom characters (slots 0–3) lcd.createChar(0, heart); lcd.createChar(1, smiley); lcd.createChar(2, note); lcd.createChar(3, arrowUp); // Row 0: heart + smiley lcd.setCursor(0, 0); lcd.print("Heart:"); lcd.write((byte)0); lcd.print(" Smile:"); lcd.write((byte)1); // Row 1: note + arrow lcd.setCursor(0, 1); lcd.print("Note:"); lcd.write((byte)2); lcd.print(" Up:"); lcd.write((byte)3); Monitor.println("LCD I2C custom characters done"); } void loop() {}

    빠른 단계

    • 위의 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
    • Arduino App Lab에서 Run 버튼을 클릭합니다.
    Arduino UNO Q에서 아두이노 app lab의 run 버튼 클릭

    LCD는 4개의 커스텀 기호를 표시합니다: 하트, 웃는 얼굴, 음표, 화살표 — 각 행마다 2개씩.

    ※ 주의:

    고유한 문자를 설계하려면 LCD 커스텀 문자 생성기를 사용하십시오 — 픽셀 패턴을 그리고 코드에 사용할 바이트 배열을 출력할 수 있습니다. 위의 대화형 생성기를 사용할 수도 있습니다.

    Arduino UNO Q 코드 — LCD I2C에서 텍스트 스크롤

    scrollDisplayLeft()scrollDisplayRight()는 전체 디스플레이 콘텐츠를 호출당 한 열씩 이동합니다 — 두 행이 함께 이동합니다. 짧은 지연으로 루프를 사용하여 부드러운 스크롤 효과를 만듭니다.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-i2c */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 columns, 2 rows void setup() { Monitor.begin(9600); lcd.init(); lcd.backlight(); // Write text on both rows lcd.setCursor(0, 0); lcd.print("Scroll Left >>>>"); lcd.setCursor(0, 1); lcd.print("<<< Scroll Right"); delay(1000); // Scroll entire display left 16 steps Monitor.println("Scrolling left..."); for (int i = 0; i < 16; i++) { lcd.scrollDisplayLeft(); delay(300); } delay(500); // Scroll entire display right 16 steps (back to original) Monitor.println("Scrolling right..."); for (int i = 0; i < 16; i++) { lcd.scrollDisplayRight(); delay(300); } Monitor.println("LCD I2C scroll demo done"); } void loop() {}

    빠른 단계

    • 위의 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
    • Arduino App Lab에서 Run 버튼을 클릭합니다.
    Arduino UNO Q에서 아두이노 app lab의 run 버튼 클릭

    LCD 콘텐츠는 왼쪽으로 16칸 이동하고, 일시 중지한 후, 오른쪽으로 16칸 이동하여 원래 위치로 돌아옵니다.

    Arduino UNO Q 코드 — LCD I2C에서 백라이트 제어

    lcd.backlight()를 사용하여 I2C 백팩의 백라이트 LED를 켜고 lcd.noBacklight()를 사용하여 끕니다. 이 데모는 켜기 → 끄기 → 켜기 → 깜빡이기 패턴을 순환합니다.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-i2c */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 columns, 2 rows void setup() { Monitor.begin(9600); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Backlight ON"); lcd.setCursor(0, 1); lcd.print("Arduino UNO Q"); Monitor.println("Backlight ON"); delay(2000); // Turn off backlight lcd.noBacklight(); Monitor.println("Backlight OFF"); delay(2000); // Turn backlight back on lcd.backlight(); Monitor.println("Backlight ON again"); delay(2000); // Blink the backlight 5 times Monitor.println("Blinking backlight..."); for (int i = 0; i < 5; i++) { lcd.noBacklight(); delay(500); lcd.backlight(); delay(500); } Monitor.println("LCD I2C backlight demo done"); } void loop() {}

    빠른 단계

    • 위의 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
    • Arduino App Lab에서 Run 버튼을 클릭합니다.
    Arduino UNO Q에서 아두이노 app lab의 run 버튼 클릭

    LCD 백라이트가 켜지고, 꺼지고, 다시 켜지고, 마지막으로 5번 깜빡입니다.

    Arduino UNO Q 코드 — LCD I2C에서 커서 및 깜빡임

    LCD는 두 가지 커서 스타일을 지원합니다: 밑줄 커서 (lcd.cursor())와 깜빡이는 블록 커서 (lcd.blink()). 둘 다 개별적으로 또는 함께 표시할 수 있습니다.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-i2c */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 columns, 2 rows void setup() { Monitor.begin(9600); lcd.init(); lcd.backlight(); // Show underscore cursor lcd.setCursor(0, 0); lcd.print("Cursor visible:"); lcd.setCursor(0, 1); lcd.print("Pos (0,1) > "); lcd.cursor(); // Show underscore cursor Monitor.println("cursor() — underscore ON"); delay(3000); // Hide cursor lcd.noCursor(); Monitor.println("noCursor() — hidden"); delay(2000); // Show blinking block cursor lcd.clear(); lcd.setCursor(0, 0); lcd.print("Blink cursor:"); lcd.setCursor(0, 1); lcd.print("Pos (0,1) > "); lcd.blink(); // Show blinking block cursor Monitor.println("blink() — blinking ON"); delay(3000); // Stop blinking lcd.noBlink(); Monitor.println("noBlink() — blinking OFF"); delay(2000); // Show both cursor and blink together lcd.clear(); lcd.setCursor(0, 0); lcd.print("Cursor + Blink:"); lcd.setCursor(0, 1); lcd.print("Pos (0,1) > "); lcd.cursor(); lcd.blink(); Monitor.println("cursor() + blink() — both ON"); delay(3000); // Turn off both lcd.noCursor(); lcd.noBlink(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Cursor demo done"); Monitor.println("LCD I2C cursor demo done"); } void loop() {}

    빠른 단계

    • 위의 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
    • Arduino App Lab에서 Run 버튼을 클릭합니다.
    Arduino UNO Q에서 아두이노 app lab의 run 버튼 클릭

    LCD는 다음을 순환합니다: 밑줄 커서 표시 → 숨김 → 깜빡이는 블록 커서 → 중지됨 → 커서와 깜빡임 모두 → 모두 끄기.

    LCD I2C에서 문제 해결

    • LCD에 아무것도 표시되지 않음 / 백라이트 꺼짐VCC→5V 및 GND 확인. setup()에서 lcd.backlight() 호출 확인.
    • LCD 양쪽 행에 검은색 정사각형 표시 — 대비가 너무 높게 설정되었습니다. I2C 백팩의 포텐셔미터를 돌려 대비를 줄입니다.
    • LCD에 흐리거나 보이지 않는 텍스트 표시 — 대비가 너무 낮게 설정되었습니다. 포텐셔미터를 통해 증가시킵니다.
    • 잘못된 문자 표시 — I2C 주소가 잘못되었을 수 있습니다. 0x27이 작동하지 않으면 0x3F를 시도하거나 I2C 스캐너 스케치를 실행하여 주소를 찾으십시오.
    • 스케치는 업로드되지만 LCD는 공백 — SDA와 SCL 연결이 바뀌지 않았는지 다시 확인합니다.

    Linux + MCU Bridge 프로그래밍

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

    • LCD는 MCU (STM32)에 연결됩니다 — I2C 버스 (SDA/SCL)를 통해. MCU만 LCD를 직접 구동할 수 있습니다.
    • MPU는 LCD를 직접 제어할 수 없습니다Bridge.call("set_line1", "text")를 통해 MCU 함수를 호출하면 LCD를 업데이트하고 결과를 반환합니다.
    • MPU는 Wi-Fi를 가지고 있습니다 — MPU가 전체 Debian Linux와 Wi-Fi를 실행하기 때문에 Telegram 명령을 받고 LCD에 모든 메시지를 표시할 수 있습니다.
    • 통신: Linux 측의 Bridge.call()은 MCU 측의 Bridge.provide_safe() 함수를 호출합니다 (LCD 쓰기는 하드웨어 API 호출이므로).
    • ⚠️ 예약됨: /dev/ttyHS1 (Linux) 및 Serial1 (MCU)는 Arduino Router에서 사용됩니다 — 직접 열면 안 됩니다.

    요약하면: MPU가 Telegram을 통해 텍스트 전송 → MPU가 Bridge 호출 → MCU가 LCD 업데이트 → MCU가 결과를 MPU로 다시 보고.

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

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-i2c */ #include "Arduino_RouterBridge.h" #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 columns, 2 rows String current_line1 = ""; String current_line2 = ""; void set_line1(String text) { current_line1 = text.substring(0, 16); lcd.setCursor(0, 0); lcd.print(" "); // Clear line 1 lcd.setCursor(0, 0); lcd.print(current_line1); Monitor.println("Line1: " + current_line1); } void set_line2(String text) { current_line2 = text.substring(0, 16); lcd.setCursor(0, 1); lcd.print(" "); // Clear line 2 lcd.setCursor(0, 1); lcd.print(current_line2); Monitor.println("Line2: " + current_line2); } void clear_lcd() { current_line1 = ""; current_line2 = ""; lcd.clear(); Monitor.println("LCD cleared"); } void get_status() { Monitor.println("Line1: " + current_line1 + " | Line2: " + current_line2); } void setup() { Bridge.begin(); Monitor.begin(); lcd.init(); // Initialize the LCD I2C display lcd.backlight(); // Turn on the backlight lcd.setCursor(0, 0); lcd.print("Bridge Ready"); lcd.setCursor(0, 1); lcd.print("Waiting..."); Bridge.provide_safe("set_line1", set_line1); Bridge.provide_safe("set_line2", set_line2); Bridge.provide_safe("clear_lcd", clear_lcd); Bridge.provide("get_status", get_status); Monitor.println("LCD I2C Bridge ready"); } void loop() {}

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

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-i2c */ from arduino.app_utils import * import time def loop(): result = Bridge.call("set_line1", "Hello UNO Q") print(result) result = Bridge.call("set_line2", "Python Bridge") print(result) time.sleep(3) result = Bridge.call("clear_lcd") print(result) time.sleep(2) result = Bridge.call("set_line1", "Counting: 1") print(result) result = Bridge.call("set_line2", "Loop running") print(result) time.sleep(3) App.run(user_loop=loop)
    • 참고: MCU 스케치에서 Bridge.begin()이 호출되었는지 확인하고 Python 스크립트를 실행하기 전에 스케치를 업로드해야 합니다.
    • ⚠️ 경고: /dev/ttyHS1 (Linux)을 직접 열거나 Serial1 (MCU)을 사용하면 안 됩니다 — Arduino Router에서 예약되어 있습니다.

    빠른 단계

    • 새 App 생성: Arduino App Lab을 열고 Create New App을 클릭하고, DIYables_LCD_I2C_Bridge 이름을 입력하고, Create을 클릭합니다.
    • MCU 스케치 붙여넣기: 위의 Bridge MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
    • Python 스크립트 붙여넣기: 위의 Python 코드를 App의 Python 파일에 붙여넣습니다.
    • App 실행: Run 버튼을 클릭합니다 — Python 측이 몇 초마다 LCD를 업데이트합니다.

    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
    LCD I2C Bridge ready Line1: Hello UNO Q Line2: Python Bridge LCD cleared Line1: Counting: 1 Line2: Loop running

    Telegram 통합

    Telegram을 통해 세계 어디에서나 LCD에 메시지를 전송합니다.

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

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

    Python 스크립트 (Arduino App Lab) — LCD를 제어하는 Telegram 봇:

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

    빠른 단계

    • MCU 스케치 업로드: 이전 섹션의 Bridge MCU 스케치를 사용합니다 (아직 완료되지 않았으면 먼저 업로드).
    • Telegram 스크립트 붙여넣기: 위의 Python 코드를 Arduino App Lab의 앱 Python 탭에 붙여넣습니다.
    • 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꿉니다.
    • App 실행: Run을 클릭합니다 — 봇이 Telegram 명령을 수신 대기하기 시작합니다.
    • 테스트: /display Arduino UNO Q 전송 — LCD에 텍스트가 표시되어야 합니다. /clear를 전송하여 지웁니다.

    App Lab 콘솔 출력

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

    OpenClaw 통합

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

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

    • IoT 공지판: Telegram을 사용하여 근처의 컴퓨터가 없어도 벽의 LCD에 알림 발송
    • 센서 대시보드: MPU 측에서 온도, 습도 또는 기타 센서 값을 실시간으로 LCD에 표시
    • 도어 알람 디스플레이: 동작 센서가 트리거되면 LCD에 "MOTION DETECTED" 표시하고 Telegram 알림 전송
    • Wi-Fi 날씨 스테이션: MPU에서 API의 날씨 데이터를 가져오고 LCD에 예보를 스크롤
    • 카운트다운 타이머: Telegram을 통해 /timer 60 전송하면 LCD가 MCU 루프를 사용하여 초를 카운트다운

    도전 과제

    • 쉬움: Telegram 봇을 수정하여 /line1 <text>/line2 <text> 명령을 지원하여 각 LCD 행을 독립적으로 설정
    • 중간: /scroll <text> 명령을 추가하여 긴 텍스트를 LCD 전체에 스크롤하도록 만들기 (루프에서 lcd.scrollDisplayLeft() 사용)
    • 고급: LCD에 실시간 센서 데이터 (DHT22의 온도)를 표시하면서 동시에 비블로킹 업데이트 타이머를 사용하여 Telegram 명령에 응답 가능하게 유지