티스토리 뷰
[아두이노 -> 파이썬 시리얼 통신 알아보기]
2018/10/18 - [===[프로그래밍]===/Arduino] - [아두이노 → 파이썬] 시리얼 통신으로 문자열 보내는 방법
#
이번에는 저번 글과 반대로 파이썬의 코드를 통해 아두이노에게 문자열 등의 원하는 값을 전송하는 방법을 알아보겠습니다 .개인적으로는 파이썬에서 아두이노로 보내는 쪽이 좀 더 까다롭다고 생각합니다.
파이썬 코드는 간단합니다. 포트와 보드레이트를 맞춰주시고, 원하시는 문자열을 전송하기만 하면 됩니다. 저는 Q12345678이라는 값을 보내보겠습니다.
# 파이썬 코드 :
import serial
print('serial ' + serial.__version__)
# Set a PORT Number & baud rate
PORT = 'COM7'
BaudRate = 9600
ARD= serial.Serial(PORT,BaudRate)
A=1234
B=5678
A=str(A)
B=str(B)
Trans="Q" + A + B
Trans= Trans.encode('utf-8')
while (True):
ARD.write(Trans) # Q12345678 전송아두이노 코드를 보겠습니다. Serial.read()는 여러 입력이 한 번에 들어와도 마지막 문자 하나만을 반환합니다. 따라서 while문과 String.concat() 함수를 이용해서 들어오는 입력 문자들을 이어 붙여 하나의 문자열로 만들어줍니다. 그리고 저는 보낸 입력 Q12345678에서 첫 문자가 Q인지를 먼저 확인하고 나머지 1234와 5678을 각각 변수에 저장하겠습니다. 이때는 String.substring() 함수를 이용할 것 이구요. 첫 문자 뿐 아니라 글자 수도 검사해서 올바른 입력만을 받도록 해보겠습니다.
atoi() 함수는 int로 데이터타입을 바꿔주는 함수입니다. 따라서 문자 1234를 숫자 1234로 바꾸는 역할을 합니다.
올바른 값을 받았는지는 LED를 통해 확인해볼 예정입니다.
# 아두이노 코드 :
/***********************************
파이썬,아두이노 시리얼 통신
<둠선생 연구실>
************************************/
String sig;
char Ard1[5]={0};
char Ard2[5]={0};
char check[1];
int value_1=0;
int value_2=0;
void setup()
{
Serial.begin(9600);
pinMode(7,OUTPUT); // LED 연결
}
void loop()
{
/* 문자열로 저장*/
while(Serial.available())
{
char wait = Serial.read();
sig.concat(wait);
}
/* 입력 문자열 슬라이싱 */
sig.substring(0,1).toCharArray(check,2);
if(check[0] == 'Q')
{
if (sig.length()==9)
{
sig.substring(1,5).toCharArray(Ard1,5);
sig.substring(5,9).toCharArray(Ard2,5);
value_1 = atoi(Ard1);
value_2 = atoi(Ard2);
sig = "";
}
else if (sig.length()>9)
{sig = "";}
}
else if (check[0] != 'Q')
{sig = "";}
/* 수신 확인*/
if(value_1 == 1234 && value_2 == 5678)
{
digitalWrite(7,HIGH);
}
}
파이썬과 통신 중 일 때에는 시리얼 모니터를 사용할 수 없습니다만, 정상적인 동작을 하는 지 먼저 시리얼 모니터와 Serial.print() 함수로 파이썬 입력이 아닌 직접 값을 입력해서 출력이 어떻게 나오는 지 확인을 해보면 다음과 같이 나옵니다.
실행 결과 :
이제 준비가 다 되었습니다. 아두이노 코드를 업로드 하고, 파이썬에서 코드를 실행시켜 주시면 됩니다.
실행 결과 :
'Arduino' 카테고리의 다른 글
| [아두이노 → 파이썬] 시리얼 통신으로 문자열 보내는 방법 (0) | 2018.10.18 |
|---|---|
| 아두이노 적외선 수신기로 신호 입력 받기 (0) | 2018.10.16 |