위즈네트 아카데미

TUTORIAL

튜토리얼

Home  > 튜토리얼

Arduino 아두이노 이더넷 쉴드 활용법

WIZnet Academy 2014.08.22 04:19 조회 수 : 147

오늘은 '닥터 R의 블로그'에 포스팅 된 아두이노 이더넷 쉴드 활용법에 대해서 설명합니다.

================================

이번 강좌에서는 이더넷 쉴드에 대해서 간단히 소개하고그 사용법에 대해서 알아보도록 한다.


 강좌에서 사용되는 이더넷 쉴드는 아래 사진과 같고, Wiznet의  W5100 TCP/IP 전용 IC를 사용하고 있으며동시에 4개의 소켓의 연결이 가능하다.


5._Ethernet_Shield_img_0


아두이노 Mega2560/Uno R3 호환형이며, Micro-SD 소켓이 내장되어 있다또한, 1개의 독립된 PoE(Power-over-Ethernet) 모듈을 가지고 있는 장점이 있다.

아두이노 IDE Ethernet 라이브러리를 사용하여 작동이 가능하며, SPI 버스 제어로 최소한의 포트로 제어가 가능하다.

아두이노 공식 사이트에서 제공되는 Ethernet Library 레퍼런스에는 아두이노와 이더넷 쉴드가 어떻게 연결이 되야 되는지 설명이 되어 있다.

 

Arduino communicates with the shield using the SPI bus. This is on digital pins 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega. On both boards, pin 10 is used as SS. On the Mega, the hardware SS pin, 53, is not used to select the W5100, but it must be kept as an output or the SPI interface won't work.

 

5._Ethernet_Shield_img_1 (1)

 

강좌에서는 아두이노 우노로 진행을 하고 있으니우노 보드만 참고하기 바란다.


일단, IDE에서 제공되는 라이브러리와 예제를 이용해서 이더넷 쉴드를 사용해 보기로 하자.


5._Ethernet_Shield_img_2


WebServer 예제를 열어보자.







#include <SPI.h>

#include <Ethernet.h>

 

// 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("<!DOCTYPE HTML>");

          client.println("<html>");

          // 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("<br />");      

          }

          client.println("</html>");

          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");

  }

}




위 코드는 이더넷 쉴드를 웹서버로 이용하는 간단한 예제로, 6개의 아날로그 포트의 값을 웹을 통해서 확인 할 수 있는 예제이다.


#include <SPI.h>


#include <Ethernet.h>


위에서 언급했듯이이더넷 쉴드는 SPI 버스를 통해서 제어가 되니 SPI 라이브러리와 제공되는 Ethernet 라이브러리를 추가한다.


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


IP 주소는 본인의 환경에서 할당된 IP를 기입하면 된다.



5._Ethernet_Shield_img_3

ping을 한번 날려 보면잘 연결되어 응답하는 것을 볼 수 있다.


EthernetServer server(80);


이더넷 서버 라이브러리를 초기화하고, http의 디폴트 포트(80)를 지정해 준다.


Ethernet.begin(mac, ip);


 server.begin();


 이더넷 연결과 서버를 시작한다.


 EthernetClient client = server.available();


클라이언트의 인커밍(incoming)을 확인한다.


클라이언트의 인커밍이 있으며클라이언트와 연결을 생성하고 지정된 동작을 수행한다.


클라이언트와 연결이 되면아래와 같이 시리얼 터미널에 연결 메시지가 뜨고,



5._Ethernet_Shield_img_4


인터넷 익스플로러를 실행하고, 웹서버의 IP를 입력하면,

5._Ethernet_Shield_img_5



아날로그 포트의 값이 출력되는 것을 볼 수 있다.


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


Refresh 주기가 5초로 설정되어 있어서, 5초마다 갱신을 하게 되어 있으니임의로 주기를 변경하여 아날로그 입력 값을 확인 할 수 있다.


웹서버의 기능을 활용하려면, HTML에 대해서도 지식이 있어야 되기 때문에 사용에 문제가 있을 수도 있지만간단한 코드를 익혀서 적용시키면훌륭한 웹서버로도 충분히 이용이 가능하다고 생각된다.