라즈베리파이에서 시리얼 통신 설정 및 시리얼 통신 하기 (RaspberryPi 3 B+)

라즈베리파이와 PC간의 통신방법에는 몇가지가 있습니다. 제일 간편한 방법은 라즈베리파이에 이더넷 케이블이나 WiFi를 연결하여 SSH로 라즈베리파이에 접속하여 라즈베리파이와 PC간의 데이터 통신이 가능합니다. 

하지만 만약 라즈베리파이에 네트워크가 끊긴 경우에는 PC와 라즈베리파이간에 SSH로 연결할 수가 없게 됩니다. 이때에는 차선책으로 라즈베리파이의 시리얼 포트를 사용하여 PC와 시리얼 통신으로 라즈베리파이와의 통신이 가능합니다. 속도는 빠르지 않지만, 라즈베리파이의 전원 인가 후부터 부팅 완료 및 구동중의 모든 과정을 시리얼 통신을 통하여 PC와 연결하여 모니터링 및 데이터를 주고 받을 수 있습니다. 

실제 임베디드 리눅스 개발시에는 시리얼 통신이 거의 필수적이라고 볼 수 있습니다. 전원 인가 후 부터 시스템의 부팅 과정을 살펴볼 수 있기 때문에 시리얼통신(UART)은 꼭 필요한 통신 인터페이스입니다. 하지만 라즈베리파이에서는 필수는 아니지만 라즈베리파이로 개발을 진행하고자 한다면 시리얼 통신 인터페이스는 큰 도움이 될 수 있습니다. 

이번 포스트에서는 라즈베리파이 3B+에서 시리얼 통신을 호스트 PC와 하는 방법에 대해 설명해 보고자 합니다.

시리얼 통신을 하기 위한 준비물

시리얼 통신을 하기 위해서는 몇가지 준비물이 필요합니다. 이때는 약간의 하드웨어적인 지식이 필요할 수도 있습니다. 먼저 시리얼 통신을 하기 위한 USB to Serial 어뎁터와 케이블을 준비합니다. USB to Serial 어뎁터는 시중에서 쉽게 구입할 수 있습니다. 아래 링크를 참고하시기 바랍니다.

검색해 보니 USB to Serial 어뎁터를 여기서 팔고 있네요. 이런 형태의 USB to Serial 어뎁터를 준비하면 됩니다. 구입은 각자 알아서 검색하여 구입하거나 준비하면 될꺼 같습니다. USB to Serial 어뎁터를 위 링크의 사진과 같은 형태를 사용하려는 이유는 라즈베리파이의 UART Rx/Tx GPIO와 USB to Serial 어뎁터의 Rx/Tx 핀을 서로 연결하기 위해서 입니다. 

그리고 라즈베리파이의 UART GPIO와 USB to Serial 어뎁터를 연결할 점퍼선을 준비합니다. 양쪽 다 Female 타입을 준비하면 될꺼 같네요. 

요런거 어디서 많이 보셨죠? 라즈베리파이 처음 구입했을때 옵션으로 구입하신 분들도 계실겁니다. 양쪽 Female 타입으로 3개 있으면 됩니다(Tx/Rx/GND). 저는 개인적으로 USB to Serial 어뎁터 한개에 Serial 인터페이스가 두개 달린 별도의 어뎁터를 사용하고 있습니다. 

위 사진의 UART2 라는 커넥터에 Tx, Rx를 각각 라즈베리파이 3 B+의 Tx/Rx에 연결하면 되겠습니다. GND는 Rx 밑의 핀에 연결하면 됩니다. 위의 예는 그렇지만 만약 본인이 준비한 USB to Serial 어뎁터는 Tx/Rx/GND의 위치를 확인하고 연결해야 합니다.

라즈베리파이의 GPIO 확인 및 라즈베리파이와 USB to Serial 어뎁터 연결

여기까지 준비가 됐으면 이제 라즈베리파이 3 B+의 GPIO 맵을 확인할 필요가 있습니다. 라즈베리파이 2 부터는 총 40 Pin의 별도 GPIO가 제공이 되고 있습니다. 

출처 https://pinout.xyz/

라즈베리파이 3 B+의 GPIO 핀맵입니다. 여기서 시리얼 통신을 하기 위한 GPIO핀은 8번과 10번 입니다. 8번은 Tx, 10번은 Rx 네요. 이 두개의 핀을 USB to Serial 어뎁터의 Tx/Rx에 각각 점퍼선으로 연결해 주면 됩니다. 추가적으로 GND 핀의 연결이 필요한데요, USB to Serial 어뎁터의 GND핀과 라즈베리파이의 6번 핀을 연결해주면 됩니다. 연결은 간단하죠?

실제 라즈베리파이 3 B+와 USB to Serial 어뎁터와 연결한 모습입니다. 위 사진에서 GPIO핀중에 왼쪽이 1번/2번이고 오른쪽 끝이 39번/40번입니다. UART Tx가 8번 이므로 2번에서 오른쪽으로 4번째가 되겠네요. UART Rx는 5번째가 됩니다. GND는 6번 핀이므로 2번에서 3번째 오른쪽의 핀이 되겠습니다. 위 사진을 참고하여 라즈베리파이와 USB to Serial 어뎁터간에 연결을 하면 되겠습니다.

라즈비안에서 시리얼 포트 설정

일단 연결은 했지만 현 상태에서는 시리얼 통신을 할 수가 없습니다. 라즈비안은 Default로 시리얼포트가 비 활성화 되어 있기 때문입니다. 따라서 사용자가 별도로 시리얼 포트를 활성화 해줘야 합니다. 활성화 방법은 매우 간단합니다. 먼저 라즈비안의 Raspberry Pi Configuration 에서 Interface로 가면 시리얼 포트 관련 항목이 있습니다.

여기서 위 화면같이 Serial Port와 Serial Console을 Enable로 바꿔줍니다. 그 다음에 OK를 누르고 Reboot을 하면 됩니다. 간단하죠?

터미널 프로그램 실행 및 설정

이제 라즈비안 설정 및 준비는 다 끝났습니다. 터미널 프로그램을 실행시켜서 Serial 설정 및 연결을 하면 됩니다. 

먼저 터미널 프로그램을 실행시킵니다. 저는 TeraTerm을 실행시켜 보도록 하겠습니다.

설정 으로 이동하여 시리얼 포트를 클릭합니다. 

시리얼 포트 설정에서 포트는 자동으로 테라텀에서 활성화 된 시리얼 포트를 찾습니다. 만약 PC에 연결된 USB to Serial 어뎁터가 2개 이상이라면 현재 사용하는 어뎁터의 포트를 찾아서 포트를 선택해 줍니다. 그 다음 속도를 115200으로 선택하고 확인을 눌러줍니다. 

이제 모든 설정이 끝났습니다. 라즈베리파이에 전원을 켜봅니다. 시리얼 통신이 정상적이라면 약간의 시간이 흐른 후 아래 화면이 같이 나타날 것입니다.

짠! 드디어 라즈베리파이에서도 시리얼 통신이 가능하게 되었습니다. 이후에는 SSH로 연결하여 사용하듯이 Serial 포트로 연결하여 라즈베리파이를 사용할 수 있습니다.