파머의 라이브러리

반응형

아두이노를 이용한 Iot환경을 구축해보려고 합니다.

본 프로젝트를 들어가기 전에 간단하게 테스트 겸 이더넷 모듈을 이용하여 LED ON or OFF를 구현해보았습니다.

 

1. 배선

아두이노에 네트워크 연결하기 위하여 ENC28J60을 사용하였다. 라이브러리는 하단의 링크에서 다운로드 가능합니다.

Github => github.com/njh/EtherCard

위의 페이지에서 "Code"를 클릭 후 "Download Zip"으로 다운이 가능합니다.

 

라이브러리 추가 후 회로 연결은 아래와 같이 연결하였습니다.

CS에 연결되어있는 8번 포트는 변경이 가능하며 위의 git의 readme를 읽어보면 현재 기본으로는 10번 포트로 설정되어 있습니다. 사용자가 임의로 설정하기 위해서는 코드에서 별도로 명시가 필요합니다.

 

 

2. 코드

#include <EtherCard.h>

static byte mac[] = { 0x90, 0x17, 0x7E, 0x00, 0x00, 0x01};
byte Ethernet::buffer[860];
BufferFiller bfill;

void setup() {
  Serial.begin(57600);
  Serial.println("Start to initializing...");
  if (ether.begin(sizeof Ethernet::buffer, mac, 8) == 0){ // 이곳에 명시되어있는 8이 CS에 연결되는 포트번호이다.
    Serial.println("Fail to getting ip address..");
  }

  while(!ether.dhcpSetup("LED", true));
  Serial.println("Connected");
  ether.printIp("IP: ", ether.myip);
  pinMode(2, OUTPUT);
}

void loop() {
  word pos = ether.packetLoop(ether.packetReceive()); 
  if(pos) { 
    ether.httpServerReplyAck();
    char* data = (char *) Ethernet::buffer + pos; 

    cmpCmd(data);
  }
}

void goHome(){
  ether.httpServerReply_with_flags(testPage(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);
}

void cmpCmd(char* data){
  if(strncmp("GET /0", data, 6) == 0) {
      //Serial.println("ledon");
      digitalWrite(2, HIGH);
      goHome();
     }
  else if(strncmp("GET /1", data, 6) == 0){
    //Serial.println("ledoff");
    digitalWrite(2, LOW);
    goHome();
  }
}

static word testPage() {
  bfill = ether.tcpOffset();
  bfill.emit_p(PSTR("<!DOCTYPE html><html lang='en'><head><meta charset='UTF-8'><meta name='viewport' content='width=device-width, user-scalable=no'></head><body><a href='/0'>ledon</a> <a href='/1'>ledoff</a></body></html>"));
  return bfill.position();
}

IP는 고정이 아닌 DHCP로 받아왔으며,

10번째 라인을 보면 8번 포트에 CS를 연결하기 위해 명시해놓은 것을 확인할 수 있습니다.

 

 

3. 결과

아두이노에 코드 업로드 후 정상적으로 IP를 받아온 것을 확인할 수 있습니다.

 

아두이노에 할당받은 IP로 접속하면 다음과 같은 페이지를 출력하는 것을 확인할 수 있습니다.

 

위의 페이지에서 LEDON을 클릭시에는 연결되어있는 LED를 켜줍니다.

 

LEDOFF를 클릭하면 연결되어있는 LED를 꺼줍니다.

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band