라즈베리파이반

라즈베리파이 등 컴퓨터계열 게시판입니다.

제목아두이노의 통신: UART2021-09-30 20:09
작성자user icon Level 4

88x31.png


아두이노는 UART, I2C, SPI 3가지의 통신방식을 지원합니다.

이 중 UART는 시리얼 통신의 한 방식으로, 보통 UART를 시리얼 통신이라고 합니다.


시리얼통신은 RX(GPIO0)와 TX(GPIO1) 핀을 사용하여 다른 디바이스에 연결하거나

USB 선을 통해 PC에 연결하여 사용할 수 있습니다.


1. PC와의 통신

우선 아두이노 UNO를 사용하여 PC와 통신하는 것을 보여주겠습니다.


프로그래밍을 합니다.

mb-file.php?path=2021%2F09%2F30%2FF3798_2.png 


void setup() {

  Serial.begin(9600); // 통신 속도 설정

  Serial.println("PC와 통신"); // 시리얼 포트 TX를 통해 "PC와 통신" 출력

}


void loop() {

}


아두이노를 USB로 PC에 연결 후 보드와 포트를 선택하고 업로드합니다.

mb-file.php?path=2021%2F09%2F30%2FF3799_1.png
 

시리얼 모니터를 열면 다음과 같이 출력됩니다.

이때 속도는 9600보레이트로 선택해야합니다.

mb-file.php?path=2021%2F09%2F30%2FF3797_3.png
 


2. 아두이노 사이의 통신

이제 아두이노 사이에 통신하는 것을 보여드리겠습니다.

아두이노 UNO와 아두이노 NANO를 사용하겠습니다.


배선을 다음과 같이 해주세요.

 아두이노 UNO

아두이노 NANO 

RX

TX1

TX

RX0


통신상태를 확인하기위해 아두이노 NANO에 LED를 연결하겠습니다.

GPIO12번과 LED +극(긴쪽) 사이에 330옴 저항을 추가하여 연결합니다.

 아두이노 NANO

LED 

GPIO12 - 330옴 저항

+극(긴쪽)

GND

-극(짧은쪽)


mb-file.php?path=2021%2F10%2F09%2FF3902_Untitled%20Sketch_bb.png
 


mb-file.php?path=2021%2F09%2F30%2FF3800_20210930_185518.jpg 

mb-file.php?path=2021%2F09%2F30%2FF3801_20210930_185533.jpg


프로그래밍은 다음과 같이 합니다.

보드와 포트 선택에 주의하세요.


아두이노 UNO의 경우

mb-file.php?path=2021%2F09%2F30%2FF3802_4.png
 

void setup() {

  Serial.begin(9600); // 통신 속도 설정

}


void loop() {

  Serial.write('1'); // 데이터 전송('1')

  delay(1000); // 1초 딜레이

  Serial.write('0'); // 데이터 전송('0')

  delay(1000); // 1초 딜레이

}

프로그래밍 후 업로드!



아두이노 NANO의 경우

mb-file.php?path=2021%2F09%2F30%2FF3803_5.png


int Rev; // 수신 데이터 정의


void setup() {

  Serial.begin(9600); // 통신 속도 설정

  pinMode(12, OUTPUT); // LED 핀 설정

}


void loop() {

  if(Serial.available() > 0){ // 수신 버퍼에 수신된 데이터가 있는 경우

    Rev = Serial.read(); // 수신 데이터 저장

    if(Rev == '1') { // 수신 데이터가 '1'인 경우

      digitalWrite(12, HIGH); // LED 켜기

    } 

    else { // 그 외

      digitalWrite(12, LOW); // LED 끄기

    }

  }

}


프로그래밍 후 업로드!!


mb-file.php?path=2021%2F09%2F30%2FF3804_ezgif.com-gif-maker.gif
 

아두이노 UNO에서 1초에 1번씩 아두이노 NANO로 1과 0을 번갈아 전송합니다.

아두이노 NANO는 Serial.available() 함수를 통해 수신버퍼에 데이터가 있는지 확인하고

Serial.read() 함수를 통해 버퍼의 데이터를 읽습니다.

수신받은 데이터가 1이면 12번 핀에 HIGH 레벨을, 수신받은 데이터가 0이면 12번 핀에 LOW 레벨을 설정합니다.



3. 시리얼포트 추가 

아두이노의 경우 시리얼포트는 1개만 존재합니다.(RX, TX)

추가적인 포트연결을 위해서 SoftwareSerial 라이브러리를 사용합니다.


여기서는 아두이노 UNO만 수정하겠습니다.

GPIO2를 RX로, GPIO3을 TX로 사용하겠습니다.


배선을 다음과 같이 해주세요.

 아두이노 UNO

아두이노 NANO 

GPIO2

TX1

GPIO3

RX0


mb-file.php?path=2021%2F10%2F09%2FF3903_Untitled%20Sketch_aa.png
 

프로그래밍은 다음과 같이 합니다.

보드와 포트 선택에 주의하세요.

mb-file.php?path=2021%2F09%2F30%2FF3802_4.png 


#include<SoftwareSerial.h>


int tx_data; // 전송할 데이터


const int rx = 2; // rx 핀

const int tx = 3; // tx 핀


SoftwareSerial secondSerial(rx, tx); // 시리얼포트 정의


void setup() {

  Serial.begin(9600); // 통신 속도 설정(PC와 연결된 시리얼)

  secondSerial.begin(9600); // 통신 속도 설정(추가된 시리얼)

}


void loop() {

  if(Serial.available()>0){ // PC 수신 버퍼에 수신된 데이터가 있는 경우

    tx_data = Serial.read(); // 수신된 데이터 저장

    secondSerial.write(tx_data); // 아두이노 NANO로 데이터 전송

    Serial.write(tx_data); // PC 시리얼모니터에 출력

    Serial.write("n"); // 줄바꿈

  }

}


 mb-file.php?path=2021%2F09%2F30%2FF3805_ezgif.com-gif-maker%20%281%29.gif 

댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)