임베디드/아두이노

[아두이노] 파이썬으로 I2C-LCD 화면 출력하기

I2C 1602 LCD Module

 I2C 1602 LCD 모듈은 2x16 character 디스플레이이다. 

 

스펙 :

Address Range : 0x20 ~ 0x27 (Default=0x27)

Operator Voltage : 5 Vdc

 

아두이노 IDE

 2x16 모두 사용하니 주소를 0x27로 설정하자. 한 가지 주의할 점은 lcd 출력은 SBCS에 해당하는 값만 가능하다. 물론 비트맵을 직접 구성하거나, 값을 넘길 때 2바이트 단위로 직접 인코딩해주면 한글도 가능하긴 하다. (어렵고 귀찮아서 그렇지..)

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  // put your setup code here, to run once:
  Serial.begin(115200);
  lcd.init(); // initalize the lcd
  lcd.backlight();
}

String read_serial()
{
  String str = "";

  while (Serial.available())
  {
    str = Serial.readString();
    delay(10);
  }

  return str;
}

void loop()
{
  // lcd 출력 데이터 입력받기
  String str = read_serial(), str_2;
  // 16 글자 이상인 경우 다음 줄에 이어서 출력
  if (str.length() >= 16)
  {
    str_2 = str.substring(16);
  }

  // lcd 출력
  if (str == "1")
  {
    lcd.clear();
  }
  else
  {
    lcd.setCursor(0, 0);
    lcd.print(str);
    lcd.setCursor(0, 1);
    lcd.print(str_2);
  }
}

※ 시리얼 통신으로 데이터 입력받을 때, string버퍼가 아닌 char버퍼로 받아 string으로 구성하는 방식을 이용하면 좀 더 빠르게 작동한다.

while( Serial.available())   
{
    char ch = Serial.read();   
    str.concat(ch);   
    delay(10);  
} 

 

 

파이썬

import serial

# 'COM3' 부분에 환경에 맞는 포트 입력
ser = serial.Serial('COM3', 115200)

while True:
    if ser.readable():
        input_str = input()  # 최대 32 문자
        size = len(input_str)
        if 0 <= size <= 32:
            # data 전송
            input_str = input_str.encode('utf-8')
            ser.write(input_str)
        else:
            print("32 글자 초과, 재입력 바랍니다.")

 

 

'임베디드 > 아두이노' 카테고리의 다른 글

[아두이노] 파이썬으로 제어하기  (7) 2021.02.11