라즈베리파이 블루투스 시리얼 통신 - lajeubelipai beullutuseu silieol tongsin

putty(관리자 권한으로 실행)를 실행하고 Serial을 선택한 뒤 장치관리자에서 확인된 포트번호와 속도를 입력한다. 속도가 맞지 않으면 글씨가 깨지는 경우가 있다. 그래서 라즈베리파이에서 다음의 명령어로 속도를 확인해야 한다.

주의)putty 한글배포판은 글자 깨짐 현상이 있습니다.

1

$  sudo nano /boot/cmdline.txt

 

라즈베리파이 블루투스 시리얼 통신 - lajeubelipai beullutuseu silieol tongsin

 

https://putty.ko.softonic.com/ (putty download site , windows에서 다운로드 및 실행)

위에서 속도를 확인 했으면 115200의 속도를 입력해주고 Open을 클릭하면 된다.

 

라즈베리파이 블루투스 시리얼 통신 - lajeubelipai beullutuseu silieol tongsin


아래와 같은 화면을 확인 할 수 있다. 아무것도 안뜨는 경우 엔터를 한번 입력해준다.

* raspberrypi login : pi , Password : 설정한 비밀번호(설정을 안했을 경우 default password : raspberry)

 

라즈베리파이 블루투스 시리얼 통신 - lajeubelipai beullutuseu silieol tongsin

 

2) Linux

2-1) 장치 연결 확인

다음 명령어를 통해 현재 PC에 PL2303이 연결 되었는지 확인한다.

1

$ lsusb 

 

라즈베리파이 블루투스 시리얼 통신 - lajeubelipai beullutuseu silieol tongsin


위의 사진을 보면 PL2303 Serial Port가 연결된 것을 확인 할 수 있다.

2-2) 장치 번호 확인

다음의 명령어를 통해 현재 PC에 PL2303이 연결된 장치 번호를 확인한다.

1

$ dmesg | grep tty 

 

라즈베리파이 블루투스 시리얼 통신 - lajeubelipai beullutuseu silieol tongsin


위의 사진에서 맨 밑줄을 보면 마지막으로 연결된 장치가 무엇인지 어떤 장치인지 확인이 가능하다. 본인 PC에서는 pl2303이 ttyUSB0으로 잡혀있다.

2-3) putty를 이용한 Serial 통신

- sudo apt-get install putty(리눅스에서)

- sudo putty

위의 windows에서와 마찬가지로 putty에서 Serial을 선택하고 2-2)에서 확인한 Serial Port 번호(ttyUSB0)와 속도(115200)을 입력한다.

 

라즈베리파이 블루투스 시리얼 통신 - lajeubelipai beullutuseu silieol tongsin


장치번호와 속도를 입력한 뒤 Open을 해주면 다음과 같은 화면을 볼 수 있다. 이번에도 마찬가지로 화면이 보이지 않으면 엔터를 한번 입력해준다.

* raspberrypi login : pi , Password : 설정한 비밀번호(설정을 안했을 경우 default password : raspberry)

 

라즈베리파이 블루투스 시리얼 통신 - lajeubelipai beullutuseu silieol tongsin

 

4. Test

uart.c

#include <stdio.h>

#include <string.h>

#include <errno.h>

#include <wiringPi.h>

#include <wiringSerial.h>


void uart_ch(char ch);

void uart_str(char *str);


int main(void)

{

char str[100]={0,};

        char str1[100]={0,};


if (wiringPiSetup () == -1)

{

    fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ;

    return 1 ;

}

while(1)

{

scanf("%s",str1);

getchar();

sprintf(str,"%s\n\r",str1);

uart_str(str);

}


return 0 ;


void uart_ch(char ch)

{

int fd ;


if ((fd = serialOpen ("/dev/ttyAMA0", 115200)) < 0)

{

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

return;

}


serialPutchar(fd,ch);

close(fd);

}


void uart_str(char *str)

{

while(*str) uart_ch(*str++);

}


wiringPi에서 지원하는 함수는 다음과 같다.

더욱 자세히 알고싶다면 http://wiringpi.com/reference/serial-library/를 참고하면 된다.

  • int serialOpen(char *device, int baud) : 시리얼오픈 함수는 시리얼 포트를 열고 초기화를 하며, 속도(baud rate)를 설정하는 함수이다. 앞의 인자값은 "/dev/ttyAMA0"로 오픈할 시리얼 포트를 지정하며, 두번째 인자는 baud의 통신 속도를 지정하면 된다. 리턴값으로는 에러가 있을 경우 -1을 넘겨준다.
  • int serialGetchar(int fd) : 이 함수는 시리얼 포트에서 한 바이트를 받아서 리턴해주는 함수이다.  fd는 시리얼 포트를 오픈할때 리턴 된 파일 디스크립터이다.
  • void serialClose(int fd) : open했던 시리얼 포트를 닫는다
  • void serialPutchar(inf fd, unsigned char c) : 이 함수는 한바이트만큼 전송한다.
  • void serialPuts(int fd, char *s) : 입출력 함수중 하나로 쉽게 설명해서 fgets로 저장한 문자열을 fd로 전송하게 된다.
  • void serialPrintf(int fd, char *message, ...)
  • void serialFlush(int fd) : 수신된 모든 데이터를 삭제한다.
  • char *fgets(char *string, sizeof(*string), File *stream) : 이 함수는 텍스트 파일에 저장된 문자를 줄 단위로 읽어들어와 반환하는 함수로서 첫번째 인자는 입력 받은 문자열을 저장할 포인터를 뜻하고, 두번째 인자는 입력 받을 문자의 수를 설정하는 것이며, 세번째 인자는 형성한 스트림의 이름을 뜻한다.