728x90

알려드린 파이썬과 아두이노를 시리얼 통신을 통해 연결하여 제어하는 방법에 대해 좀 더 자세히 설명해드리겠습니다.

  1. 아두이노 코드 작성하기

아두이노 측에서는 먼저 시리얼 통신을 위한 코드를 작성해야 합니다. 예를 들어, LED를 제어하는 코드를 작성해보겠습니다. 아래와 같은 코드를 아두이노 IDE에서 작성하고 업로드해주세요.

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  if (Serial.available() > 0) {
    char incomingByte = Serial.read();
    if (incomingByte == '0') {
      digitalWrite(LED_BUILTIN, LOW);
    } else if (incomingByte == '1') {
      digitalWrite(LED_BUILTIN, HIGH);
    }
  }
}

이 코드는 시리얼 통신을 시작하고, LED를 제어하는 코드입니다. 시리얼 포트에서 데이터가 수신되면 해당 데이터를 읽어와서 '0'이면 LED를 꺼지고, '1'이면 LED를 켜게 됩니다.

 

2.파이썬 코드 작성하기

이제 파이썬에서 아두이노와 시리얼 통신을 통해 데이터를 주고받을 수 있도록 코드를 작성해보겠습니다. 파이썬에서는 pyserial 라이브러리를 사용하여 시리얼 통신을 할 수 있습니다. 아래와 같은 코드를 작성해주세요.

import serial

ser = serial.Serial('COM3', 9600)  # 시리얼 포트와 속도 설정

while True:
    data = input("LED 상태 (0/1) 입력: ")
    ser.write(data.encode())  # 입력받은 데이터를 아두이노에게 보냄

위 코드에서는 pyserial 라이브러리를 이용해 COM3 포트와 9600 속도로 아두이노와 시리얼 통신을 시작합니다. 그리고 무한루프를 돌며 사용자로부터 입력받은 데이터를 아두이노로 보냅니다. 데이터를 보낼 때는 encode() 함수를 이용해 문자열을 바이트로 변환해야 합니다.

 

3.실행하기

이제 아두이노 코드와 파이썬 코드를 각각 작성했으므로, 먼저 아두이노 코드를 업로드한 후, 파이썬 코드를 실행해주세요. 파이썬 코드를 실행하면 사용자로부터 LED 상태를 입력받을 수 있습니다. 입력받은 데이터는 아두이노로 전송되어 해당 LED가 켜지거나 꺼지게 됩니다.

 

---------------------------

이렇게 시리얼 통신을 통해 파이썬에서 아두이노를 제어하는 방법은 다양한 방법이 있지만, 이번에는 파이썬에서 아두이노의 아날로그 입력을 읽어오는 방법에 대해 설명해드리겠습니다.

 

 

  1. 아두이노 코드 작성하기

먼저 아두이노 측에서는 시리얼 통신을 시작하고, 아날로그 입력값을 읽어와서 시리얼 포트를 통해 전송하는 코드를 작성해야 합니다. 아래와 같은 코드를 아두이노 IDE에서 작성하고 업로드해주세요.

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

void loop() {
  int analogValue = analogRead(A0); // A0 핀으로부터 아날로그 입력값 읽어옴
  Serial.println(analogValue);      // 시리얼 포트를 통해 아날로그 입력값을 전송
  delay(100);                       // 100ms 딜레이
}

이 코드는 시리얼 통신을 시작하고, A0 핀으로부터 아날로그 입력값을 읽어와서 시리얼 포트를 통해 전송하는 코드입니다. 딜레이를 주는 이유는 너무 빠른 속도로 전송하면 컴퓨터에서 처리하지 못할 수도 있기 때문입니다.

 

2.파이썬 코드 작성하기

파이썬에서는 이전 예제와 마찬가지로 pyserial 라이브러리를 사용하여 시리얼 통신을 할 수 있습니다. 다음과 같은 코드를 작성해주세요.

import serial

ser = serial.Serial('COM3', 9600)  # 시리얼 포트와 속도 설정

while True:
    data = ser.readline().decode().rstrip()  # 아두이노에서 시리얼 포트로 전송된 데이터 읽어옴
    print("아날로그 입력값: " + data)

위 코드에서는 pyserial 라이브러리를 이용해 COM3 포트와 9600 속도로 아두이노와 시리얼 통신을 시작합니다. 그리고 무한루프를 돌며 시리얼 포트에서 데이터를 읽어옵니다. 읽어온 데이터는 decode() 함수를 이용해 바이트를 문자열로 변환하고, rstrip() 함수를 이용해 개행 문자를 제거합니다.

 

3.실행하기

이제 아두이노 코드와 파이썬 코드를 각각 작성했으므로, 먼저 아두이노 코드를 업로드한 후, 파이썬 코드를 실행해주세요. 파이썬 코드를 실행하면 시리얼 포트를 통해 아날로그 입력값을 읽어올 수 있습니다. 이 값을 이용해 다양한 제어를 할 수 있습니다. 예를 들어, 아날로그 입력값을 이용하여 LED 밝기를 제어하는 코드를 작성해보겠습니다. 이 코드에서는 파이썬에서 아날로그 입력값을 읽어와서 0~255 범위로 변환한 후, 이 값을 아두이노로 다시 전송하여 LED 밝기를 조절합니다.

int ledPin = 9;  // LED 핀 번호
int analogValue; // 아날로그 입력값을 저장할 변수

void setup() {
  Serial.begin(9600); // 시리얼 통신 시작
  pinMode(ledPin, OUTPUT); // LED 핀을 출력으로 설정
}

void loop() {
  if (Serial.available()) { // 시리얼 버퍼에 데이터가 있는 경우
    analogValue = Serial.parseInt(); // 시리얼 포트에서 아날로그 입력값 읽어옴
    analogValue = map(analogValue, 0, 1023, 0, 255); // 0~1023 범위를 0~255 범위로 변환
    analogWrite(ledPin, analogValue); // LED 밝기 제어
  }
}

이 코드는 시리얼 통신을 시작하고, LED 핀을 출력으로 설정합니다. 무한루프를 돌며 시리얼 버퍼에서 데이터를 읽어온 후, 이 값을 01023 범위에서 0255 범위로 변환합니다. 그리고 변환한 값을 이용해 LED 밝기를 제어합니다.

 

2.파이썬 코드 작성하기

import serial

ser = serial.Serial('COM3', 9600)

while True:
    data = ser.readline().decode().rstrip()
    analogValue = int(data)
    analogValue = int(analogValue * 255 / 1023) # 0~1023 범위를 0~255 범위로 변환
    ser.write(str(analogValue).encode()) # 아두이노로 변환한 값을 전송

위 코드에서는 시리얼 포트에서 데이터를 읽어온 후, 이 값을 01023 범위에서 0255 범위로 변환합니다. 그리고 변환한 값을 아두이노로 다시 전송합니다.

 

3.실행하기

이제 아두이노 코드와 파이썬 코드를 각각 작성했으므로, 먼저 아두이노 코드를 업로드한 후, 파이썬 코드를 실행해주세요. 파이썬 코드를 실행하면 시리얼 포트를 통해 아날로그 입력값을 읽어올 수 있습니다. 이 값을 이용하여 LED 밝기를 제어할 수 있습니다.

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

728x90

+ Recent posts