본문 바로가기

Info

RaspberryPi - 라즈베리파이에서 시리얼통신 하기

라즈베리파이는 기본적으로 UART로 콘솔에 접속하도록 되어 있다.


따라서 시리얼통신을 위해 config 파일 두개를 수정해야한다.



아래의 붉은색 부분 제거.

vi /boot/cmdline.txt

dwc_otg.lpm_enable=0 console=tty1 console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait ip=169.254.105.114

타 블로그에 보면 kgdboc=ttyAMA0, 115200 도 있는데 필자의 경우엔 없었다. 이 내용도 있다면 이거도 제거.


아래의 파일에서 다음 부분 주석처리. (맨 앞에 # 붙이기)

vi /etc/inittab

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100




이제 어떤 모듈을 사용하여 시리얼 통신을 하겠냐에 따라 달라지겠지만,


라즈베리파이의 GPIO14(TX), GPIO15(RX)를 모듈과 연결시키면 된다.


모듈에 따라 추가적으로 연결해야 할 부분이 있겠지.


필자의 경우 블루투스모듈을 사용했는데, 전압, 그라운드, TX, RX 네 개의 GPIO를 사용했다.

모듈의 TX, RX와 라즈베리파이의 TX, RX를 교차하여 연결하여야 했다.




시리얼 통신 샘플 코드  (WiringPi 라이브러리 사용)


// gcc -o test test.c -l wiringPi

#include <stdio.h>

#include <errno.h>

#include <wiringSerial.h>


int main(void){


    int fd;

    int data;


    fd = serialOpen("/dev/ttyAMA0", 115200);

    if(fd < 0){

        fprintf(stderr, "Failed to open serial device: %s\n", strerror(errno));

    }


    printf("\nRaspberry Pi UART Test\n");


    while(1){

        data = serialGetchar(fd);

        printf ("\nRecv Data: %c", (char)data);

        serialPutchar(fd, data);

        serialPuts(fd, "\n");

        fflush(stdout);

    }


    return 0;

}