2015년 4월 22일 수요일

[00069] 파이썬의 pyserial 을 이용해서 아두이노와 통신하기 (3/3)

3. 두 번째 실험 : 송신

  이번에는 파이썬에서 값을 송신하면 그에 따라서 아두이노의 LED를 점멸시키는 예제를 해 보겠다. 파이썬에서 데이터를 쓰는 함수로 Serial.write() 함수가 있는데 전송할 바이트 데이터를 리스트나 튜플로 묶어서 넘겨주면 된다. 반환값은 전송한 데이터의 바이트 수이다. 예를 들면 다음과 같다.

-------------------------------------------------------------------------
>>> ard.write( [0] ) # 0이라는 데이터를 전송한다.
>>> ard.write( [10, 150, 255] ) # 10,150,255를 차례로 전송한다.
>>> ard.write( 123 ) # 예외 발생!
-------------------------------------------------------------------------

전송되는 데이터는 바이트 데이터이므로 0~255 사이의 정수여야 하며 마지막 예와 같이 리스트나 튜플이 아니라면 예외가 발생함을 유의하여야 한다.

만약 문자열을 한꺼번에 전송하고 싶다면 encode() 라는 문자열 내장 함수를 이용하면 된다. 이 함수는 파이썬 문자열을 아스키값의 bytes 배열로 변환시켜준다.

-------------------------------------------------------------------------
>>> ard.write( 'Hello arduino.\r\n'.encode() )
-------------------------------------------------------------------------

이 명령은 'H' 부터 맨 마지막 '\n' 까지 14개의 문자의 아스키코드를 차례로 전송한다.

이제 실험을 위해서 아두이노에 다음과 같은 프로그램을 작성하여 다운로드 했다.


아두이노 프로그램 : 전원이 켜지면(또는 리셋 버튼을 누르면) "Hello python." 이라는 문자열을 보낸다. 그리고 데이터가 들어오면 0값이면 LED를 끄고 아니라면 켠다.
-------------------------------------------------------------------------
void setup() {
Serial.begin(9600);
Serial.println("Hello python.");
pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
if( Serial.available() )
digitalWrite(LED_BUILTIN, Serial.read());
}
-------------------------------------------------------------------------

이제 ard.write([0]) 이라고 명령을 내리면 LED가 꺼지고 ard.write([1])이라고 하면 LED가 켜지는 것을 다음과 같이 확인할 수 있다.




위 동영상을 보면 1을 쓰면 LED가 켜지고 0을 쓰면 꺼지는 것을 볼 수 있다.

댓글 없음:

댓글 쓰기