본문 바로가기
ArduinoForNeuroscience

AfN.2.3.아두이노 보드간 시리얼 통신

by noruen 2021. 10. 28.

시리얼 통신

  • 'Serial.begin(<baudRate>);' in void setup()
  • RX = receive, TX = transmit
  • 버퍼가 있다 buffered 
  • 전송 속도가 느림: 대략 1 ms/character
    • 짧은 내용을 보낼 때 사용함

.연결

  • 아두이노 보드와 컴퓨터 간의 USB 케이블을 통해서 0, 1 비트로 통신함
  • 아두이노 보드들 간 연결
  • 일부 센서와 인터페이스 - 예, RFID (radio-frequency identification, 무선 주파수 식별)

 

.두 개의 아두이노 보드 간 소프트웨어 시리얼 통신

  1. 아두이노 우노 A (UNO_A), 아두이노 우노 B (UNO_B) 를 준비했다.
  2. 배선 연결:
    1. UNO_A.8(RX) - UNO_B.9(TX)
    2. UNO_A.9(TX) - UNO_B.8(RX)
    3. UNS_A.GND - UNO_B.GND
  3. 스케치 스크립트 https://github.com/claylacefield/AfN/tree/master/AfN2_advIO/AfN2_arduinoCode/serialChitChatLEDbutton_101917a

board-to-board connection for serial communication

 

동작은 하는데 내가 이해한 대로 동작하지 않는다. 인터넷 바다를 뒤져 보자.

codingrun.com

더보기

https://codingrun.com/76

시리얼 통신 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://codingrun.com/76

시리얼 통신 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에 씀. 
  }
}

이해가 되는 것 같다. 

 

반응형

댓글