관리 메뉴

철호의 종이모형 이야기

아두이노로 웹서버 만들고 웹페이지에서 LED 제어하기 본문

수장고/아두이노

아두이노로 웹서버 만들고 웹페이지에서 LED 제어하기

종이모형 디자이너 김철호 2010.11.28 01:02

아두이노 수업은 이제 다 끝나고, 각 조별로 프로젝트를 수행해야 합니다.
기간은 4주 정도 남았네요.

저희 조는 아두이노와 스마트폰을 활용한 홈 네트워크를 주제로 잡았습니다.
그러기 위해서는 아두이노와 웹을 연결해야겠다는 생각이 들더군요.

찾아보니, 아두이노에서 인터넷을 사용할 수 있게 하는 모듈이 있었습니다.
여러가지가 있는데, 저희 조는 아두이노 두에밀라노브에 쉽게 끼울 수 있는 아두이노 이더넷 쉴드를 사용하기로 했습니다.

plughouse에서 판매하고 있습니다.
http://plughouse.co.kr/shop/goods/Goods_view.php?G_code=102705472330

아두이노 두에밀라노브위에 끼운 모습입니다.
생김새도 비슷합니다.
10, 11, 12, 13번 핀을 이더넷 통신에 사용하기 때문에 아두이노에서 입출력핀으로는 사용하지 못합니다.
4번핀은 SD카드와 관련되어있다던데, 자세히는 모르겠네요. 이더넷 쉴드에 Micro SD카드를 꽂는 슬롯이 있긴 합니다만, 무슨 기능인지를 모르겠습니다.

아두이노와 이더넷 쉴드를 결합하고, LED를 2번핀에 연결했습니다.

LED가 꺼져있는 상태에서는 LED ON 버튼이 나타납니다.
버튼을 누르면 LED가 켜지고, LED status는 ON으로 바뀝니다.

소스는 아래와 같습니다.
4개의 라이브러리를 사용하는데, Led를 제외한 3개의 라이브러리는 기본 라이브러리입니다.

#include "Ethernet.h"
#include "SPI.h"
#include "EEPROM.h"
#include "Led.h"

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x27, 0xC3 };  // MAC address
byte ip[] = { 192,168,0,9 };  // IP address
byte gateway[] = { 192,168,0,1 };  // gateway address
byte subnet[] = { 255, 255, 255, 0 };  // subnet address

Server server(80);  // port
int ledPin = 2;
int value=0;
String readString = String(30);
boolean LEDON = false;

Led l(ledPin,HIGH,LOW);

boolean hnk_led()
{
  boolean result;
  int value;
  value=EEPROM.read(0);
  if(value==1){
    l.Control(0,LED_ON);
    result = true;
  }
  else
  {
    l.Control(0,LED_OFF);
    result = false;
  }
  return result;
}

void setup(){
  Ethernet.begin(mac, ip, gateway, subnet);
  l.initialize();
  LEDON = hnk_led(); 
 
  Serial.begin(9600);
}

void loop(){
  Client client = server.available();
  if (client) {
    while (client.connected()) {
    if (client.available()) {
      char c = client.read();
        if (readString.length() < 30) {
          readString.concat(c);
        }

        Serial.print(c);

        if (c == '\n')
        {
          if(readString.indexOf("L=1")!=-1) {
            EEPROM.write(0,1);
          }
          else if(readString.indexOf("L=0")!=-1) {
            EEPROM.write(0,0);
          }
         
         
          LEDON = hnk_led();

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<html><body style=background-color:white>");
          client.println("<h1>LED control</h1>");
          client.println("<form method=\"GET\" name=\"LED\">");
          client.println("<input type=\"hidden\" name=\"active\" value=\"on\">");
          if (LEDON)
          {
            client.println("<input type=\"hidden\" name=\"L\" value=\"0\">LED<br><input type=\"submit\" value=\"LED OFF\">");
          }
          else
          {
            client.println("<input type=\"hidden\" name=\"L\" value=\"1\">LED<br><input type=\"submit\" value=\"LED ON\">");
          }
         
          client.println("</form>");
          client.println("<br />");
          client.print("<font size=\"5\">LED status: ");

          if (LEDON)
            client.println("<font color=\"black\" size=\"5\">ON ");
          else
            client.println("<font color=\"black\" size=\"5\">OFF ");
          client.println("<hr />");
         
          client.println("</body></html>");
          readString=" ";
          client.stop();
        }
      }
    }
  }
}

전원이 나가더라도 이전 값을 기억할 수 있게 ROM에 내용을 저장합니다.
그리고, 웹페이지를 불러올때 전달값이 없으면 ROM값이나 변수 값들을 웹페이지에 표시하지 못하더군요. 그래서, http://xxx.xxx/?active=on 이런식으로 아무 값이나 전달하는 페이지로 접속을 해야 합니다. 그냥 http://xxx.xxx 로 접속하면 LED가 켜져 있는 상태인데도 웹페이지에는 LED OFF 상태로 뜨더군요.


구동 영상 보시죠!

아래 두 블로그에서 도움 받았습니다.

아두이노-웹페이지 구현
http://jong5.tistory.com/98

