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

댓글을 달아 주세요

간단한 임베디드 보드를 만들거나 회로 실험을 할 때 별도의 아답터가 있어야 하면 귀찮기도 하고 잊어버리고 놔두고 가기라도 하면 낭패가 아닐 수 없다.
그래서 대용량의 전류는 무리지만 웬만한 보드정도는 그냥 pc에서 바로 전원을 받아 사용할 수 있는 방법들을 소개한다.

1. USB를 이용하는 방법
사용자 삽입 이미지

컴퓨터의 USB 포트에서 최대 500mA까지의 전류를 사용할 수 있다.

사용자 삽입 이미지
USB커넥터는 그림에서 보듯이 4핀으로 되어 있는데 양 끝쪽 두 핀(1-Vcc, 4-GND)만 연결해주면 된다.

2. PS/2 (키보드, 마우스 포트)를 이용하는 방법

사용자 삽입 이미지

PS/2는 USB 이전에 마우스와 키보드를 연결하는 포트이다. 최근 대부분의 경우 USB를 많이 사용하지만 그래도 거의 모든 데스크탑에는 아직도 PS/2포트가 달려있다. 이 포트에서는 최대 275mA까지 전류를 사용할 수 있다. 다만 주의할것은 키보드나 마우스와 같이 연결하게 되기 때문에 키보드/마우스가 사용하는 전력을 생각해야 하기 때문에 너무 최대치까지 사용하면 안된다. 여기서는 아래 그림에서 볼 수 있듯이 3번핀을 GND, 4번핀을 Vcc에 연결해주면 된다.
사용자 삽입 이미지

Posted by nautes

댓글을 달아 주세요

  1. 2007.05.01 18:56

    아 이런 좋은 정보가..ㅋㅋㅋ

    이제 여름이 다가오는데 USB연결하는 선풍기를 만들어봐야겠네요.ㅋㅋㅋ

  2. 2007.08.22 11:59

    그 USb선풍기 제품이 이미 나와있던데요?

인터넷은 정말 무한한 정보의 바다이다. 잘 찾아보면 전 세계에서 다양한 사람들이 하고 있는 재미있는 것들이 넘쳐난다.
그 동안 NDSL을 구입해 놓고도 아직 그 흔한 닥터(?)도 안 샀고 테트리스 팩 하나로 버티고 있으면서 뭔가 embedded system에 활용할 방법을 찾고 있었는데 마침 적당한 인터페이스 보드를 발견했다.

사용자 삽입 이미지

사진에 있는 보드가 NDS의 DS slot에 장착하는 dserial이다. 8051 호환 마이컴과 RS-232, USB client(2.0 Full speed), GPIO, Tilt sensor(Wii mote에서도 사용된 기울기 감지 센서)가 장착되어 있다.

좀 더 상세한 자료와 소프트웨어는 http://www.natrium42.com/wiki/Main_Page 에서 찾아보면 된다. 하드웨어는 완성되었지만 라이브러리는 아직 개발중이라 시리얼 인터페이스와 간단한 IO만 코드가 완성되어 있고 나머지 인터페이스 라이브러리는 아직 개발중인거 같지만 자신이 능력이 있으면 직접 작성해서 사용하면 된다.
라이브러리가 완전해지면 응용할 수 있는 범위는 상당히 넓을거 같다.

현재까지만 가지고도 GPS, Servo motor, MIDI등을 NDS에 연결한 예제를 프로젝트 홈 페이지에서 확인할 수 있다. 보드는 v2.0이 지금 예약주문을 받고 있는데 나도 조만간 하나 구입해서 뭔가 뚝딱거려 볼 예정이다.
Posted by nautes

댓글을 달아 주세요

  1. 2007.03.13 16:43 신고

    멋지군요!! ^^ 저도 ndsl을 가지고는 있지만 이렇게까지 생각은 해보지를 못해서; 사실 임베디드 시스템을 배우긴 했는데 열심히(?) 공부하지를 않아서 이론만 약간 아는 정도랍니다.

    뚝딱거리셔서 뭔가 깜짝 놀랄만한 결과물이 나오기를 바랄께요~ 잘보고 갑니다~

2007. 3. 7. 09:32
사용자 삽입 이미지
하드웨어를 가지고 뭐를 만들거나 옛날 제품을 사용해 보려고 할 때 케이블이 없거나 망가진 경우가 종종 발생한다.
제조사에 문의하면 혹시 구할 수 있을지 몰라도 가격이 싸지 않은 경우도 많기 때문에 그럴때는 직접 제작할 수 있으면 좋을텐데...라고 생각하게 되는데 그 경우 어느 핀을 어디에 연결해야 하는지 정보가 필요하다.
현재 사용되고 있는 대부분 케이블들의 pinout을 정리해 놓은 사이트로 임베디드 개발자들에게 레퍼런스 사이트로 북마크 해 놓으면 좋을 것이다.

Pinouts.ru

We are collecting information about computer-related hardware interfaces, pinouts of ports and expansion slots, view and pin assignments of connectors of computer-linkable devices. That's all neccessary for analyzing, exploring, designing, connecting computer hardware components, digital devices.
Posted by nautes

댓글을 달아 주세요

ARM의 새로운 코어인 Cortex-M3를 사용한 프로세서의 평가보드다.
일단 착한 가격($49)과 작은 사이즈가 매력!

사용자 삽입 이미지

Stellaris EVB photo


별도 전원 공급이 필요없이 USB에서 전원을 공급받는다.
그리고 가장 마음에 드는건 96*16 픽셀의 OLED graphics display를 가지고 있다는 것이다.
좀 더 자세한 내용은 아래 링크 참조

Stellaris EKI LM3S811 Evalution Kit

Posted by nautes

댓글을 달아 주세요

이전버튼 1 2 이전버튼