티스토리 뷰

[파이썬 -> 아두이노 시리얼 통신 알아보기]

2018/10/20 - [===[프로그래밍]===/Arduino] - [파이썬 → 아두이노] 시리얼 통신으로 문자열 보내는 방법




아두이노에서 나오는 값을 파이썬으로 읽어들이는 방법입니다. 파이썬 라이브러리인 pyserial이 설치되어있어야 하며, 문자열을 읽는 방법을 다룰 것입니다.

이를 통해 아두이노의 센서 등에서 얻은 정보를 파이썬 코드를 통해 직접 처리 할 수 있습니다.

 

 

먼저 아두이노의 코드를 먼저 살펴보겠습니다.

아두이노는 단순히 임의의 값만을 전송할 것이므로 코드가 간단합니다.

아두이노에서는 Serial.print 함수를 통해 시리얼로 값을 전달할 수 있습니다.

 

이번에는 Q12341000부터 Q12342000까지가 반복되는 문자열을 전송해보겠습니다.


#아두이노 코드 :

int A = 1000; // A는 1000부터 2000까지 반복 void setup() {  Serial.begin(9600); // 시리얼 통신 시작 } void loop() {  A+=1;    Serial.print("Q");  Serial.print("1234");  Serial.print(A);  Serial.println();  // new line  if(A==2000)  {A = 1000;} }


시리얼 모니터를 통해 코드의 실행결과를 살펴보면 다음과 같습니다.

참고로 파이썬과 시리얼 통신 중에는 시리얼 모니터와 같이 사용할 수 없습니다.

송신하는 경우 뿐 아니라 수신하는 경우에도 마찬가지입니다.





★ 이번엔 파이썬 코드를 살펴보겠습니다.

 

먼저 시리얼 포트와 보드레이트를 설정을 해주셔야합니다. 값을 읽는 것을 보여주기 위해 저는 무한루프로 만들었는데, 컨트롤+C를 통해 탈출하실 수 있습니다.

그리고 두 가지 함수를 정의했는데, 하나는 Ardread()는 아두이노에서 보내는 값을 읽는 함수이며, Decode는 말 그대로 보내온 문자열을 검토 및 분류합니다. 첫 문자가 Q가 맞는지 먼저 확인하고 그 후에 문자열의 개수를 확인한 뒤 4개의 숫자씩 잘라서 리스트에 저장합니다. 이 때 데이터를 슬라이싱 함과 동시에 int로 형변환 후 저장했습니다.

파이썬에 익숙하신 분이라면 한눈에 이해하실 수 있을 겁니다. 물론 그렇지 않다 하더라도 코드가 짧고 간단하기 때문에 천천히 읽어보시기 바랍니다.




#파이썬 코드 :

import serial print('serial ' + serial.__version__) # Set a PORT Number & baud rate PORT = 'COM4' BaudRate = 9600 ARD= serial.Serial(PORT,BaudRate) def Decode(A): A = A.decode() A = str(A) if A[0]=='Q': #첫문자 검사 if (len(A)==11): #문자열 갯수 검사 Ard1=int(A[1:5]) Ard2=int(A[5:9]) result= [Ard1,Ard2] return result else : print ("Error_lack of number _ %d" %len(A)) return False else : print ("Error_Wrong Signal") return False def Ardread(): # return list [Ard1,Ard2] if ARD.readable(): LINE = ARD.readline() code=Decode(LINE) print(code) return code else : print("읽기 실패 from _Ardread_") while (True): Ardread()

#실행결과 :

serial 3.4 [1234, 1001] [1234, 1002] [1234, 1003] [1234, 1004] [1234, 1005] [1234, 1006] [1234, 1007] [1234, 1008] [1234, 1009] [1234, 1010] [1234, 1011] [1234, 1012] [1234, 1013] [1234, 1014] [1234, 1015] [1234, 1016] [1234, 1017] [1234, 1018] [1234, 1019] [1234, 1020] [1234, 1021] [1234, 1022] ...


댓글
반응형
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함