[권문송의 라즈베리 파이 먹기] (8)’hahaha’를 너무 쓰고 싶었어요

- Advertisement -

[프로젝트 8]LCD 창에 뭐라도 써보자. 그래 hahaha를 써보자

안녕하세요. [권문송의 라즈베리 파이 먹기] 시간이 돌아왔습니다. 제가 라즈베리 파이를 연습하기 위해 입문용 베이직 키트를 산 걸 아실 겁니다. 거기에 이런 게 들어있습니다.

바로 이 녀석입니다. LCD 모듈이지요. 보통 1602 LCD라고 부르는데요. 16문자를 2열에 출력할 수 있다는 뜻입니다. 16×2인 거죠. 총 32문자를 띄울 수 있습니다. 한글은 안되는 걸로 알고 있습니다. 숫자와 영문, 기본적인 특수문자만 가능합니다.



라즈베리파이+1602 LCD로 날씨 정보 보여주기 예시(사진=https://kocoafab.cc/)

LCD 창에 정보를 출력할 수 있으면, 위의 사진처럼 날씨 정보도 보여줄 수 있습니다. 대단하지 않습니까. 물론 출력하고자 하는 내용에 따라 어마어마한 코딩이 기다리고 있겠죠. 게다가 저 수많은 점퍼 와이어를 보십시오. 지금까지 제가 해온 프로젝트는 비교도 되지 않게 복잡해 보입니다.

LCD 창에 날씨 정보는 아니더라도, 무언가를 쓰고 싶었습니다. 단순한 ‘hahaha’라는 단어만이라도 저 영롱한 녹색 빛 창에 내보낼 수 있다면… 얼마나 기쁠까요.

그래서 시작했습니다. 이번에는 LCD 창에 문자를 출력하는 게 목표입니다. 제가 가지고 있는 라즈베리 파이 입문서에는 LCD 출력 관련 내용은 없더군요. 그래서 인터넷에서 열심히 찾았습니다. 다행히 몇몇 블로거님들이 라즈베리 파이로 LCD 창 출력하는 방법을 게시해주셨더라고요. 많은 도움이 됐습니다.

많은 도움, 사실 거의 따라 하기 수준이었습니다. 특히 파이썬 부분은 도무지 이해가 가지 않더라고요. 하단에 도움을 받은 블로그들을 첨부하겠습니다. 보다 자세한 내용은 해당 블로그에서 보시는 게 더 나을 듯합니다. 여기서는 ‘문송합니다의 도전기’ 정도로만 봐주세요.

첫 번째 준비물입니다. 가장 왼쪽 아래에 있는 것이 1602 LCD입니다. 그 위에 가변 저항이 있습니다. 시계 방향으로 브레드 보드, 1×40 핀 헤더, 그리고 암수 점퍼 와이어입니다. 첫 번째 준비물이라고 한 건 여기에 더 많은 부품이 들어갔기 때문입니다. 뒤에 나오니 잠시만 기다려주세요.

1602 LCD 창 접선 부분을 보면 동그란 구멍이 16개 있습니다. 점퍼 와이어를 연결하는 부분인데요. 여기에 점퍼 와이어를 연결하면 구멍에 딱 맞아떨어지지 않아 덜렁덜렁합니다. 그리고 브레드 보드에 연결하려면 암수 점퍼 와이어가 아닌 양쪽 모두 핀이 있는 점퍼 와이어(수수 점퍼와이어?)가 필요합니다.

그래서 저기를 막아주고 핀으로 세울 수 있도록 해주는 게 ‘핀 헤더’입니다. 하지만 핀 헤더 수가 많아서 LCD 모듈에 결합이 어렵습니다. 그래서 딱 16개만 남겨두고 ‘뚝’ 부러트렸습니다. 괜찮겠죠? 우리에겐 팀장님 법카가 있으니까요.

이제 LCD 창에 딱 들어갈 수 있습니다. 결합해 봅시다.

사진으로 보면 잘 결합된 것처럼 보이지만, 이것도 덜렁덜렁거립니다. 제대로 접합이 되지 않아 전기 신호를 전달할 수 있을지 모르겠습니다. 그래도 방법이 없어 일단 그대로 진행했습니다. 나중에 문제가 발생했고, 다른 준비물이 등장하게 됩니다.

그런데 생각해보니 LCD 창도 핀으로 연결합니다. 그리고 라즈베리 파이의 GPIO도 핀입니다. 그러면 암수 점퍼 와이어로는 연결할 수 없습니다. 둘 다 수수(?)인데 저는 암암(?) 점퍼 와이어가 없습니다. 아 이거 곤란하게 됐습니다. 무언가 암수로 연결될 수 있는 매개체가 필요한데요. 다행히 라즈베리 파이 입문용 베이직 키트에 그런 부품이 하나 있었습니다. 바로 GPIO 확장 보드입니다.

바로 이렇게 생긴 아이입니다. 저기 하얀 부분 핀에 40핀 IDC 케이블을 연결합니다. 이 케이블 반대쪽을 라즈베리 파이 GPIO에 연결합니다. 그리고 확장 보드의 빨간색 기판, 아래에 핀이 있는 부분을 브레드 보드 가운데 꽂아줍니다.

바로 이런 방식입니다. 이렇게 연결하면 넓은 브레드 보드에 점퍼 와이어를 꽂아 사용할 수 있습니다. 라즈베리 파이 GPIO에 바로 꽂아 쓰는 것보다 활용성이 좋아 보입니다. GPIO 확장 보드의 빨간 기판을 보면 라즈베리 파이 GPIO 순서대로 표시가 되어 있습니다. 좌우 배치가 GPIO 핀과 동일합니다.

브레드 보드는 횡 방향으로 서로 연결되어 있으니 횡 방향 아무 구멍에나 꽂으면 연결이 됩니다. 가령 1번 라인 오른쪽의 어떤 구멍에 점퍼 와이어를 꽂아도 5v가 되는 것이지요. 이렇게 하면 기본적인 준비는 끝났습니다. 이제 점퍼 와이어로 라즈베리 파이-브레드보드-LCD 창을 연결하면 됩니다.

우선 처음으로 저를 구원해 준 블로그를 소개합니다. ‘코드 드래곤’님의 https://codedragon.tistory.com/7922 블로그입니다. 여기서 1602 LCD 모듈 핀의 구조와 LCD 창 어디에 신호가 입력되는 것인지 알 수 있습니다.

각각 핀마다 역할이 따로 있군요. 전원을 위한 핀도 있고 데이터 전송과 읽기 쓰기 모드를 선택하는 핀도 있습니다. 안 쓰는 핀도 있는데요. 이번에 LCD 창에 글을 쓰는 과정에서 쓰지 않은 핀은 7~10번입니다. 물론 위의 내용을 다 이해한 건 아닙니다. 일단 따라가 보도록 하죠.

다음 구원은 ‘라임패밀리’님(https://m.blog.naver.com/opendraft)으로부터 받았습니다. 이 블로그에서는 라즈베리 파이와 브레드 보드, LCD 모듈을 연결하는 전반적인 방법이 나와있습니다. 실제 GPIO 핀과 LCD 핀 연결 순서는 이 블로그에 나와있는 회로도를 참고했습니다.

바로 이것인데요. 라임패밀리님도 해외 포스팅(https://pimylifeup.com/raspberry-pi-lcd-16×2/)을 참고하셨다고 하네요. 거기도 둘러봤습니다.

자 이제 대략적인 회로도가 나왔으니 순서에 맞게 점퍼 와이어를 연결해봅시다.

우선 5V와 그라운드(GND)에 연결만 했는데, LCD 창에 불이 들어왔습니다. 그런데 LCD 모듈의 핀 옆에 보면 이상한 검은 물체가 있죠? 이건 핀이 덜렁덜렁 거리면서 제대로 접합되지 않아 억지로 접합되도록 작은 끈을 넣어둔 것입니다. 이게 없으면 연결이 안 되었습니다.

문제는 점퍼 와이어를 추가해서 연결하다 보니, 제대로 핀을 고정하지 않고서는 진행을 할 수 없었습니다. LCD 모듈에 핀 헤더가 맞물리지 않아서 불이 들어왔다 꺼졌다 했습니다. 결국 LCD 모듈과 핀 헤더를 단단히 고정시킬 무언가가 필요했습니다. 팀장님께 말씀드렸습니다. “팀장님! 인두가 필요합니다!”

통이 큰 팀장님은 고급형 권총 방식 인두 세트를 사주셨습니다. (Kwonmunsong is free~!) 이틀 만에 도착했습니다. 라즈베리 파이로 LCD 모듈을 제어하려는 사람 대부분, 인두로 납땜을 했습니다. 저도 할 수밖에 없었죠. 저는 핀 헤더와 LCD 모듈을 납땜으로 연결하기로 했습니다.

때는 바야흐로 20세기 말, 중학교 때인가 어느 때쯤 기술 시간이었을까요. 그때 라디오 조립을 한다고 인두로 납땜을 한 적이 있습니다. 하지만 그 소년은 문과생이 됐죠.(물론 라디오는 작동하지 않았습니다.) 정말 오랜만에 납땜을 해보니 손도 떨리고 모양도 이쁘게 나오지 않았습니다. 하지만 어쩌겠습니까. 그렇다고 판을 엎을 순 없는 노릇이니까요. 일단 묻고 ‘고’를 외쳤습니다.

1번(오른쪽) 부터 16번(왼쪽) 순서대로 납땜을 했습니다. 처음에는 모양이 엉망이었다가 조금씩 깔끔해진 거 같기도 하군요. 여하튼 대중없을뿐더러 모양도 제멋대로였습니다. 그래도 핀 헤더를 LCD 모듈에 단단히 고정할 순 있었습니다.

그리고 회로도를 따라 점퍼 와이어를 하나하나 연결합니다. 이때 상황에 따라 암수 점퍼 와이어가 아니라 양쪽에 핀이 있는 수수(?) 점퍼 와이어를 쓰기도 했습니다. 다행히 이건 베이직 키트에 들어있더군요.

완성했습니다. 위의 사진은 가변 저항의 점퍼 와이어가 하나 빠진 상태입니다. 그냥 LCD 창에 불만 들어옵니다. 아래 사진은 다시 안정적으로 가변저항을 연결한 상태입니다. 하단 라인에 문자가 출력되는 열(칸)이 보이는군요. 위에 열은 왜 안 보일까요.

가변 저항은 전압을 변환할 때 사용합니다. 꼭지를 좌우로 돌릴 수 있는데, 여기서는 LCD 밝기를 조절하는데 사용한다고 합니다. 어떤 사람은 5V 부분에 저항을 하나 더 달아서 빛 밝기를 조절한다고 하는데, 전 그냥 가기로 했습니다. 빛이 강하긴 한데 못 봐줄 정도는 아니군요. (사실 저항을 더 달았다가 문제가 발생할 수 있다는 두려움도 작용했습니다.)

여기까지가 하드웨어적인 세팅이 완료된 상태입니다. 이제 그분이 남았죠. 파이썬의 시간입니다. 파이썬에 들어가기 전 코드에 들어가는 모듈을 설치해야 합니다. 참고한 블로그에서는 ‘Adafruit_CharLCD’라는 모듈을 설치했습니다. 이걸 설치하지 않으면 코드가 정상 작동하지 않는다고 하는군요.

라즈비안 터미널에서 git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git 라고 칩니다.

다음 /Adafruit_Python_CarLCD 폴더에 들어가서 setup.py를 설치합니다. 명령어는 sudo python setup.py install 입니다.

설치가 완료되면 파이썬에서 코딩을 합니다. 하아 ㅜㅜ… 솔직히 LCD 모듈을 제어할 수 있는 코드를 짤 능력이 안됩니다. 그래서 다른 블로그에서 그대로 옮겨왔습니다. 하나하나 그 의미를 설명드리고 싶은데, 능력이 부족하네요.

라즈베리 파이 프로젝트 8회까지 하면서 느낀 건 코딩 없이는 아무것도 하지 못한다는 것입니다. 처음에 LED 불 켜는 건 단순히 스크래치를 통해서 간단하게 작업할 수 있었지만, LCD 모듈 제어 수준까지 오니 파이썬으로 옮겨오고, 코딩도 훨씬 복잡해졌습니다. 하나 기억해야 할 것은 ‘라즈베리 파이를 하려면 코딩을 알아야 한다’는 것입니다. 이제부터는 파이썬 공부도 열심히 병행해야겠군요.

참고한 코드는 라임패밀리님이 참고한 해외 포스팅입니다. 지금 GPIO 핀 연결 순번이 이 코드에 맞춰졌기 때문에 그대로 따를 수밖에 없었죠. 만약 GPIO 순서가 바뀐다면 코드 내 GPIO 번호도 바꿔줘야 합니다.

코드는 다음과 같습니다.

import time

import Adafruit_CharLCD as LCD

# Raspberry Pi pin setup

lcd_rs = 25

lcd_en = 24

lcd_d4 = 23

lcd_d5 = 17

lcd_d6 = 18

lcd_d7 = 22

lcd_backlight = 2

# Define LCD column and row size for 16×2 LCD.

lcd_columns = 16

lcd_rows = 2

lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight)

lcd.message(‘Hello\nworld!’)

# Wait 5 seconds

time.sleep(5.0)

lcd.clear()

text = raw_input(“Type Something to be displayed: “)

lcd.message(text)

# Wait 5 seconds

time.sleep(5.0)

lcd.clear()

lcd.message(‘Goodbye\nWorld!’)

time.sleep(5.0)

lcd.clear()

제가 이해한 대로 보면 처음에는 LCD를 제어할 Adafruit_CharLCD 모듈을 import 합니다. LCD 핀 구조에 따라 라즈베리 파이 GPIO 번호를 설정해줍니다. # Raspberry Pi pin setup 부분입니다. LCD의 행과 열을 정의합니다. 그리고 LCD 메시지를 시작합니다. 처음 메시지는 ‘Hello world!’입니다. LCD 창에서 띄어쓰기 하려면 \n를 쓰는 모양입니다.

5초 뒤 창을 지우고(lcd.clear)고 LCD 창에 넣을 문구를 입력합니다. 이때 터미널 화면에서는 Type Something to be desplayed: 라는 문구가 뜨겠죠. 입력을 하고 나면 해당 메시지가 출력됩니다. 그리고 5초 뒤 다시 ‘Goodbye World!’라는 메시지로 종료합니다.

단순해 보이지만 여기서 Adafruit_CharLCD 역할이 무엇인지 잘 모르겠습니다. 이 부분에 대해 잘 아시는 분은 댓글 부탁드릴게요. 다음은 토니에서 코딩을 하는 화면입니다. 아 정확하게는 코드를 복사하는 화면입니다.

icon-alert

ic_multitracktest

네이버 동영상 플레이어

재생시간, 이 동영상의 길이는 9초 입니다.

화질 선택 옵션

화질 선택 옵션

LCD 제어 코드

다음은 토니에서 실행(Run) 해보았습니다. 먼저 해당 파일은 LCD.py라고 저장했습니다.

icon-alert

ic_multitracktest

네이버 동영상 플레이어

재생시간, 이 동영상의 길이는 17초 입니다.

화질 선택 옵션

화질 선택 옵션

LCD 코드 실행

안됩니다. Adafruit_CharLCD 모듈을 찾을 수 없다는 메시지 같네요. 당황했습니다. 이대로 끝나는 것일까. 그런데 참고한 블로그를 보면 모두 터미널에서 파일을 실행했습니다. 토니에서는 Adafruit_CharLCD 모듈을 불러올 수 없는 것일까라고 생각하며 터미널에서 실행했습니다. LCD.py 파일이 저장된 폴더에서 sudo python LCD.py 명령어를 쳤습니다.

오! 됩니다. 터미널에서 실행하는 게 답이었나 보군요. 이제 hahaha를 입력해보겠습니다.

성공했습니다. 이 과정을 동영상으로도 남겨봅니다. 한 손은 LCD 모듈을 들고 한손 타법으로 쳐서 속도가 매우 느립니다.

icon-alert

ic_multitracktest

네이버 동영상 플레이어

재생시간, 이 동영상의 길이는 48초 입니다.

화질 선택 옵션

화질 선택 옵션

LCD 모듈 제어하기 성공

성공은 했지만, 마음이 영 시원하지 않습니다. 코딩 부분에 대한 이해도가 부족한 탓입니다. 즉 ‘성공은 했다. 그런데 왜 성공했는지 모르겠다’ 상태입니다. 그래도 조금씩 해나가다 보면 실력이 늘겠죠. 파이썬 공부, 파이썬 공부, 파이썬 공부…를 다짐하며 오늘은 여기서 마무리하도록 하겠습니다. 다음 시간에 또 봐요~ Goodbye! World!

테크플러스 에디터 권동준

tech-plus@naver.com

*네이버 테크 구독하기*

*테크플러스 텔레그램 구독하기*

- Advertisement -

Related Stories