아두이노 우노 Q LCD 20x4

이 튜토리얼은 기본 텍스트에서 사용자 정의 문자, 스크롤, 원격 Telegram 제어까지 Arduino UNO Q와 함께 LCD 20x4 I2C 디스플레이를 사용하는 방법을 보여줍니다.

Arduino UNO Q - lcd 20x4

필요한 하드웨어

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

LCD I2C 20x4 정보

LCD 20x4 I2C는 20개 열과 4개 행을 가지고 있으며, 16x2보다 두 배 많은 행을 가지고 있어 대시보드, 메뉴 및 다중 라인 상태 표시에 유용합니다. 16x2와 마찬가지로 I2C 백팩을 사용하여 간편한 4선 연결을 제공합니다.

LCD 핀아웃

LCD I2C는 4개의 핀을 가지고 있습니다:

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

LCD 좌표

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

Arduino UNO Q lcd 20x4 coordinate

배선 다이어그램

Arduino UNO Q lcd 20x4 연결 배선도

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

LCD I2C 핀Arduino UNO Q 핀
GNDGND
VCC5V
SDASDA
SCLSCL

※ 주의:

I2C 주소는 제조업체에 따라 다를 수 있습니다. DIYables에서 지정한 0x27을 사용합니다. 0x27이 작동하지 않으면 0x3F를 시도하십시오.

LCD I2C 20x4 프로그래밍 방법

DIYables_LCD_I2C 라이브러리는 16x2와 20x4 모두에서 작동합니다. 열 및 행 수만 변경하면 됩니다.

  • 20x4용 LCD 객체 생성:
DIYables_LCD_I2C lcd(0x27, 20, 4); // I2C address 0x27, 20 columns, 4 rows
  • setup()에서 초기화:
lcd.init(); lcd.backlight();
  • 커서 이동 및 인쇄 (행 0–3):
lcd.setCursor(0, 0); // column 0, row 0 lcd.print("Row 0 text here"); lcd.setCursor(0, 3); // column 0, row 3 lcd.print("Row 3 text here");

사용자 정의 문자 및 문제 해결 팁과 같은 추가 기능에 대해서는 아두이노 우노 Q - LCD I2C을 참조하십시오.

Arduino UNO Q 코드 — LCD 20x4의 Hello World

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

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

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-20x4 */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 20, 4); // I2C address 0x27, 20 columns, 4 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"); lcd.setCursor(0, 2); lcd.print("LCD 20x4 I2C"); lcd.setCursor(0, 3); lcd.print("DIYables.io"); Monitor.println("LCD 20x4 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를 감지할 때까지 기다립니다.
  • 새 앱 생성: Create New App 버튼을 클릭합니다.
