2017년 11월 5일 일요일

35. 라즈베리파이에서 LCD 사용하기

Step0. 개요

라즈베리 파이에서 LCD를 사용하는 것을 구현해 보겠습니다. 아두이노로 LCD를 이용하여 문자 출력이나 시계를 구현해 보았는데 라즈베리파이로 LCD 사용해 보겠습니다.
이것을 이용하여 MP3, audio를 만들어 play, stop,pause등을 lcd에 표현할 수 있을 것입니다. 실제로 해보니 결과는 간단하지만 여러 과정에서 세심하게 진행해야 합니다. 실수로 잘못연결하여 LCD모니터가 쇼트로 망가져 다시 시작하게 되었습니다.

Step 1. 준비물

 라즈베리파이(여기서는 raspberry 3 model b v1.2), lcd(1602A), 가변저항, 저항(100Ω), 점퍼선, 브레드보드이 필요합니다.

Step 2. 사전 준비사항

라즈베리파이에 있는 GPIO핀을 이용하려면 먼저 wiringPi를 설치해야 합니다. 설치 방법은 제 블로그 34번 글을 참고하시기 바랍니다.

Step 3. 조립하기

 아래 사진을 참고하시기 바랍니다.


no Lcd wiringPi 물리적 위치
1 VSS -

2 VDD +

3 VO 가변저항 가운데

4 RS CE1 26
5 RW -

6 E CE0 24
7 D0



8 D1



9 D2



10 D3



11 D4 6 22
12 D5 5 18
13 D6 4 16
14 D7 1 12
15 A 저항과 +

16 K -


위 표를 보는 방법은 가장 왼쪽 번호는 LCD 의 번호이고 가장 오른쪽은 라즈베리파이 GPIO핀의 번호를 표시한 것입니다. 라즈베리 파이 핀은 조밀하게 총 40개핀으로 양쪽 20개씩 배열되어있습니다.오른쪽 13번째 핀은 26번을 뜻합니다.
LCD 핀 가장 왼쪽 1번 핀 VSS는 점퍼선으로 브레드보드(빵판)의 -극에 연결합니다.
LCD 4번핀인 RS핀은 라즈베리파이 26번째 핀과 점퍼선으로 연결한다는 것입니다. 그리고 LCD 7번 부터 10번(D0~D3) 연결하지 않습니다. LCD 15번째 핀은 브레드보드 에 저항100Ω을 거쳐 +극에 점퍼선으로 연결하면 됩니다. 여기서 가변저항을 설치한 것은 LCD모니터의 밝기를 조정하기 위한 것입니다. 너무밝게하거나 너무 어둡게 하면 화면에 글자가 보이지 않는 것을 조정하기 위한 것입니다.

참고로 아래 그림은 인터넷에서 복사한 것입니다. 왼쪽은 라즈베리파이 실제 모습으로 오른쪽 검은 바탕에 배열된 것이 GPIO핀의 모습이고 오른쪽 표는 각각의 핀의 물리적위치와 핀의 이름입니다. 핀의 이름은 다를 수 있으므로 반드시 gpio readall을 입력하여 정확한 표를 확인하시기 바랍니다.
라즈베리Gpio핀 배열에 대한 이미지 검색결과






















아래표는 제 라즈베리파이 gpio표를 나타낸 것으로 위의 인터넷과 비교하면 좀 다른 곳이 여러곳 있는 것을 알 수 있습니다.예를들어 7번핀이 위에는 GPIO 4,아래표에서는 GPIO7로 되어있고, 38~40번 핀도 이름이 다르게 표시되어 있습니다.(sudo gpio readall 명령)

Step 4. 코딩

코딩은 터미널 모드에서

cd wiringPi

wiringPi 폴더에서
nano lcd1602.c 를 입력하여 nano 편집기로 다음과 같이 입력합니다.


#include <wiringPi.h>           //WiringPi headers
#include <lcd.h>                //LCD headers from WiringPi
#include <stdio.h>              //Needed for the printf function below

//Pin numbers below are the WiringPi pin numbers

#define LCD_RS  11               //Register select pin
#define LCD_E   10               //Enable Pin
#define LCD_D4  6               //Data pin 4
#define LCD_D5  5               //Data pin 5
#define LCD_D6  4               //Data pin 6
#define LCD_D7  1               //Data pin 7

int main()
{
    int lcd;                //Handle for LCD
    wiringPiSetup();        //Initialise WiringPi

    //Initialise LCD(int rows, int cols, int bits, int rs, int enable, int d0, $
    if (lcd = lcdInit (2, 16,4, LCD_RS, LCD_E ,LCD_D4 , LCD_D5, LCD_D6,LCD_D7,0$
            printf ("lcd init failed! \n");
            return -1 ;
    }
    lcdPosition(lcd,0,0);  //Position cursor on the first line in the first col$
    lcdPuts(lcd, "HELLO WORLD");  //Print the text on the LCD at the current cu$
    getchar();                      //Wait for key press
}

nano 편집기에서 
^o(ctrl+o)
^x(ctrl+x)
입력하여 저장하고 터미널 모드로 빠져 나옵니다.

Step 5. 컴파일과 실행

정확히 입력저장되었다면  다음과 같이 터미널모드에서 컴파일을 합니다.


gcc -o lcd1602 lcd1602.c -lwiringPi -lwiringPiDev

실행하려면 다음과 같이 관리자 권한으로 실행하면 됩니다.
sudo ./lcd1602




출처: http://fishpoint.tistory.com/1953 [기린]


라벨:

0개의 덧글:

댓글 쓰기

에 가입 댓글 [Atom]

<< 홈