공유기 설정
http://blog.oop-s.com/10
저작자 표시
71 Comments
  • 이전 댓글 더보기
  • 고상욱 2013.05.02 17:05 안녕하세요 좋은 정보 공유 감사드립니다. 혹시 저도 led 라이브러리를 받을수 있을까요 ??
    꼭좀 부탁드리겠습니다. sangwook7942@naver.com 입니다.
  • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2013.05.03 00:54 전달해드렸습니다.
  • creative 2013.05.09 16:19 안녕하세요 좋은 정보 감사드립니다. 괜찮으시면 라이브러리 좀 보내주실수 있나요? creative0425@nate.com 입니다.
    감사합니다
  • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2013.05.10 13:09 전달해드렸습니다
  • 여리여리 2013.05.17 16:48 인터넷이 사용가능한 곳 어디에서든 Led를 끄고 켜고 싶은데요 ㅜㅜ
    처음으로 아두이노를 공부해보는 거라 많이 어렵네용...
    아두이노와 이더넷쉴드를 구입해서 제작하려합니당..
    위글 링크된곳글을 읽었는데요 웹서버를 제작 및 구축하고 공유기 설정을 한다면
    어디서든 엘이디를 끄고 켤 수 있는건가요>???
    아두이노와 이더넷모듈이 아직 도착하지않았는데 그전에 정보를 많이 알고싶어서요 ㅜㅜ
    혹시 주실수 있는 정보 있으면 주시면 감사하겠습니다 ㅜㅠ
    메일주소는 calm6777@naver.com 입니당
  • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2013.05.17 20:29 저도 배운지가 오래되서 알려드릴 수 있는게 없습니다.;;
    여튼 종종 물어보시는 분들이 계셔서 이번에 아두이노 스타터 키트하고 이더넷 모듈을 구입했습니다. 취미로 소소한 것들을 만들 수 있을것 같아서요. 다음주 초에 올것 같네요.
    오면 같이 해봐요!
  • 열혈학생 2013.05.19 17:31 이더넷으로 모터제어를 하고자 하는 학생입니다.
    작성자님의 글을 보니 Delay 없이 Led가 on/off 되는 모습을 보았는데 이와 같이 구현해보고 싶은데요.
    아두이노 쿡북에 나온 led on/off제어는 딜레이가 생겨서 Led.h 파일을 보내주실수 있으신가요?ㅜㅜ 부탁드리겠습니다.
    메일주소는 buglow@naver.com 입니다.
    좋은 내용 및 참고자료 보고 갑니다. 감사합니다!
  • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2013.05.20 12:07 전달해드렸습니다
  • 학생 2013.05.20 03:09 led 제어를 배우고 있습니다
    라이브러리 부탁드립니다
    blackree@naver.com
    감사합니다!
  • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2013.05.20 12:07 전달해드렸습니다
  • 학생입니다.. 2013.05.20 17:02 안녕하세요. 아두이노로 웹서버를 만들어 제어하는 방법을 알아보다가 블로그에 방문하게 되었습니다.
    읽어보니 LED 라이브러리가 필요하다고 하는데 zxcvbnmplm@naver.com으로 보내주시면 참고해서 공부하겠습니다.
  • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2013.05.21 15:59 전달해드렸습니다
  • 학생입니다 ㅜㅜ 2013.06.02 15:38 안녕하세요. 현재 아두이노와 이더넷 쉴드, Xbee 와 여러 센서를 가지고
    센서로 아이의 상태를 측정하여 xbee를 통해 무선으로 통신하고 값을 아두이노로 보내서 이 값을
    웹서버로 출력하고 싶은데. 각 개별 센서는 잘 작동하는데 웹서버에 값을 출력하지 못하겠습니다.
    아두이노를 통해서 웹서버에 구현하는 방법을 알고 싶습니다. 도움을 주시면 감사하겠습니다.
    klcw77@naver.com
  • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2013.06.05 16:33 저위에 것이 웹서버가 구축된 상태입니다.
    위의 경우에는 웹브라우저에 http://192.168.0.9 라고 치면 해당 웹페이지가 뜨는 것입니다.
    단, 해당 PC와 아두이노가 같은 공유기를 쓰고 있어야 하겠지요?
    아니면 호스팅(xxx.com)을 하나 받아서 아두이노(192.168.0.9)에서 xxx.com으로 값을 전송하도록 하면 어느 곳에서 xxx.com으로 접속해서 아두이노 값을 읽을 수 있을 겁니다. 이해되셨나요?
  • Favicon of http://muis01@naver.com BlogIcon 학생입니다ㅜ 2013.06.03 22:37 안녕하세요 아두이노를 이용하여 서보모터를 웹페이지에서 제어하는 방법을 알아보다가 블로그에 방문하게 되었습니다.
    이 예제를 돌려보면 무엇인가 알거같아서 부탁드립니다 LED라이브러리를 muis01@naver.com으로 보내주시면 많은 도움이 될것같습니다.
  • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2013.06.05 16:33 전달해드렸습니다.
  • 히야 2013.06.07 20:58 소스 복사해서 아두이노 스케치에 붙여넣기 했는데 오류나네요;;; Ip주소랑 게이트웨이주소 다 수정했는데도...아두이노 스케치 소스좀 부탁드립니다..fly_he@naver.com
  • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2013.06.16 23:02 오래기다리셨습니다. 업데이트 판이 나왔어요!
    http://blog.kimchulho.com/536
  • 학생 2013.06.09 20:09 안녕하세요 철호님. 블로그 잘읽어봤습니다^^
    현재 아두이노, 와이파이쉴드를 이용하여 스마트폰으로 led제어나 서보모터를 제어해보려고 합니다...
    아두이노 소스 좀 부탁드립니다...한 학생을 살려주세요 ㅜ_ㅜ
    부탁드립니다...blackree@naver.com 입니다!
  • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2013.06.16 23:03 http://blog.kimchulho.com/536 업데이트판이 나왔네요!
댓글쓰기 폼
Prev 1 ... 61 62 63 64 65 66 67 68 69 ... 531 Next