일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 마스터 슬레이브
- 시리얼 통신
- RX
- SPI 통신
- platformIO
- OBD모듈
- Serial통신
- 아두이노레오나르도
- 디지털핀
- 차량통신
- UART
- Makefile
- 아두이노
- 아두이노우노
- can 통신
- 자동 변수
- 시리얼포트
- TX
- txrx
- 양방향 통신
- 시리얼모니터
- 디바이스마트
- 시리얼통신
- 송수신
- 기본 문법
- SoftwareSerial
- vscode
- OBD
- 공모전
- UART통신
- Today
- Total
개발 블로그
[아두이노] 아두이노 TX, RX 연결하기 본문
https://speak-of-the-devil.tistory.com/15
[UART] UART, TX, RX 가 뭘까?
UART 란 통신 규격 중 하나이다. Universal Asychronous Receiver/Transmitter의 줄임말로 시리얼 통신(Serail Communication)이라고도 한다. UART 통신 방법은 마치 사람이 대화를 하는 것과 같은 원리를 가지고..
speak-of-the-devil.tistory.com
UART 통신에 대한 얘기를 하면서 TX와 RX 의 얘기를 했다. TX 는 Transmitter, RX 는 Receiver 로 각각 송신과 수신 역할을 한다.
그렇다면 PC와 아두이노 보드가 UART 통신을 하기 위해서 TX, RX를 어떤 구조를 하고 있을까? 내 예상이지만 이런 구조일 것이다.
PC의 TX -> 보드의 RX
보드의 RX -> PC의 TX
PC의 GND - 보드의 GND
TX 와 RX는 교차로 연결되어 있고, 서로의 GND 가 연결되어 있는 구조.
왼쪽 아두이노 우노 보드를 보자. 빨간 박스에 Tx와 Rx 라고 적힌 곳과 Led 가 함께 있다. 아두이노 우노를 PC 와 연결하면 불이 들어오는 것을 볼 수 있으며, PC와 보드의 TX, RX, GRD 가 연결됐음을 말한다. 그 후 송수신을 하면 오른쪽 사진 빨간 박스의 TX, RX Led에 빨간 불이 들어오는 모습을 위 링크에 있는 영상에서 확인할 수 있다.
이를 통해 TX, RX 선은 PC 와 송수신을 하기 위해 보드에 기본적으로 존재한다는 것을 알 수 있다.
그럼 다른 장치와 TX, RX 선으로 송수신을 하기 위해서 어떻게 해야 할까?
보드 위아래 입력 핀을 확인해보면 알겠지만, PC 를 위한 TX, RX 선 외에 정해진 TX, RX 핀이 없다. 이때에는 프로그래밍으로 해결할 수 있다. 코드에 SoftwareSerial 라이브러리를 넣고 특정 입력 핀을 TX, RX 로 선언하여 다른 장치와 통신할 수 있다.
SoftwareSerial 라이브러리는 다음을 참고하자.
https://speak-of-the-devil.tistory.com/19
[아두이노] SoftwareSerial 라이브러리?
https://speak-of-the-devil.tistory.com/18 [아두이노] 아두이노 TX, RX 연결하기 https://speak-of-the-devil.tistory.com/15 [UART] UART, TX, RX 가 뭘까? UART 란 통신 규격 중 하나이다. Universal Asychron..
speak-of-the-devil.tistory.com
두 개의 아두이노 보드를 연결하여 시리얼 통신을 했다.
1) 각 아두이노가 갖고 있는 GND 입력 핀을 파란색 선으로 연결했다.
2) 검은색과 흰색 아두이노의 각각 입력핀 2개를 TX, RX 로 선언했다.
3) TX와 RX를 서로 교차해서 연결했다.
검은색은 흰색으로 OBD 글자를
흰색은 검은색으로 UNO 글자를 보내도록 코드를 작성했다.
아래 영상을 보면 통신하는 모습을 확인할 수 있다.
아래 코드는 흰색 보드!
#include <SoftwareSerial.h>
#define OBD_RX 10
#define OBD_TX 11
SoftwareSerial OBD(OBD_RX, OBD_TX);
void setup(){
Serial.begin(9600);
OBD.begin(9600);
}
void loop(){
OBD.println("UNO");
delay(1000);
if (OBD.available() > 0){
String get_obd = OBD.readStringUntil('\n');
Serial.println(get_obd);
}
아래는 검은색 보드!
#include <SoftwareSerial.h>
#define UNO_RX 10
#define UNO_TX 11
SoftwareSerial UNO(UNO_RX, UNO_TX);
void setup(){
Serial.begin(9600);
UNO.begin(9600);
}
void loop(){
UNO.println("OBD");
delay(1000);
if (UNO.available() > 0){
String get_uno = UNO.readStringUntil('\n');
Serial.println(get_uno);
}
'개발 > Arduino' 카테고리의 다른 글
[아두이노] SoftwareSerial 라이브러리? (0) | 2022.01.27 |
---|---|
여러 개의 케이블은 다른 시리얼 모니터를 사용할까? (0) | 2022.01.25 |
[아두이노] 조이스틱 모듈 사용하기 (0) | 2022.01.18 |