아두이노 SERIAL 메시지 저장, 자동처리
아두이노에서 PC로 던져주는 Serial 메시지는 보통 아두이노 개발환경에 포함된 Serial Monitor를 통해 확인합니다. 하지만 매번 시리얼 모니터로 메시지를 확인하기 귀찮은 면도 있고, 이 메시지를 자동으로 저장하고 처리해주는 방법이 필요하신 분도 있어서 관련 내용을 정리해 봤습니다.
Serial 메시지를 저장, 처리해주기 위한 방법
1. 수동으로 Serial Monitor에 찍힌 메시지를 복사해서 저장하는 방법 : 가장 단순 무식, 확실한 방법
2. 윈도우 Command 창을 띄워서 아래 명령어를 실행
> COPY COM3 filename.txt
그러면 COM3 포트(아두이노 연결된 포트) 로 들어오는 Serial 메시지가 filename.txt에 저장됩니다. 종료할 때는 Ctrl-Z (hex character 0x1A, ASCII 26) 눌러줘야 합니다. http://chrio.org/serial/ 참고
3. 리눅스의 경우 아래 방법이 있다고 하네요
Probably illegal but in fedora linux at 9600 baud for standard ascii characters: tail -f /dev/ttyUSB0 > myfile to append tail -f /dev/ttyUSB0 >> myfile To watch it in another terminal do tail -f myfile
4. Serial 메시지를 모니터링하다가 특정 문자열이 발견되면 다양한 작업이 실행되도록 만들고 싶은 경우
http://www.mikmo.dk/gobetwino.html
위 홈페이지에서 gobetwino 프로그램을 받아 실행합니다. Settings 탭에서 COM 포트 설정하고, Commands 탭에서 매크로를 작성한 뒤 어플을 재실행 합니다. 그러면 COM 포트 모니터링하면서 특정 문자열이 발견되면 매크로를 실행할 수 있습니다.
5. Python으로 프로그램 작성
아예 파이선을 이용해 간단한 프로그램을 작성할 수도 있습니다. 원하는대로 활용하기 위해서는 이 방법이 가장 좋긴 합니다. 아래소스는 pySerial 라이브러리를 이용하는듯 합니다. http://pyserial.sourceforge.net/
import sys, os, serial, threading def monitor(): ser = serial.Serial(COMPORT, BAUDRATE, timeout=0) while (1): line = ser.readline() if (line != ""): #print line[:-1] # strip \n fields = line[:-1].split('; '); // ID = fields[0] // TIME = int(fields[1]) # print fields print "device ID: ", ID # write to file text_file = open("Pdata.log", "w") line = str(TIME) + ": " + str(CT) + "\n" text_file.write(line) text_file.close() # do some other things here print "Stop Monitoring" """ ------------------------------------------- MAIN APPLICATION """ print "Start Serial Monitor" print COMPORT = 4; BAUDRATE = 115200 monitor()
주의!!
아두이노 개발환경이 실행되어 COM 포트가 사용중일 경우는 위의 방법이 문제를 일으킬 수 있습니다. COM 포트 사용이 중복되지 않도록 아두이노 개발환경을 종료하고 사용해야 합니다.
.