티스토리 뷰
[아두이노 -> 파이썬 시리얼 통신 알아보기]
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 |