IT개발

C#으로 아두이노와의 시리얼 통신

HyochulLab 2025. 3. 19. 13:35

1. 들어가며

최근 IoT와 임베디드 시스템 개발이 증가하면서 PC와 아두이노 간의 통신을 효율적으로 처리하는 방법이 중요해졌습니다. 그중에서도 가장 널리 쓰이는 방법 중 하나가 바로 시리얼(Serial) 통신입니다. 이번 글에서는 C#을 이용해 아두이노와의 시리얼 통신을 완벽히 이해하고 구현하는 방법을 자세히 소개하겠습니다.

2. 시리얼 통신이란?

시리얼 통신은 데이터를 한 번에 한 비트씩 순차적으로 전송하는 방식입니다. USB 포트를 통해 아두이노와 PC 간 데이터를 주고받을 때 주로 사용됩니다.

3. 준비물

  • 아두이노(UNO, MEGA 등)
  • PC 및 Visual Studio
  • USB 케이블

4. 아두이노에서의 시리얼 통신 설정

아두이노 IDE에서 다음과 같은 코드를 작성하여 아두이노 보드에 업로드합니다.

void setup() {
  Serial.begin(9600); // Baud rate 설정
}

void loop() {
  if(Serial.available()) {
    char c = Serial.read(); // PC에서 받은 데이터 읽기
    Serial.print("Received: ");
    Serial.println(c); // 읽은 데이터를 다시 PC로 전송
  }
}

5. C#에서의 시리얼 통신 설정

C#에서는 System.IO.Ports 네임스페이스의 SerialPort 클래스를 사용합니다.

예제 코드

using System;
using System.IO.Ports;

class Program
{
    static SerialPort port;

    static void Main()
    {
        port = new SerialPort("COM3", 9600); // 포트번호와 Baud rate 설정
        port.Open();
        port.DataReceived += new SerialDataReceivedEventHandler(DataReceived);

        Console.WriteLine("시리얼 통신 시작. 종료하려면 ESC 키를 누르세요.");

        while (true)
        {
            var key = Console.ReadKey(true);
            if (key.Key == ConsoleKey.Escape)
                break;

            port.Write(key.KeyChar.ToString()); // 키 입력 데이터를 아두이노로 전송
        }

        port.Close();
    }

    static void DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string data = port.ReadExisting();
        Console.WriteLine($"아두이노로부터 수신: {data}");
    }
}

6. 연결 및 실행

  1. 아두이노를 PC와 USB 케이블로 연결합니다.
  2. C# 프로그램을 실행하여 통신이 제대로 이루어지는지 확인합니다.

7. 주의할 점

  • Baud rate를 아두이노와 C#에서 동일하게 설정해야 합니다.
  • 포트 번호(COM 포트)는 장치 관리자에서 확인할 수 있습니다.
  • 시리얼 통신 오류 시 포트를 닫고 다시 열어 보거나, 아두이노 보드를 재연결해 보세요.

8. 마치며

이번 글을 통해 C#과 아두이노 간의 시리얼 통신 방법을 이해하고, 간단한 예제로 직접 실습해 보았습니다.

이를 기반으로 다양한 IoT 프로젝트에 응용해보시길 바랍니다.