2009년 5월 13일 수요일

아뒤노를 인터넷에 연결시키기 (Connecting Arduino to the Internet through Ethernet interface)

아래의 사진에 있는 WIZNet의 WIZ810MJ을 사용해서 Arduino를 이더넷에 연결시켜 보았다.

이 모듈에 사용된 WIZNet의 이더넷 컨트롤러 Arduino Ethernet libaray에서 기본 지원하기 때문에 매우 손쉽게 사용할 수 있다. 한국에서는 제조사의 온라인샵인 http://www.ewiznet.co.kr/ 에서 22,866원(그냥 23000원으로 하지 끝에가 866원은 뭔지 모르겠다.)에 구입할 수 있다.

다만 단점은 3.3V전원을 사용한다는 것과 커넥터가 일반적으로 사용하는 2.54mm 피치가 아니고 2mm를 사용하기 때문에 PCB를 뜨지 않으면 일반적으로 구할 수 있는 만능기판에 들어가지가 않는다는 것이다.

이 모듈은 MCU data interface와 SPI인터페이스를 지원해 준다.

SPI인터페이스를 사용하는 경우는 저 핀들중에 아주 일부만 사용하면 되기 때문에 매우 편리하다.

아래의 그림이 핀 배치도인데 저 중에 빨간색으로 표시된 신호만 사용하면 된다. 특히 그 중에 SPI_EN은 SPI 모드를 사용할것이기 때문에 Vcc에 연결해 버리면 되고 리셋만 제외하면 나머지 필요한 신호를 모두 한쪽의 커넥터(JP1)에서 얻을 수 있다. 리셋은 전원이 인가될 때 자동리셋이 되기 때문에 없어도 되긴 하지만 혹시 몰라 조그마한 푸쉬버튼을 연결해 모듈에 접착시켜 버렸다.

그 덕에 집에 가지고 있던 2mm 피치의 14핀 커넥터를 사용해 JP1의 앞쪽만 연결해서 별도의 추가 비용 없이 손쉽게 연결할 수 있었다.

 Arduino WIZ810MJ
 D13 SCLK (7)
 D12 MISO (12)
 D11 MOSI (9)
 D10 SCS (10)

매우 손쉽게 인터넷을 사용할 수 있는데 단점은 DHCP를 기본적으로 지원하지 않기 때문에 IP address를 수동으로 지정해 줘야 하는 것이다.

일단 arduino의 samples중에 ethernet에 속해있는 아무거나 선택해서 다운로드 하고 컴퓨터에서 ping을 날려 보았다.


일단 ip address만 할당되고 나면 arduino에 어떤 프로그램이 실행되는가 관계 없이 모듈이 ping에 대한 응답을 해 준다.


예제중에 WebServer를 실행하고 컴퓨터의 웹 브라우져에서 접속한 화면이다. 이 예제는 arduino의 아날로그 입력을 브라우져에서 볼 수 있게 해 준다.

모듈은 기본적으로 3.3V에서 동작하게 되어 있지만 5V I/O tolerant 하다. 그래서 이번에는 전원도 5V를 넣고 실험을 해 봤는데 별 문제는 없었지만 모듈이 조금 많이 뜨거워 진 것 같아서 3.3V 레귤레이터를 사용해 줘야겠다.

댓글 7개:

  1. I/O TTL(5V) tolerant는 IO핀들이 5V를 견딜 수 있다는 것으로 모듈에는 3.3V를 넣어 주셔야 되요! :)

    아두이노 이더넷 라이브러리가 메모리를 얼마나 사용하는지 혹시 알 수 있을까요?

    답글삭제
  2. @suapapa - 2009/05/13 20:50
    예..그건 알고 있긴 한데 당장 테스트하려고 할 때 regulator를 구할데가 없어서 그냥 해 봤죠. ^^;



    Arduino에서 라이브러리만 따로 컴파일하는건 방법을 모르겠고 chatserver(그냥 echo해주는 제일 간단한 예제) 돌리면 4442 byte 나오는걸로 봐서 대략 순수하게 라이브러리만이면 한 4K정도 될거 같습니다.

    답글삭제
  3. trackback from: arduino에 사용가능한 이더넷 모듈
    얼마전 arduino에 인터넷에 연결하기 위한 모듈이 nemo10과 rj45잭을 구입했습니다 수아파파님 블로그를 열심히 들여다 보고 회로도도 보고 해서 빵판에 여기 저기 연결해 보았으나 아직 지식이 부족한건지 이해도 잘 안되고 어디가 문제인지 파악도 어렵고, 그리서 일단 보류하고 있던중.... 수아파파님 블로그에 놀러 갔다가 나우테스님의 리플을보고 techblog.tistory.com에 방문해 wiznet의 이더넷 모듈을 알게 되었습니다. W5100..

    답글삭제
  4. 글 잘 보았습니다.

    저도 같은 모델을 이용하여 아두이노를 인터넷에 연결시켰습니다.

    그런데 제 아두이노느 내부연결된 서버만(192.168.0.A) 접속하고 외부연결된 서버(예, 구글; )는 접속을 하지 못하더군요. (웹클라이언트 예제)

    혹시 비아토르님의 아두이노는 외부서버에도 잘 접속되나 궁금합니다.



    감사합니다.

    답글삭제
  5. @오옷 - 2009/12/27 00:05
    어떤 예제를 사용하셨나 코드를 올려주시면 확인 해 보겠습니다.

    제가 보기엔 저런 문제가 생기는건 subnet mask, gateway(default router) 설정이 잘못되어 있을 가능성이 제일 큽니다.

    답글삭제
  6. @비아토르 - 2009/12/27 08:42
    결과부터 말씀드리자면 인터넷을 조금 더 뒤적거리다가 성공했습니다.

    외부접속시 시간이 초과되어서 발생한 문제인듯합니다.



    사용한 예제는 이더넷의 웹 클라이언트 예제였습니다.

    예제에서 server[]만 변경한 후 if (client.connect())전에 client.connect(); 을 써 넣어 접속을 시켜주니 되었습니다.



    혹시라도 같은 문제가 발생하실 수 있으실지 몰라 적어놓고갑니다.

    답글삭제