아두이노에서 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 포트 사용이 중복되지 않도록 아두이노 개발환경을 종료하고 사용해야 합니다. 

.