검색
홈으로 마이페이지 주문조회 장바구니
로그인
회원정보 게시판
회사소개 이메일
도서(BOOK)
키트(KIT)
특판 상품
졸업작품&전자기초
응용모듈
전자부품
모터
기구
엔클로져
고객센터 게시판
자유게시판
MCU 통합 게시판
강좌-RaspberryPi
강좌-드론(쿼드콥터)
강좌-아두이노(기초)
강좌-아두이노(응용)
신제품/신기술 소개
DIY 공작 게시판
윤교수의 연구실 칼럼
 ☎ : 02-776-4868

 F: 02-779-6757

☞ 평일 : 09~18시
☞ 주말 : 10~13시


국민822401-04-027758
☞ 예금주 : Ohm사
국민822401-04-027761
☞ 예금주 : R&C사
 
 
1 (주)알트소프트 사이트
 
2 LabVIEW 강좌 사이트
 
3 윤교수의 마이크로프로세서 월드
 
4 전자 엔지니어
 

 

 
강좌-아두이노(응용)
 
2015. 02. 17 (14:05)
제목[아두이노 응용] 11. WIZnet W5200 Ethernet Shield
작성자 조회 : 3337

★첨부파일★

Software.zip

W5200+Ethernet+Shield.pdf

 

11. WIZnet W5200 Ethernet Shield

 

이전 응용 강좌5에서 이더넷 쉴드에 대해서 다뤄 본 적이 있다. 아두이노 공식 사이트에 소개된 공식 쉴드로 위즈네트의 W5100 칩을 사용한 쉴드이다.

 

오늘 다뤄 볼 쉴드 보드는 위즈네트(WIZnet)에서 직접 제작한 이더넷 쉴드에 대해서 알아보려고 한다. 앞서 다뤘던 W5100 이더넷 쉴드와 구조적으로 유사하나, W5200 칩을 사용했다는 점에서 차이가 좀 있다. 어떤 차이가 있는지, 어떻게 사용해야 되는지에 대해서 알아보자.


          
      

[Arduino W5100 Ethernet Shield]                             [WIZnet W5200 Ethernet Shield]

 

위 그림에서 보면, 아두이노 공식 쉴드와 위즈네트 쉴드의 외형적인 차이를 볼 수 있다. RJ45 잭의 위치와 다른 쉴드 보드와 연결될 수 있는 헤더 핀이 없는 것을 제외하고는 큰 차이가 없어 보인다. 두 보드 모두 Micro SD 소켓을 내장하고 있고, SPI 통신으로 제어가 된다.

 

위즈네트 쉴드의 회로도는 첨부 파일을 참고하기 바란다.

 

W5200 이더넷 쉴드와 기존 W5100 이더넷 쉴드와의 큰 차이는 고속 SPI 통신과 8개의 소켓을 지원한다는 것이다.

 

하드웨어적인 변화로 인해 소프트웨어도 변경을 해 줘야 할 몇 가지 사항이 있다. 복잡하지 않으니 단계별로 수행해 보자.

 

우선, 아두이노 IDE에서 제공되는 이더넷 라이브러를 W5100에서 W5200에 맞게 변경해 주어야 한다.

 

1. 본인의 아두이노 IDE 폴더의 /library/Ethernet/utility 위치에 있는 w5100.cpp, w5100.h W5200라이브러리로 덮어 쓰기를 한다. 기존 파일을 이름을 변경해서 두게 되면 컴파일 시에 에러가 날 수 있으니, 반드시 덮어 쓰기를 한다.

 

2. 그런 후에 예제를 하나 열어서 실행 해 본다. 예제는 W5100 쉴드에서 사용했었던 윕서버 예제를 열어 보도록 한다.

 

3. libraries/Ethernet/Ethernet.h 10번째 줄의 #define MAX_SOCK_NUM  4를 다음과 같이 변경 해 준다.

 

#ifdef W5200

#define MAX_SOCK_NUM 8

#else

#define MAX_SOCK_NUM 4

#endif

 

 

아두이노 IDE에서 위와 같이 WebServer 예제를 열어 본다.

 

 

#include

#include

 

// Enter a MAC address and IP address for your controller below.

// The IP address will be dependent on your local network:

