반응형
UART통신을 학습하기 위해서 아두이노를 활용해서 UART통신에 대해서 한번 알아보도록 하겠습니다.
UART통신은 RX,TX핀을 활용해서 데이터를 주고 받는 1:1 통신 방식입니다.
UART 통신을 하기 위해서 고려해야 되는 것은 크게 3가지 입니다.
1. 아두이노 RX, TX핀은 교차로 연결
2. 아두이노 BaudRate 값 통일
3. GND 연결
위 세 가지만 주의해주면, 통신은 아주 간단합니다!!
그럼 예제를 통해서 한번 살펴 보아요~!
아두이노 시리얼 통신 예제 1
아두이노의 0,1번 핀이 기본적으로 RX,TX 핀입니다.
그래서 이를 활용하면, 아두이노간에도 통신을 할 수 있습니다.
아두이노 0번 핀과 1번 핀의 RX,TX를 사용해서 두 개의 아두이노 간 통신을 해봅니다.
//보내는 사람
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available(){
Serial.write(Serial.read());
}
}
//받는사람
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write("hello");
Serial.println("");
}
아두이노 시리얼 통신 예제 2
0,1번 핀은 컴퓨터와 USB Serial 통신을 하는 핀이기 때문에, 업로드를 하게 되면 에러가 발생하게 됩니다.
그래서, 위에 예제를 사용하게 될 때에는 반드시, 업로드 이후에 선을 연결해야 가능하죠~!
그렇게 하지 않기 위해서는 아두이노의 SoftSerial 모듈을 활용해서 진행하면 됩니다.
위의 회로를 기반으로 시리얼 통신으로 LED를 켜보는 예제를 만들어 보았습니다.
#include <SoftwareSerial.h>
#include <string.h>
#define ledPIN 3
SoftwareSerial mySerial(10, 11);
void setup(){
Serial.begin(9600);
mySerial.begin(9600);
pinMode(ledPIN,OUTPUT);
}
String stringON = "on";
String stringOFF = "off";
void loop(){
if (mySerial.available()){
String inString = mySerial.readStringUntil("\n");
bool ref_on = inString.equals(stringON);
bool ref_off = inString.equals(stringOFF);
if(ref_on == 1){
digitalWrite(ledPIN,HIGH);
Serial.println(inString);
}
else if(ref_off == 1){
digitalWrite(ledPIN,LOW);
Serial.println(inString);
}
else{
Serial.println(inString);
}
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
아두이노 시리얼 통신 예제 3
이번에는, 최종적으로 아두이노를 활용하여 채팅을 하는 프로그램을 만들어 보도록 하겠습니다.
LCD와 아두이노를 준비해주시고, 이를 활용해서 아두이노에서 받은 데이터를 LCD에 띄워 주도록 하겠습니다.
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <string.h>
SoftwareSerial mySerial(10,11); //TX RX
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
lcd.begin();
lcd.backlight();
mySerial.begin(9600);
Serial.begin(9600);
}
char lcdChar = "";
String lcdString = "";
String msg1 = "";
void loop()
{
if (mySerial.available()) {
delay(100);
lcd.clear();
lcd.print(msg1);
while (mySerial.available()) {
lcdChar = (char)mySerial.read();//문자 하나씩 읽고
lcdString += lcdChar; //읽은 문자를 하나씩 더해 문자열을 만듬
lcd.setCursor(0,1);
}
lcd.print(lcdString);
msg1 = lcdString;
lcdString = "";
}
if(Serial.available()){
Serial.write(Serial.read());
}
}
반응형
'메이커 이야기 > 아두이노' 카테고리의 다른 글
ESP32 PWM 출력 LED 밝기 변화 (0) | 2021.10.30 |
---|---|
아두이노 스케치 단축키 정리 | Arduino ShortCut Example (0) | 2020.02.24 |
[control servomotors with joystick] 조이스틱으로 서보모터 제어하기 (1) | 2020.02.24 |
[아두이노 조이스틱] Arduino Joystick Control (0) | 2020.02.23 |
[블루투스모듈] HC-06 Bluetooth On/Off (0) | 2020.02.11 |