create new app in 아두이노 app lab on Arduino UNO Q
  • 앱에 이름을 지정합니다. 예: DIYables_LCD_20x4
  • 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 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에 컴파일 및 업로드합니다.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q

    LCD를 보면 모든 4개 행에 텍스트가 표시됩니다: "Hello, World!", "Arduino UNO Q", "LCD 20x4 I2C", "DIYables.io"!

    ※ 주의:

    LCD에 아무것도 표시되지 않거나 검은색 정사각형만 표시되면 I2C 백팩의 대비 포텐셔미터를 조정합니다. 자세한 내용은 LCD I2C 문제 해결을 참조하십시오.

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

    이 예제는 일반 텍스트 문자열, 정수, 부동소수점, 16진수 숫자를 표시하는 방법을 보여줍니다. 각각은 한 행에 표시됩니다.

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

    빠른 단계

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

    LCD는 행 0에 텍스트, 행 1에 정수, 행 2에 부동소수점, 행 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 20x4의 사용자 정의 문자

    LCD 20x4는 최대 8개의 사용자 정의 문자 (ID 0–7)를 저장할 수 있습니다. 각 문자는 바이트 배열에 저장된 8행 × 5열 비트맵으로 정의됩니다. 배열을 정의하고 lcd.createChar()에 등록한 후 lcd.write()를 사용하여 표시합니다.

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-20x4 */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 20, 4); // I2C address 0x27, 20 columns, 4 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: label + heart lcd.setCursor(0, 0); lcd.print("Heart: "); lcd.write((byte)0); // Row 1: label + smiley lcd.setCursor(0, 1); lcd.print("Smiley: "); lcd.write((byte)1); // Row 2: label + note lcd.setCursor(0, 2); lcd.print("Note: "); lcd.write((byte)2); // Row 3: label + arrow up lcd.setCursor(0, 3); lcd.print("Arrow up: "); lcd.write((byte)3); Monitor.println("LCD 20x4 custom characters done"); } void loop() {}

    빠른 단계

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

    LCD는 4개 행을 표시하며, 각 행은 끝에 표시된 사용자 정의 문자로 레이블이 지정됩니다: 하트, 웃는 얼굴, 음표, 화살표.

    ※ 주의:

    고유한 문자를 설계하려면 LCD Custom Character Generator를 사용합니다. 이를 통해 픽셀 패턴을 그리고 코드에 대한 바이트 배열을 출력할 수 있습니다.

    Arduino UNO Q 코드 — LCD 20x4의 스크롤 텍스트

    scrollDisplayLeft()scrollDisplayRight()는 전체 디스플레이 내용을 각 호출당 한 열씩 이동합니다. 모든 4개 행이 함께 이동합니다. 루프에서 짧은 지연과 함께 부드러운 스크롤 효과를 만듭니다.

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

    빠른 단계

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

    LCD 내용이 왼쪽으로 20칸 이동한 후 원래 위치로 오른쪽으로 20칸 이동합니다.

    Arduino UNO Q 코드 — LCD 20x4의 백라이트 제어

    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-20x4 */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 20, 4); // I2C address 0x27, 20 columns, 4 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"); lcd.setCursor(0, 2); lcd.print("LCD 20x4 I2C"); lcd.setCursor(0, 3); lcd.print("DIYables.io"); 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 20x4 backlight demo done"); } void loop() {}

    빠른 단계

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

    LCD 백라이트가 켜지고, 끄고, 다시 켜지고, 마지막으로 5번 깜박이는 것을 지켜보세요.

    Arduino UNO Q 코드 — LCD 20x4의 커서 및 깜박임

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

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-20x4 */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 20, 4); // I2C address 0x27, 20 columns, 4 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 cursor ON"); delay(3000); // Hide cursor lcd.noCursor(); Monitor.println("noCursor() — cursor 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 cursor ON"); delay(3000); // Stop blinking lcd.noBlink(); Monitor.println("noBlink() — blinking cursor 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 20x4 cursor demo done"); } void loop() {}

    빠른 단계

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

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

    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만 직접 쓸 수 있습니다.
    • MPU는 LCD를 직접 제어할 수 없습니다Bridge.call("set_line1", "text")와 같은 MCU 함수를 호출하여 각 행을 업데이트합니다.
    • MPU는 Wi-Fi를 가지고 있습니다 — MPU가 Wi-Fi가 있는 전체 Debian Linux를 실행하기 때문에 Telegram 명령을 수신하고 모든 메시지를 LCD에 표시할 수 있습니다.
    • 통신: Linux 측의 Bridge.call()은 MCU 측의 Bridge.provide_safe() 함수를 호출합니다 (LCD 쓰기는 하드웨어 API 호출이므로).
    • ⚠️ 예약됨: /dev/ttyHS1 (Linux) 및 Serial1 (MCU)은 Arduino Router에서 사용됩니다. 직접 열지 마십시오.

    간단히 말해서: MPU는 Bridge를 통해 텍스트를 보냅니다 → MCU는 LCD 행에 씁니다 → MCU는 모니터에 결과를 인쇄합니다.

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

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-20x4 */ #include "Arduino_RouterBridge.h" #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 20, 4); // I2C address 0x27, 20 columns, 4 rows String lines[4] = {"", "", "", ""}; void set_line1(String text) { lines[0] = text.substring(0, 20); lcd.setCursor(0, 0); lcd.print(" "); // Clear row 0 lcd.setCursor(0, 0); lcd.print(lines[0]); Monitor.println("Row0: " + lines[0]); } void set_line2(String text) { lines[1] = text.substring(0, 20); lcd.setCursor(0, 1); lcd.print(" "); // Clear row 1 lcd.setCursor(0, 1); lcd.print(lines[1]); Monitor.println("Row1: " + lines[1]); } void set_line3(String text) { lines[2] = text.substring(0, 20); lcd.setCursor(0, 2); lcd.print(" "); // Clear row 2 lcd.setCursor(0, 2); lcd.print(lines[2]); Monitor.println("Row2: " + lines[2]); } void set_line4(String text) { lines[3] = text.substring(0, 20); lcd.setCursor(0, 3); lcd.print(" "); // Clear row 3 lcd.setCursor(0, 3); lcd.print(lines[3]); Monitor.println("Row3: " + lines[3]); } void clear_lcd() { for (int i = 0; i < 4; i++) lines[i] = ""; lcd.clear(); Monitor.println("LCD cleared"); } void get_status() { Monitor.println("R0: " + lines[0]); Monitor.println("R1: " + lines[1]); Monitor.println("R2: " + lines[2]); Monitor.println("R3: " + lines[3]); } void setup() { Bridge.begin(); Monitor.begin(); lcd.init(); lcd.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("set_line3", set_line3); Bridge.provide_safe("set_line4", set_line4); Bridge.provide_safe("clear_lcd", clear_lcd); Bridge.provide("get_status", get_status); Monitor.println("LCD 20x4 Bridge ready"); } void loop() {}

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

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-20x4 */ from arduino.app_utils import * import time def loop(): Bridge.call("set_line1", "Arduino UNO Q") Bridge.call("set_line2", "LCD 20x4 Bridge") Bridge.call("set_line3", "DIYables.io") Bridge.call("set_line4", "Python running...") time.sleep(3) Bridge.call("clear_lcd") time.sleep(1) Bridge.call("set_line1", "Line 1 update") Bridge.call("set_line2", "Line 2 update") result = Bridge.call("get_status") print(result) time.sleep(3) App.run(user_loop=loop)

    빠른 단계

    • 새 앱 생성: Arduino App Lab을 열고 Create New App을 클릭한 다음 DIYables_LCD_20x4_Bridge라는 이름을 지정하고 Create를 클릭합니다.
    • MCU 스케치 붙여넣기: 위의 Bridge MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
    • Python 스크립트 붙여넣기: 위의 Python 코드를 앱의 Python 파일에 붙여넣습니다.
    • 앱 실행: Run 버튼을 클릭합니다. Python 측이 모든 4개 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 20x4 Bridge ready Row0: Arduino UNO Q Row1: LCD 20x4 Bridge Row2: DIYables.io Row3: Python running... LCD cleared Row0: Line 1 update Row1: Line 2 update R0: Line 1 update R1: Line 2 update R2: R3:

    Telegram 통합

    LCD 20x4를 원격으로 제어합니다. Telegram을 통해 어디서나 모든 행에 텍스트를 보낼 수 있습니다.

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

    MCU 스케치: 이전 Bridge 섹션의 같은 MCU 스케치를 유지합니다 — 변경할 필요가 없습니다. STM32에 이미 업로드되었고 실행 중인지 확인합니다.

    Python 스크립트 (Arduino App Lab) — LCD 20x4의 Telegram 봇:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-lcd-20x4 */ 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("/row1 "): result = Bridge.call("set_line1", text[6:]) send_message(chat_id, result) elif text.startswith("/row2 "): result = Bridge.call("set_line2", text[6:]) send_message(chat_id, result) elif text.startswith("/row3 "): result = Bridge.call("set_line3", text[6:]) send_message(chat_id, result) elif text.startswith("/row4 "): result = Bridge.call("set_line4", text[6:]) send_message(chat_id, result) elif text == "/clear": result = Bridge.call("clear_lcd") send_message(chat_id, result) elif text == "/status": result = Bridge.call("get_status") send_message(chat_id, result) else: send_message(chat_id, "Commands:\n/row1 <text>\n/row2 <text>\n/row3 <text>\n/row4 <text>\n/clear\n/status") App.run(user_loop=loop)
    • 참고: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 얻은 토큰으로 바꿉니다.
    • /row1 Hello를 보냅니다 — 행 1에 "Hello"를 표시합니다.
    • /row2 World를 보냅니다 — 행 2에 "World"를 표시합니다.
    • /clear를 보냅니다 — 전체 LCD를 지웁니다.
    • /status를 보냅니다 — 모든 4개 행의 현재 내용을 반환합니다.

    빠른 단계

    • MCU 스케치 업로드: 이전 섹션의 Bridge MCU 스케치를 사용합니다.
    • Telegram 스크립트 붙여넣기: 위의 Python 코드를 Python 탭에 붙여넣습니다.
    • 토큰 설정: YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꿉니다.
    • 앱 실행: Run을 클릭합니다. 봇이 Telegram 명령을 기다립니다.
    • 테스트: /row1 Arduino UNO Q를 보냅니다. 해당 텍스트가 LCD의 첫 번째 행에 표시되어야 합니다.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /row1 Arduino UNO Q [2026-04-29 12:00:01] Row0: Arduino UNO Q [2026-04-29 12:01:10] Telegram: /row3 DIYables.io [2026-04-29 12:01:10] Row2: DIYables.io [2026-04-29 12:02:00] Telegram: /status [2026-04-29 12:02:00] R0: Arduino UNO Q | R1: | R2: DIYables.io | R3: [2026-04-29 12:03:15] Telegram: /clear [2026-04-29 12:03:15] 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
    /row1 Arduino UNO Q
    10:15 AM ✓✓
    Row0: Arduino UNO Q
    10:16 AM
    /row3 DIYables.io
    10:17 AM ✓✓
    Row2: DIYables.io
    10:18 AM
    /status
    10:19 AM ✓✓
    R0: Arduino UNO Q R1: R2: DIYables.io R3:
    10:20 AM
    /clear
    10:21 AM ✓✓
    LCD cleared
    10:22 AM

    OpenClaw 통합

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

    응용 프로그램/프로젝트 아이디어

    • 4행 센서 대시보드: 모든 4개 행에 동시에 온도, 습도, 기압, 배터리 수준을 표시합니다
    • 네트워크 상태 보드: IP 주소, 연결된 장치, 가동 시간, 마지막 이벤트를 전용 행에 표시합니다
    • 랩 장비 디스플레이: 20x4를 사용하여 다중 채널 센서 판독값을 간편한 형식으로 표시합니다
    • 카운트다운 타이머 보드: 4개 행 모두를 사용하여 대형 타이머를 표시하여 방 전체에서 쉽게 읽을 수 있도록 합니다
    • 원격 공지판: Telegram을 사용하여 벽이나 책상의 LCD에 4줄 공지사항을 푸시합니다

    도전해보세요

    • 쉬움: /status 회신을 Row 1: text | Row 2: text | Row 3: text | Row 4: text 형식으로 포맷하여 단일 메시지에 수정합니다
    • 중간: /display <text> 명령을 추가하여 긴 텍스트를 최대 4개 행의 20자 각각으로 자동 줄바꿈합니다
    • 고급: lcd.scrollDisplayLeft()를 사용하여 Telegram의 긴 메시지를 모든 4개 행에 걸쳐 표시하는 스크롤 티커를 구현합니다