[라즈베리파이] UART 비동기 시리얼 통신 해보기 - 1 (루프백)IoT/Raspberry Pi2022. 1. 18. 22:29
Table of Contents
UART (Universal Asynchronous Receiver/Transmitter)
- 데이터가 비트 단위로 직렬로 전송되는 직렬 통신 프로토콜이다.
- 비동기 직렬 통신은 바이트 지향 전송에 널리 사용된다.
- 비동기 직렬 통신에서는 한 번에 한 바이트의 데이터가 전송된다.
- 1:1 통신이다.
Tx, Rx
라즈베리파이3의 경우 블루투스 포트가 UART포트를 사용한다. 이 부분 처리가 필요함.
Tx 보내는 신호
Rx 받는 신호
UART 맵핑 확인
ls -l /dev
시리얼 속도 확인
sudo stty -F [시리얼]
# 사용법
sudo stty -F /dev/ttyAMA0
시리얼 속도 변경
이건 직접 해본 결과 잘 안되는 것 같았다.
sudo stty -F [시리얼] [속도]
# 사용법
sudo stty -F /dev/ttyAMA0 9600
루프백 예제 ( C )
자기 자신에게 Tx,Rx 회로 설정 후 실행하면 본인에게 아스키 코드가 돌아온다.
#include <stdio.h>
#include <string.h>
#include <wiringPi.h> // delay()
#include <wiringSerial.h>
#define BAUD 9600
int main(void) {
int fd;
unsigned char asc, rec;
// 시리얼 오픈
if((fd = serialOpen("/dev/ttyS0", BAUD)) < 0) {
printf("Device file open error!! use sudo ...\n");
return 1;
}
printf("[UART testing....... loopback]\n");
asc = 65; // 보낼 아스키 코드
while(1)
{
printf("Transmitting ... %d ", asc);
// 시리얼에 아스키코드를 보낸다.
serialPutchar(fd, asc);
// 딜레이
delay(10);
// 만약 Rx에 신호가 있다면 실행
if(serialDataAvail(fd))
{
// 보낸 아스키코드를 받아 rec에 넣는다.
rec = serialGetchar(fd);
// 숫자로 출력, 문자로 출력
printf("===> Received : %d %c\n", rec, rec);
// 버퍼한번 비워준다.
serialFlush(fd);
}
// 딜레이
delay(300);
asc++;
}
return 0;
}
주의점
- 라즈베리파이3 에서는 메인시리얼(ttyAMA0)이 블루투스로 사용되기 때문에 블루투스를 끄는 작업이 필요하다고 하지만. 내가 했을때는 ttyS0으로 작동해도 이상없었다. 그래도 혹시 모르니 글은 남겨 놓는다.
- 통신시 쓰레기값이나 통신 불량이 난다면 전압부터 확인해야한다. 전압이 약할 시 그런 문제가 났다.
- 그 다음 문제는 접지다. 접지 불량때 쓰레기값이 전달된다.
- 전압과 접지가 해결됐을때 다음 문제를 생각해보자.
참고문헌
반응형
'IoT > Raspberry Pi' 카테고리의 다른 글
[라즈베리파이] UART 비동기 시리얼 통신 해보기 - 3 (양방향 통신) (0) | 2022.01.18 |
---|---|
[라즈베리파이] UART 비동기 시리얼 통신 해보기 - 2 (단방향 통신) (0) | 2022.01.18 |
[Raspberry Pi] 라즈베리파이 파이어폭스 설치하기 (0) | 2020.12.24 |
[Raspberry Pi] 원격 데스크탑 연결하기 (0) | 2020.12.24 |
[Raspberry Pi] 한글 폰트 설치하기 , 한글 깨짐 해결 (0) | 2020.12.16 |
@반나무 :: 반나무_뿌리
3년차 WPF 개발자입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!