21. GPIO – 시리얼 통신 실험 2
이전 강좌에서는 라즈베리 파이의 시리얼 포트를 콘솔로 이용하는 실험을 해 보았다. 이번 강좌에서는 시리얼 라이브러리를 이용하여 시리얼 통신 실험을 하는 방법에 대해서 알아 보도록 하겠다. 이번 강좌에서도 역시 Gordon의 wiringPi 라이브러리를 이용하도록 하겠다.
wiringPi의 예제를 통해서 사용법을 알아 보도록 하자.
예제 파일이 있는 폴더로 이동 후에
pi@raspberrypi ~/wiringPi/examples $
예제를 로드 해 보자.
$ nano serialRead.c
|
#include
#include
#include
#include
int main ()
{
int fd ;
if ((fd = serialOpen ("/dev/ttyAMA0", 115200)) < 0)
{
fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;
return 1 ;
}
// Loop, getting and printing characters
for (;;)
{
putchar (serialGetchar (fd)) ;
fflush (stdout) ;
}
}
|
시리얼 통신 관련 라이브러리를 이용하려면, 아래와 같이 사용자의 프로그램에 반드시 포함하도
록한다.
#include
중요한 함수 몇 개를 살펴보도록 하자.
l int serialOpen(char *device, int baud);
이 시리얼 오픈 함수는 시리얼 포트를 열고(open) 초기화 하며, 속도(baud rate)를 설정하는 함수
이다. device는 “/dev/ttyAMA0”로 오픈 할 시리얼 포트를 지정하며, baud는 통신 속도롤 지정
하면 된다. 리턴 값으로는 파일 디스크립터나 에러가 있을 경우 -1을 넘겨 준다.
l int serialGetchar(int fd);
이 함수는 시리얼 포트에서 한 바이트를 받아서 리턴 해 주는 함수이다. fd는 시리얼 포트를 오픈
시에 리턴 된 파일 디스크립터이다.
$ gcc –o serialRead serialRead.c –I/usr/local/include –L/usr/local/lib –lwiringPi
$ sudo ./serialRead
위와 같이 빌드 후에 실행 시켜 본다.
본인은 Tera Term과 같은 시리얼 통신 프로그램을 사용하여, 동작 실험읗 해 볼 수있다. 실행 후
에 Tera Term에서 임의로 문자를 입력해 보면, 사용자의 콘솔에 입력된 문자가 출력되는 것을 볼
수 있다.
직접 빌드 후에 실행해 보고, 확인 해 보도록 하자. 시리얼 통신 프로그램은 사용자가 사용하고
있는 것은 뭐든 가능하다.
wiringPi에서 지원하는 다른 함수는 다음과 같다. 함수 이름으로 기능을 알 수 있으니 별도의 설
명은 안 하도록 하겠다.
l void serialClose(int fd); // open했던 시리얼 포트를 닫는다.
l void serialPutchar(int fd, unsigned char c);
l void serialPuts(int fd, char *s);
l void serialPrintf(int fd, char *message, ….);
l void serialFlush(int fd); // 수신된 모든 데이터를 삭제한다.