====== UART ====== UART(Universal Asynchronous Receiver/Transmitter) 이름으로 알 수 있듯이 리시버와 트랜시버가 따로 존재하고 시간 클럭 정보가 없는 비동기식 통신 형태를 말한다. 그럼 클럭 정보 없이 데이터를 어떻게 구분할것인가 궁금할 것 이다. {{http://www.terms.co.kr/asynchronous.gif}} 시작(start bit)과 끝(stop bit) 신호가 있고 그 사이를 일정 시간으로 잘라서 데이터의 비트를 구분한다. UART는 통신의 속도가 설정가능하고 데이터의 형식(갯수) 설정이 가능하다. UART의 종류로 RS-232, RS-422, RS-485 등이 있다. ====== 컴퓨터와 RS232 통신 ====== 컴퓨터와 RS232를 통해서 통신을 해보자. 펌웨어 디버깅 할 때 유용함. ==== Python 설치 ==== * Python 2.7.3 http://python.org/download/ * Pyserial Win32 (pyserial-2.5.win32.exe) google에서 pyserial win32 검색 * 빠른 다운로드 http://okin.cc/~donghee/hw/ ==== arduino code ==== {{{ int ledPin = 13; int value; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { value = Serial.read(); if (value == '1') { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } } }}} ==== pyserial ==== pyserial을 설치하고, 파이썬 인터프리터에서 다음과 같이 입력해보자. 어떻게 될지 예상해보자. {{{ >>> import serial >>> s = serial.Serial('/dev/ttyUSB0') >>> s.write('1') 1 >>> s.write('0') 1 >>> }}} ==== python gui button ==== {{{ from Tkinter import * import sys import serial port = '/dev/ttyUSB0' # TODO: change port name speed = 9600 def send(char): ser = serial.Serial(port,speed) ser.setDTR() ser.flushInput() ser.write(char) ser.close() def toggle_switch(): if switch_button["text"] == "Turn On": send('1') switch_button["text"] = "Trun Off" else: send('0') switch_button["text"] = "Turn On" root = Tk() root.title('Switch') switch_button = Button(root, text="Turn On",command=toggle_switch) switch_button.pack() root.mainloop() }}} ----