이전 포스트인 Mac OS X에서 시리얼 터미널 프로그램 (Serial Terminal Emulator in Mac OS X에서 이야기했던것처럼 Mac OS X에는 GUI 인터페이스를 사용하는 쓸만한 무료 시리얼 터미널 프로그램이 없었다. (물론 telnet 터미널 프로그램은 상당히 다양하다.)
일반적인 경우는 시리얼 터미널 소프트웨어가 없어도 불편이 없지만 네트웍, 텔레컴 장비를 다루거나 임베디드 환경에서 작업하는 사람들에게 있어서는 시리얼 터미널은 가장 기본적이고 필수불가결한 툴이다.
그런 의미에서 얼마전에 발표된 CoolTerm은 Mac OS X에 있어 가뭄의 단비(?)와 같은 소프트웨어이다.

프 로그램 설명에도 써 있는것처럼 터미널 에뮬레이션 기능은 빠진 간단한 시리얼 포트 터미널 소프트웨어로 시리얼포트로 데이터를 주고 받는걸 주 목적으로 하는 임베디드 환경에서 작업하는 사람들을 주 타켓으로 하고 있다. (사실 임베디드 환경에서 작업하는 사람들에게는 터미널 에뮬레이션 기능(vt100, xterm 등등)은 없어도 관계없다.) 그렇기 때문에 데이터를 텍스트 포맷 뿐 아니고 헥사값으로도 볼 수 있고 시리얼 포트가 여러개 있는 경우 동시에 복수개의 커넥션 연결, 헥사값으로 데이터 전송 등등 임베디드 작업에 유용한 여러가지 기능들을 가지고 있다.

RTS/CTS, DTR/DSR, DCD, RI 등의 핸드쉐이크 핀의 상태를 볼 수 있다.

Options에서 통신 환경을 설정할 수 있다.

Send String에서 텍스트로 뿐 아니고 헥사값을 보낼 수도 있다.


현재 (Version 1.0) Preferences에서는 Viewer의 폰트설정만 변경할 수 있다.
Posted by nautes

아이팟 터치/아이폰의 시리얼 포트를 사용할 수 있으면 다른 장비들과 연결해서 상당히 재미있는 일들을 많이 할 수 있게 된다.
하지만 시중에서 아이팟용 시리얼 케이블을 팔고 있지 않기 때문에 직접 만들어 보았다.
아이팟 도킹 커넥터의 pinout은 pinouts.ru 에서 확인할 수 있다.

먼저 아이팟 30핀 도킹 커넥터 male 타입은 Devicemart에서 구입할 수 있었다. 구입해야 하는 부품명은 ipod-30p-conn-wire 으로 개당 2500원이다.

커넥터를 구입하면 내용물은 다음과 같다.



커넥터는 30핀인데 위의 사진에서 보는것처럼 서로 엇갈리게 배치되어 자세히 보지 않으면 핀 위치를 찾기가 좀 힘들게 되어 있다.


핀 배치를 좀 보기 쉽게 풀어 그려 본 것이다. 다리가 긴 핀과 짧은 핀이 있어서 다리가 긴 핀은 바깥쪽에 있고 짧은 핀은 안쪽에 배치되어 있다. 그리고 각각의 핀은 조금씩 위치가 어긋나게 배치되어 있다.
이 핀들이 다 있으면 납땜질 하기 불편하기 때문에 필요없는 핀들은 다 뽑아버린다. 롱노우즈 플라이어로 잡아 땡기면 쉽게 빠져나온다. 단 한번 빠져나오면 다시 끼기 힘들기 때문에 뽑아내야 하는 핀의 위치를 확실하게 확인한 다음에 빼기 바란다.

시리얼 케이블에 필요한 핀들이다. 이 중 1,2,15,16,29,30은 모두 GND로 아이팟 내부에서 다 전기적으로 연결되어 있다. 그러므로 다 연결할 필요는 없다.


이 핀들만 남겨놓으면 된다. 15, 16도 땜질에 방해가 되기 쉬우므로 빼 버려도 관계 없다.

배선 연결은 위와 같다. 실제 시리얼 포트에 연결하는건 Tx, Rx, GND 3선이면 된다. 물론 아이팟에 연결하는 장치의 전력소모가 크지 않은 경우 3.3V에 연결해서 아이팟에서 전원을 공급받을수도 있다. (단 이 경우 아이팟 전력소모가 약간이나마 증가하는걸 염두에 둬야 한다.)
또한 Tx, Rx도 3.3V 레벨의 신호이기 때문에 RS-232에 연결하려면 MAX232, 233같은 레벨 컨버터가 필요하다. 저 2개의 저항은 칩 저항을 사용하면 커넥터 케이스 속에 집어넣을 수 있겠지만 현재 가지고 있는 칩 저항이 없기 때문에 이번에는 커넥터에서 Tx, Rx, Serial GND, GND, 3.3V 이렇게 5개의 선을 뽑아내었다.

Grey - GND
Red - Tx
Green - Rx
Orange - +3.3V
Black - Serial GND

단선을 방지하기 위해 열 수축 튜브로 고정시켜 주었다.

커넥터를 금속 케이스에 집어 넣는다.

집어넣은 모양은 다음과 같다.

또 하나의 금속판을 연결시킨다. 여기서 아래 그림과 같이 커넥터의 홈에 맞게 밀어 넣어줘야 한다.

제대로 집어 넣었으면 아래와 같이 양쪽의 걸쇄가 보인다.

플라스틱 케이스에도 위쪽과 아래쪽이 있다.

아래쪽 케이스에 조립된 커넥터를 집어넣는다.

집어넣은 모습은 다음과 같다.

커넥터를 분리할 때 사용하는 양쪽 버튼을 집어 넣는다. 이 때 버튼도 방향이 있으니까 주의해야 한다.

아래 사진처럼 버튼을 잘 보면 홈이 파여있는 쪽이 앞쪽이다.

버튼까지 다 집어넣은 모습이다.

이제 위쪽 케이스를 아래쪽 케이스에 맞춰서 끼워넣기만 하면 된다.

여기서는 프로토타입 보드에 꼽아 아뒤노와 연결하여 테스트하기 위해 반대쪽에도 헤더핀들을 연결시켜 놓았다.

Posted by nautes

Serproxy (Serial Proxy)는 시리얼 포트의 입출력을 TCP/IP 네트웍을 통해 리다이렉션 시켜주는 멀티쓰레드 프락시 소프트웨어이다. 작은 임베디드 보드의 경우 시리얼 포트만 가지고 있고 tcp/ip 스택을 가지고 있지 않아서 네트웍을 통해 연결을 할 수 없는 경우가 많다. 이런 경우 serproxy를 사용하면 원격지에 있는 디바이스를 네트웍을 통해 제어할 수 있게 된다.

그 이외에도 플래쉬나 다른 프로그래밍 언어로 사용자 인터페이스를 만드는 경우 해당 언어에서 시리얼 포트를 제어하는 라이브러리를 제공해주지 않으면 시리얼 포트를 사용할 수가 없지만 serproxy를 사용하면 소켓 프로그래밍 인터페이스를 사용해서 시리얼 포트로 데이터를 주고 받을 수 있다.


200806222356.jpg

(a) 시리얼 포트를 직접 억세스하는 경우


200806222356.jpg

(b) Serial proxy를 사용하는 경우

위의 그림 (b)에서는 serproxy를 실행하는 컴퓨터와 그 시리얼 포트를 사용하는 컴퓨터를 따로 그려 놨지만 한 컴퓨터에서 serproxy를 실행하고 같은 컴퓨터에서 소켓 프로그램으로 시리얼 포트를 억세스 할 수도 있다. (제어 프로그램을 플래시로 만드는 경우 경우 플래시에서 시리얼 포트를 직접 억세스 할 수 없기 때문에 이런 방법을 사용해야 한다. 이 경우 destination ip: localhost, port: cfg파일에 설정한 포트번호로 억세스 하면 된다.)

여기서 소스 및 윈도우용 바이너리 파일을 다운받을 수 있다.

맥용 바이너리 파일은 아래에서 다운받으면 된다.


압축을 열어보면 serproxy와 serproxy.cfg 가 있는데 serproxy.cfg는 /usr/local/etc에 serproxy는 /usr/local/bin에 복사해주고 자신의 환경에 맞게 serproxy.cfg를 바꿔주면 된다.


# 시리얼 포트에서 오는 뉴라인('\n')을 nils('\00') 으로 변환

# 플래시의 경우 끝에 nils가 오지 않으면 앞부분을 해석하지 않기 때문에 이 기능이 필요하다. true (e.g. 플래시를 사용하는 경우 or false

newlines_to_nils=true

# 사용할 시리얼 포트, 여기서는 2개를 사용하는 경우, 각각 1, 2가 된다.

comm_ports=1,2

# 디폴트 설정

comm_baud=19200

comm_databits=8

comm_stopbits=1

comm_parity=none

# 아이들 타임아웃

timeout=300

# 포트 맵핑 설정, 즉 시리얼 포트 1은 TCP포트 5531을 통해, 시리얼 포트 2는 TCP포트 5532를 통해 사용할 수 있음

net_port1=5331

net_port2=5332

# 각 시리얼 포트 디바이스 이름

serial_device1=/dev/tty.usbserial

serial_device2=/dev/tty.usbserial-3B1
Posted by nautes

얼마 전 Macworld 잡지에 'Control the world' 라는 제목의 재미있는 기사가 소개되었다.

사용자 삽입 이미지

이 기사에서는 임베디드 시스템을 맥과 연동시켜 동작시킬 수 있는 방법중에 가장 간단한 방법을 설명해주고 있다. 위의 사진에는 Arduino Diecimila라는 완제품으로 판매되는 보드를 사용하고 있지만 실제로는 시리얼 포트를 가지고 있다면 자신이 직접 만든 어떤 종류의 보드도 관계 없다.

여기서는 보드의 I/O포트에 압력센서(오른쪽 위의 동그란 부분)과 저항을 붙이고 저 압력센서를 의자에 집어 넣어 사람이 의자에 앉으면 앉아있는 시간을 감지해서 일정 시간이 지나면 휴식을 취하라고 말하게 해 주는데 사용한다.

위에서 사용한 보드에는 이미 serial-usb converter가 들어있기 때문에 맥에 드라이버 프로그램을 설치하고 USB케이블로 연결하면 된다. 자작 보드에 시리얼 포트만 있는 경우는 시판되고 있는 USB to RS-232 컨버터를 사용해서 연결하면 된다.

 Arduino보드는 압력센서에 압력이 감지되면 (즉 사람이 의자에 앉으면) 그때부터 시간을 기록하고 있다가 각각 정해진 규칙에 따라 맥에 특정 문자를 보내주는 역할을 한다. 예를 들어 의자에 앉으면 'U'를, 15분 이내에 일어나면 'D'를, 45분이 지나면 'B'를 보내는 것이다.

맥에서는 시리얼 포트에 각각의 글자가 들어오면 그에 해당하는 문장을 말하게 만들어 준다.

Arduino와 맥 사이에 좀 더 복잡한 양방향의 명령/데이터 전송이 필요하다면 맥에서도 직접 프로그램을 만들어야 하겠지만 이번 예제같이 Arduino에서 맥으로 단방향으로 단순한 명령만 전달되는 경우는 별도의 복잡한 프로그래밍 없이 간단하게 사용할 수 있는 프로그램이 나와 있다.
 
사용자 삽입 이미지

ASProxy 를 사용하면 위의 그림과 같이 특정 문자가 들어올 때 어떤 동작을 할 것인가를 애플스크립트로 지정해 줄 수 있다.

애플스크립트로 다양한 맥 OS의 어플리케이션들을 제어할 수 있기 때문에 위의 예를 조금만 변경해도 할 수 있는 일들은 무궁무진하다.
 
예를 들자면 압력센서 대신 PIR(Passive InfraRed) 센서를 붙여주면 인체의 움직임을 감지할 수 있기 때문에 맥 앞에 사람이 오면 전차남의 '어서오세요. 주인님' 같은 부분이 들어있는 동영상 클립을 전체화면에서 플레이 시키는것이 가능해진다.

ASProxy의 장점은 별도 프로그래밍이 필요없이 쉽게 사용할 수 있다는 것이지만 단점은 외부에서 맥으로 신호를 입력해 줄 수는 있지만 반대로 맥에서 외부로 신호를 출력하지 못한다는 것이다. 이 경우는 별도의 스크립팅 또는 프로그래밍 언어로 원하는 동작을 하도록 만들어 줘야 한다.

애플 스크립트에서 시리얼 포트를 직접 제어하려면 SerialPort X를 사용할 수 있고 python에서는 PySerial을 사용하면 된다.

Arduino 보드에 관심이 있는 사람은 http://www.arduino.cc/en/ 를 참조하면 된다.
또한 위의 예제에서 Arduino에 사용할 코드의 소스는 맥월드의 기사에 보면 다운로드 받을 수 있는 링크를 찾을 수 있다. 관심이 있는 사람은 맨 위쪽의 기사 링크를 따라가서 참조하길 바란다.
Posted by nautes

이전버튼 1 이전버튼