시리얼 통신
- 'Serial.begin(<baudRate>);' in void setup()
- RX = receive, TX = transmit
- 버퍼가 있다 buffered
- 전송 속도가 느림: 대략 1 ms/character
- 짧은 내용을 보낼 때 사용함
.연결
- 아두이노 보드와 컴퓨터 간의 USB 케이블을 통해서 0, 1 비트로 통신함
- 아두이노 보드들 간 연결
- 일부 센서와 인터페이스 - 예, RFID (radio-frequency identification, 무선 주파수 식별)
.두 개의 아두이노 보드 간 소프트웨어 시리얼 통신
- 아두이노 우노 A (UNO_A), 아두이노 우노 B (UNO_B) 를 준비했다.
- 배선 연결:
- UNO_A.8(RX) - UNO_B.9(TX)
- UNO_A.9(TX) - UNO_B.8(RX)
- UNS_A.GND - UNO_B.GND
- 스케치 스크립트 https://github.com/claylacefield/AfN/tree/master/AfN2_advIO/AfN2_arduinoCode/serialChitChatLEDbutton_101917a
동작은 하는데 내가 이해한 대로 동작하지 않는다. 인터넷 바다를 뒤져 보자.
codingrun.com
시리얼 통신 serial communication
직렬 통신 - 비트 단위로 데이터를 전송
UNO_A | PC | |
0 RX | <-- | TX |
1 TX | --> | RX |
GND | --- | GND |
컴퓨터에서 스케치 작성해서 아두이노로 업로드하는 과정은 시리얼 통신을 사용한다.
컴퓨터의 가상(소프트) 시리얼 포트와 아두이노의 현실(하드) 시리얼 포트 (디지털 핀 0, 1)과 시리얼 통신이 일어난다.
통신속도 baud rate
1초 동안 전송되는 신호의 수.
baud rate = bits per second, bps
시리얼 통신 명령문
Serial.begin(<baud_rate>);
Serial.print(<text>);
Serial.println(<text>);
Serial.available(); - 시리얼 포트로 수신된 데이터 바이트 수. 최대 64바이트. 데이터가 없으면 0.
Serial.read(); - 시러얼 통신 수신 버퍼에서 첫 번째 문자를 읽는다. 버퍼가 비어 있으면 -1을 반환. 여러 글자를 치면 순서대로 읽히는 것 같다.
Serial.readString(); - 시리얼 통신 버퍼의 문자열을 읽는다.
Serial.end(); - 시리얼 통신을 종료한다.
잘 이해 안되는 점은 Serial.print("Hi!"); 라고 명령문을 적었다고 했을 때 컴퓨터 또는 아두이노 보드 어디 에서 실행될까? 잘 생각해 보면 컴퓨터에서 작성한 스케치를 일단 아두이노 보드에 업로드 하고, 아두이노 보드에서 Serial.print("Hi!"); 가 실행될 것 같다. 그러면 "Hi!" 라는 데이터가 시리얼 포트를 통해서 컴퓨터로 전달되고 시리얼 모니터 Serial Monitor 에서 볼 수 있을 것이다. Serial.read(); 는 아두이노 보드에서 실행되어 컴퓨터에서 보낸 데이터를 읽기 때문에 컴퓨터의 시리얼 모니터의 입력창(제일 윗줄)에 입력한 데이터를 아두이노가 읽어간다고 생각하면 되겠네. 즉, 아두이노 보드에서 명령문이 실행된다. 단순한 것 같은데 이해안되면 어렵겠다. 여기서 분명히 하면 위의 아두이노 간의 시리얼 통신에서 동작을 잘 이해할 수 있을 것 이다.
시리얼 통신 serial communication
직렬 통신 - 비트 단위로 데이터를 전송
UNO_A | PC | |
0 RX | <-- | TX |
1 TX | --> | RX |
GND | --- | GND |
컴퓨터에서 스케치 작성해서 아두이노로 업로드하는 과정은 시리얼 통신을 사용한다.
컴퓨터의 가상(소프트) 시리얼 포트와 아두이노의 현실(하드) 시리얼 포트 (디지털 핀 0, 1)과 시리얼 통신이 일어난다.
통신속도 baud rate
1초 동안 전송되는 신호의 수.
baud rate = bits per second, bps
시리얼 통신 명령문
Serial.begin(<baud_rate>);
Serial.print(<text>);
Serial.println(<text>);
Serial.available(); - 시리얼 포트로 수신된 데이터 바이트 수. 최대 64바이트. 데이터가 없으면 0.
Serial.read(); - 시러얼 통신 수신 버퍼에서 첫 번째 문자를 읽는다. 버퍼가 비어 있으면 -1을 반환. 여러 글자를 치면 순서대로 읽히는 것 같다.
Serial.readString(); - 시리얼 통신 버퍼의 문자열을 읽는다.
Serial.end(); - 시리얼 통신을 종료한다.
잘 이해 안되는 점은 Serial.print("Hi!"); 라고 명령문을 적었다고 했을 때 컴퓨터 또는 아두이노 보드 어디 에서 실행될까? 잘 생각해 보면 컴퓨터에서 작성한 스케치를 일단 아두이노 보드에 업로드 하고, 아두이노 보드에서 Serial.print("Hi!"); 가 실행될 것 같다. 그러면 "Hi!" 라는 데이터가 시리얼 포트를 통해서 컴퓨터로 전달되고 시리얼 모니터 Serial Monitor 에서 볼 수 있을 것이다. Serial.read(); 는 아두이노 보드에서 실행되어 컴퓨터에서 보낸 데이터를 읽기 때문에 컴퓨터의 시리얼 모니터의 입력창(제일 윗줄)에 입력한 데이터를 아두이노가 읽어간다고 생각하면 되겠네. 즉, 아두이노 보드에서 명령문이 실행된다. 단순한 것 같은데 이해안되면 어렵겠다. 여기서 분명히 하면 위의 아두이노 간의 시리얼 통신에서 동작을 잘 이해할 수 있을 것 이다.
~폴나의 공방~ - 아두이노 보드끼리 통신
https://m.blog.naver.com/darknisia/221721194646
아두이노 보드의 디지털 핀 0, 1은 컴퓨터와 시리얼 통신 하는 핀이다. 컴퓨터와 연결동안 사용하면 충돌이 일어날 수 있다.
소프트웨어적으로 다른 핀을 시리얼 통신에 사용한다 - 라이브러리 'SoftwareSerial.h' 를 사용.
아두이노 보드에 따라 RX, TX에 사용할 수 있는 핀이 정해져 있다.
우노 보드는 모든 핀이 가능하다.
시리얼 통신을 위해서 교차 연결 해야 한다:
UNO_A | UNO_B | |
8 RX | <--- | 9 TX |
9 TX | ---> | 8 RX |
GND | --- | GND |
https://m.blog.naver.com/darknisia/221721194646
아두이노 보드의 디지털 핀 0, 1은 컴퓨터와 시리얼 통신 하는 핀이다. 컴퓨터와 연결동안 사용하면 충돌이 일어날 수 있다.
소프트웨어적으로 다른 핀을 시리얼 통신에 사용한다 - 라이브러리 'SoftwareSerial.h' 를 사용.
아두이노 보드에 따라 RX, TX에 사용할 수 있는 핀이 정해져 있다.
우노 보드는 모든 핀이 가능하다.
시리얼 통신을 위해서 교차 연결 해야 한다:
UNO_A | UNO_B | |
8 RX | <--- | 9 TX |
9 TX | ---> | 8 RX |
GND | --- | GND |
// 데이터 송신 보드
#include <SoftwareSerial.h>
int a = 0;
SoftwareSerial B_Serial(8,9); //COM7
void setup() {
// put your setup code here, to run once:
B_Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
B_Serial.println(a);
a++;
delay(1000);
}
// 데이터 수신 보드
#include <SoftwareSerial.h>
SoftwareSerial A_Serial(8,9); // COM6
void setup() {
// put your setup code here, to run once:
A_Serial.begin(9600);
Serial.begin(9600); // 컴퓨터와 시리얼통신 시작
}
void loop() {
// put your main code here, to run repeatedly:
if (A_Serial.available()) {
char transmit = A_Serial.read(); // 8 에서 읽음
Serial.print(transmit); // 컴퓨터로 가는 핀에 쓴다. 즉 1 TX에 씀.
}
}
이해가 되는 것 같다.
'ArduinoForNeuroscience' 카테고리의 다른 글
AfN.2.5. 디지털 출력 - 더 높은 전압이 필요한 장치 조절하려고 할 때 (0) | 2021.10.28 |
---|---|
AfN.1.2.들어가기.프로그래밍 (0) | 2021.10.19 |
AfN1.1.들어가기.세부사항 (0) | 2021.10.19 |
AfN1.들어가기 (0) | 2021.10.19 |
AfN0.Arduino for Neuroscience 공부 기록 (0) | 2021.10.19 |
댓글