byte mac[] = {

  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

IPAddress ip(192,168,10,177);

 

// Initialize the Ethernet server library

// with the IP address and port you want to use

// (port 80 is default for HTTP):

EthernetServer server(80);

 

void setup() {

 // Open serial communications and wait for port to open:

  Serial.begin(9600);

 

  // start the Ethernet connection and the server:

  Ethernet.begin(mac, ip);

  server.begin();

  Serial.print("server is at ");

  Serial.println(Ethernet.localIP());

}

 

void loop() {

  // listen for incoming clients

  EthernetClient client = server.available();

  if (client) {

    Serial.println("new client");

    // an http request ends with a blank line

    boolean currentLineIsBlank = true;

    while (client.connected()) {

      if (client.available()) {

        char c = client.read();

        Serial.write(c);

        // if you've gotten to the end of the line (received a newline

        // character) and the line is blank, the http request has ended,

        // so you can send a reply

        if (c == '\n' && currentLineIsBlank) {

          // send a standard http response header

          client.println("HTTP/1.1 200 OK");

          client.println("Content-Type: text/html");

          client.println("Connection: close");  // the connection will be closed after completion of the response

         client.println("Refresh: 5");  // refresh the page automatically every 5 sec

          client.println();

          client.println("");

          client.println("");

          // output the value of each analog input pin

          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {

            int sensorReading = analogRead(analogChannel);

            client.print("analog input ");

            client.print(analogChannel);

            client.print(" is ");

            client.print(sensorReading);

            client.println("
");
      

          }

          client.println("");

          break;

        }

        if (c == '\n') {

          // you're starting a new line

          currentLineIsBlank = true;

        }

        else if (c != '\r') {

          // you've gotten a character on the current line

          currentLineIsBlank = false;

        }

      }

    }

    // give the web browser time to receive the data

    delay(1);

    // close the connection:

    client.stop();

    Serial.println("client disonnected");

  }

}

 

 

IPAddress ip(192,168,10,177);

 

본인이 사용하는 IP 주소를 적어 주고, 컴파일 후에 업로딩 해 보자.

 

 

업로딩이 완료되고 시리얼 모니터를 실행 시키면 위와 같이 출력이 되면, 연결에는 문제가 없다.


 


쉴드로 Ping을 날려 보면, 이상이 없다는 것을 확인 할 수 있다.

 

그럼, 해당 IP로 연결해 보자.

 


W5100 이더넷 쉴드에서와 마찬가지로, A0 ~ A5의 아날로그 입력을 읽어서 표시하는 기능을 하는 예제이다. 주기적으로 값이 리프레쉬되는 것을 볼 수 있을 것이다.

그와 동시에 시리얼 모니터에도 다음과 같은 메시지가 출력되는 것을 볼 수 있다.

 

 

소스에 대해서는 별도의 설명을 하지 않겠다. 궁금한 분들은 강좌5를 참고 하도록 한다.

 

라이브러리 소스는 첨부 파일에서 다운 받으면 된다. 본 강좌는 아두이노 UNO 보드를 가지고 실험을 하였기 때문에, 본인의 환경에 맞게 변경해서 사용하도록 한다.

 

여기까지 위즈네트의 W5200 이더넷 쉴드에 대해서 소개하고, 간단한 예제를 실행시켜 보았다. 아두이노 공식 이더넷 쉴드와 큰 차이가 없이 사용이 가능하고, 향상된 기능 사용할 수 있을 것으로 기대된다. 더 제세한 내용이나 참고 자료는 위즈네트 웹(www.wiznet.co.kr)에서 얻을 수 있다.

 

다음 강좌에서는 마찬가지로 위즈네트의 쉴드를 가지고 설명하도록 한다. WizFi Shield로 이름이 지어진 WIFI 쉴드로 기존에 설명했던 쉴드와 어떤 차이가 있는지 확인 해 보도록 하겠다.

 

비밀번호 확인 닫기
name password
  Content name date hits
[아두이노 응용] 11. WIZnet W5200 Ethernet Shield  
2015/02/17 3337
상호명 : R&C사 사업자등록번호 : 106-02-43112 통신판매업신고번호 : 용산 03564
대표 : 곽민수 사업장소재지 : 서울시 용산구 갈월동 17-1번지 세기빌딩 101호
전화 : ☎ : 02-776-4868 ,F: 02-779-6757 개인정보담당자 : 곽민수
[회사소개] [이용안내] [이용약관] [개인정보취급방침]
Copyright ⓒ 도서출판 OHM사와 학습기기 R&C사 All Rights Reserved.