728x90

통신 방식은 전자기기 간의 데이터 전송 및 상호작용을 구현하는 데 중요한 역할을 합니다. 아두이노와 다른 장치 간의 통신 방식은 여러 가지가 있으며, 각 방식은 특정 용도와 요구에 맞게 설계되었습니다. 이 글에서는 아두이노에서 사용 가능한 주요 통신 종류와 그에 대한 예제를 설명하겠습니다.

1. 직렬 통신 (Serial Communication)

1.1. UART (Universal Asynchronous Receiver-Transmitter)

설명: 직렬 통신의 기본 형태로, 데이터 비트가 하나씩 전송됩니다. UART는 비동기식으로 동작하여 클럭 신호 없이 데이터를 전송합니다.

주요 핀:

  • TX (Transmit): 데이터를 전송하는 핀
  • RX (Receive): 데이터를 수신하는 핀

예제: 아두이노와 컴퓨터 간의 직렬 통신

회로 구성:

  1. TX (아두이노) -> RX (컴퓨터 또는 시리얼 변환기)
  2. RX (아두이노) -> TX (컴퓨터 또는 시리얼 변환기)
  3. GND (아두이노) -> GND (컴퓨터 또는 시리얼 변환기)

코드 예제:

아두이노 코드:

void setup() {
  Serial.begin(9600); // 시리얼 통신 시작
}

void loop() {
  Serial.println("Hello, Serial!"); // 데이터 전송
  delay(1000); // 1초 대기
}

컴퓨터 코드 (Python 예제):

import serial

ser = serial.Serial('COM3', 9600) # 포트와 보드레이트 설정

while True:
    data = ser.readline() # 데이터 읽기
    print(data.decode('utf-8').strip()) # 데이터 출력

2. I2C (Inter-Integrated Circuit)

2.1. 설명

I2C는 2선식 통신 방식으로, 하나의 데이터 라인(SDA)과 하나의 클럭 라인(SCL)을 사용합니다. 여러 장치가 동일한 I2C 버스에 연결될 수 있으며, 각 장치는 고유의 주소를 가지고 있습니다.

주요 핀:

  • SDA (Serial Data Line): 데이터 전송 및 수신
  • SCL (Serial Clock Line): 클럭 신호 제공

예제: 아두이노와 I2C LCD 디스플레이 연결

회로 구성:

  1. LCD SDA -> 아두이노 A4
  2. LCD SCL -> 아두이노 A5
  3. LCD VCC -> 아두이노 5V
  4. LCD GND -> 아두이노 GND

코드 예제:

아두이노 코드:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C 주소와 LCD 크기 설정

void setup() {
  lcd.begin();
  lcd.print("Hello, I2C LCD!"); // 메시지 출력
}

void loop() {
  // 메인 루프
}

3. SPI (Serial Peripheral Interface)

3.1. 설명

SPI는 4선식 통신 방식으로, 데이터 전송 속도가 빠릅니다. 마스터와 슬레이브 장치 간의 통신을 지원하며, 각 장치는 고유의 선택 신호를 사용하여 구분됩니다.

주요 핀:

  • MOSI (Master Out Slave In): 마스터에서 슬레이브로 데이터 전송
  • MISO (Master In Slave Out): 슬레이브에서 마스터로 데이터 전송
  • SCK (Serial Clock): 클럭 신호 제공
  • SS (Slave Select): 슬레이브 장치 선택

예제: 아두이노와 SPI 8x8 LED 매트릭스 연결

회로 구성:

  1. MAX7219 DIN -> 아두이노 디지털 핀 11 (MOSI)
  2. MAX7219 CLK -> 아두이노 디지털 핀 13 (SCK)
  3. MAX7219 CS -> 아두이노 디지털 핀 10 (SS)
  4. MAX7219 VCC -> 아두이노 5V
  5. MAX7219 GND -> 아두이노 GND

코드 예제:

아두이노 코드:

#include <LedControl.h>

#define DATA_IN  11
#define CLK       13
#define LOAD      10
#define MAX_DEVICES 1

LedControl lc = LedControl(DATA_IN, CLK, LOAD, MAX_DEVICES);

void setup() {
  for (int i = 0; i < MAX_DEVICES; i++) {
    lc.shutdown(i, false);
    lc.setIntensity(i, 8);
    lc.clearDisplay(i);
  }
}

void loop() {
  lc.setLed(0, 0, 0, true);
  delay(500);
  lc.setLed(0, 1, 0, true);
  delay(500);
  lc.setLed(0, 0, 0, false);
  lc.setLed(0, 1, 0, false);
  delay(500);
}

4. OneWire

4.1. 설명

OneWire는 1선식 데이터 통신 방식을 사용하여 여러 장치가 동일한 데이터 라인에서 통신할 수 있도록 합니다. 데이터 전송 속도가 상대적으로 낮지만, 장치 수가 많아도 간단히 연결할 수 있습니다.

주요 핀:

  • DATA: 데이터 전송 및 수신

예제: 아두이노와 DS18B20 온도 센서 연결

회로 구성:

  1. DS18B20 DATA -> 아두이노 디지털 핀 2
  2. DS18B20 VCC -> 아두이노 5V
  3. DS18B20 GND -> 아두이노 GND
  4. DS18B20 데이터 핀과 4.7kΩ 저항을 5V에 연결

코드 예제:

아두이노 코드:

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(9600);
  sensors.begin();
}

void loop() {
  sensors.requestTemperatures();
  Serial.print("Temperature: ");
  Serial.print(sensors.getTempCByIndex(0));
  Serial.println(" C");
  delay(1000);
}

5. Bluetooth

5.1. 설명

Bluetooth는 무선 통신 방식으로, 데이터를 근거리에서 무선으로 전송할 수 있습니다. 주로 HC-05와 같은 모듈이 아두이노와 함께 사용됩니다.

주요 핀:

  • TX: 데이터를 전송하는 핀
  • RX: 데이터를 수신하는 핀
  • VCC: 전원 공급
  • GND: 접지

예제: 아두이노와 HC-05 블루투스 모듈 연결

회로 구성:

  1. HC-05 TX -> 아두이노 RX (핀 0)
  2. HC-05 RX -> 아두이노 TX (핀 1)
  3. HC-05 VCC -> 아두이노 5V
  4. HC-05 GND -> 아두이노 GND

코드 예제:

아두이노 코드:

void setup() {
  Serial.begin(9600); // Bluetooth와 통신 시작
}

void loop() {
  if (Serial.available()) {
    char data = Serial.read(); // 수신된 데이터 읽기
    Serial.print("Received: ");
    Serial.println(data); // 데이터 출력
  }
}

결론

통신 방식은 다양한 전자기기와 시스템 간의 데이터 전송과 상호작용을 구현하는 데 필수적입니다. 아두이노는 직렬 통신, I2C, SPI, OneWire, Bluetooth 등 여러 가지 통신 방식을 지원하여 다양한 응용 프로그램을 개발할 수 있습니다. 각 통신 방식의 특성과 회로 구성, 코드 예제를 잘 이해하면 효과적인 전자 프로젝트를 구현할 수 있습니다.

728x90
반응형

+ Recent posts