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

수장고/아두이노 2010/11/28 01:02 Posted by 종이모형 디자이너 김철호

아두이노 수업은 이제 다 끝나고, 각 조별로 프로젝트를 수행해야 합니다.
기간은 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
저작자 표시

http://blog.kimchulho.com/trackback/475 관련글 쓰기

댓글을 달아 주세요

  1. Favicon of http://sohomme.tistory.com/ BlogIcon 옴므 2010/11/30 22:54  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다.

  2. 유형모 2011/06/28 15:30  댓글주소  수정/삭제  댓글쓰기

    혹시 LED 라이브러리를 지금 갖고 계시면 보내주실 수 있으신가요 ? ㅎ

  3. vvnvvn1 2011/08/30 22:51  댓글주소  수정/삭제  댓글쓰기

    김철호님 저것과 관련된거 몇가지 여쭈어 보고싶은데 어떻게 연락드릴 수 있나요? si_young_d27@naver.com 여기로 메일 하나만 주실수 있나요 ㅠㅠ

  4. 김환웅 2011/11/23 10:46  댓글주소  수정/삭제  댓글쓰기

    김철호님, 아두이노 이더넷쉴드 관련해서 질문 드릴게 있는데 메일 하나만 주실수 없나요?
    woongsberry@gmail.com 입니다. 부탁 드립니다.

  5. bbj2h 2012/03/12 20:43  댓글주소  수정/삭제  댓글쓰기

    혹시 아직 LED라이브러리를 가지고 계시다면 보내주실수 있나요..
    공부하다가 막혀서요...ㅠㅠ
    메일은 wnwnsgud@nate.com입니다..

  6. ARDUINO 2012/05/01 21:26  댓글주소  수정/삭제  댓글쓰기

    저도 led 라이브러리좀 부탁드리겠습니다. 간곡히 부탁드리겠습니다.
    메일은 kdsjjangjjang@nate.com입니다....

  7. ARDUINO 2012/05/02 17:40  댓글주소  수정/삭제  댓글쓰기

    김철호님...아두이노 초보인데 Duemilanove와 Ethernet shield v1.1로 LED제어를 하고자 합니다.
    웹페이지 구현소스와 위에 나와있는 소스를 어떻게 아두이노로 프로그래밍을 하나요?
    둘다 넣을순없는거 같은데...공유기는 없습니다. 조언좀 부탁드리겠습니다... 웹페이지를 어떻게 구현하고 제어를 할 수 있나요..

    • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2012/05/03 23:37  댓글주소  수정/삭제

      이틀 연속 야근하느라 확인을 늦게 했네요. 아두이노를 한지가 오래되서 잘 생각은 안나는데 아마 파일 하나로 다 짤 수 있을 겁니다.

  8. ARDUINO 2012/05/02 17:49  댓글주소  수정/삭제  댓글쓰기

    위의 소스를 아두이노스케치1.0으로 컴파일하면 server server(80)에서부터 쭉 오류가 납니다..ㅠㅠ

  9. ARDUINO 2012/05/02 17:51  댓글주소  수정/삭제  댓글쓰기

    네이트온으로 아두이노 전수좀 해주십시오 선배님........살려주세요.........ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

  10. ARDUINO 2012/05/03 22:34  댓글주소  수정/삭제  댓글쓰기

    저도 LED 라이브러리좀 부탁드리겠습니다 ㅠㅠ jang5497@naver.com 입니다...

  11. 고희웅 2012/05/04 16:30  댓글주소  수정/삭제  댓글쓰기

    저도 LED라이브러리좀 보내주실수 있나요? 부탁드리겠습니다. rhgmldnd@naver.com

  12. ARDUINO 2012/05/09 14:18  댓글주소  수정/삭제  댓글쓰기

    아두이노를 배우고 있는 학생입니다. 아두이노에 웹서버를 연동또는 올릴수있을까 하여 블로그를 찾게 되었는데요...... 블로그를 보니 소스코드와 수행결과를 잘 보여주어 그거까지는 도움이 되었으나....... 제가 지식이 부족한지라..... 아두이노에 웹서버를 올리는지 아니면 웹서버와 연동하는지를 알고싶네요. 아두이노에 웹서버를 올리면 피씨에서 웹에 접속하여 제어가 가능한것인지 아니면 피씨에 웹서버를 올려 연동하는것인지가 궁금합니다.

    • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2012/05/10 00:14  댓글주소  수정/삭제

      아, 위에 분과 같은 분인가요? 닉네임이 똑같아서..
      여튼, 아두이노 자체가 웹 서버 역할을 하는 거라고 보면 될겁니다. 별도의 웹서버는 필요 없습니다.
      저 소스를 아두이노에 넣기만 하면 되지요.
      물론, 외부 웹 서버와 연동할 수도 있고요.

  13. 주례김 2012/05/12 14:14  댓글주소  수정/삭제  댓글쓰기

    어플리케이션을 이용한 홈네트워킹을 만들려고 하는데요. 정말 도움이 많이 되었습니다.
    궁금한게 있는데요 어플리케이션이랑 어떤식으로 연동하셧나요?
    이클립스를 이용해서 안드로이드 어플을 공부하고 있는데
    통신하는것은 어렵더라구요. 혹시 어플리케이션 소스코드도 가지고 계시면 좀 보내주시면 안될까요?

    (kingkrabby@nate.com)
    아니면 참고하고 공부할수 있는 것이 없을까요??
    그리고 LED 라이브러리도 좀 보내주세요
    감사합니다.

    • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2012/05/12 23:32  댓글주소  수정/삭제

      제가 한 방법은 약간 편법 같이 보이기도 할것 같네요.
      폰 어플리케이션으로 직접 아두이노를 조종한 것이 아닙니다.
      아두이노와 폰 사이에 웹서버를 하나 둡니다. 저는 호스팅 쓰는게 있어서 그쪽을 썼고요. 간단하게 LED를 원격으로 켜고 끈다라는 걸 보죠. 웹서버 DB에 LED가 켜져 있는지 꺼져 있는지를 1과 0으로 해서 저장해야겠죠.
      DB에 있는 값이 1이면 켜진 상태, 0이면 꺼진 상태입니다. 아두이노에서는 웹서버 DB의 값을 게속 조사하여(예를 들어 1초 간격) 1이면 계속 켜지게 하고 0이면 꺼지게 합니다. 폰에서는 웹서버 DB값을 변경해주는 버튼이 하나 있으면 됩니다. 한번 누르면 DB에 1을 넣고, 다시 한번 누르면 0을 넣는 것이죠. DB에 쿼리 날리는 웹 페이지를 하나 만들고 폰에서 그 페이지를 호출하면 DB에 값이 써질겁니다. 이걸 기본으로 해서 LED뿐만 아니라 다른 장치들도 제어할 수 있을 겁니다.
      LED라이브러리는 메일로 전달해드리겠습니다.

  14. ARDUINO 2012/05/13 21:58  댓글주소  수정/삭제  댓글쓰기

    아두이노가 하나의 웹서버라면 위에 있는 ip주소 물리주소 같은것은? 임의로 지정하는것인가요? 아니면 따로두는 웹서버의 주소인가요?

    • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2012/05/13 23:26  댓글주소  수정/삭제

      제 기억에 맥주소는 이더넷 쉴드에 써있었던것 같고요.
      IP는 공유기를 썼기 때문에 할당되는 값을 써주면 됩니다.
      공유기 설정에서 아이피를 임의로 지정해 줄 수도 있고요.

  15. 최성식 2012/05/21 21:20  댓글주소  수정/삭제  댓글쓰기

    좋은 자료 공유해주셔서 감사드립니다. 왕초보로써 많이 배우게 되었습니다. 그런데 직접 뭔가 해볼려구하니 LED 라이브러리가 없어서 해볼수가 없네요. LED 라이브러리 좀 부탁드려도 되겠습니까?? conan414@naver.com

  16. NiceGuy 2012/05/31 13:02  댓글주소  수정/삭제  댓글쓰기

    좋은 자료 정말 감사합니다..^^
    저도 LED 라이브러리좀 구할수 있을까요?
    부탁드리겠습니다...^^

  17. NiceGuy 2012/05/31 13:03  댓글주소  수정/삭제  댓글쓰기

    참.. 제 메일주소는
    turkey03117@nate.com
    입니다..^^

  18. siske 2012/06/03 15:13  댓글주소  수정/삭제  댓글쓰기

    LED 라이브러리가 없어서 실행이 안되나보네요 저도 메일로 부탁드립니다~~~~
    rubi6735@naver.com입니다~~

  19. siske 2012/06/03 18:08  댓글주소  수정/삭제  댓글쓰기

    Led l(ledPin,HIGH,LOW); 여기서 에러가 떳는데 어떻게 고쳐야 할지 혹시 알고 계신가요??

  20. siske 2012/06/05 13:36  댓글주소  수정/삭제  댓글쓰기

    libraries\Led\Led.cpp:2:22: error
    이런식으로 led 라이브러리만 에러가 쭈욱나네요

    • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2012/06/07 23:55  댓글주소  수정/삭제

      답이 늦었네요.
      http://here4you.tistory.com/19
      이 문제가 아닐까 합니다. WProgram.h를 Arduino.h로 바꿔보세요.

  21. 김보경 2012/06/14 15:49  댓글주소  수정/삭제  댓글쓰기

    LED 라이브러리가 없어서 실행이 안되요 메일로 좀 보내주시면 감사하겠습니다.
    l0o7v2e3@nate.com
    최대한 빨리좀 부탁드려요ㅠㅠ

  22. wisdomplus 2012/06/29 16:23  댓글주소  수정/삭제  댓글쓰기

    LED 라이브러좀 멩ㄹ리보내주시면 안되는지요..ㅠㅠ
    제메일은 blue357gogogo@hanmail.net 입니다
    아... 그리고 궁금한게 저는 버팔로 공유기를 쓰고 있는데
    아두이노에서 mac, ip gateway 주소를 어떤걸 서야하는지 잘 모르겟네요
    공유기에서 할당받은 아이피와 멕주소와 포트번호를 입력하는것까지는 알겠는데...ㅠㅠ
    ㅠㅠ

    • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2012/06/30 15:58  댓글주소  수정/삭제

      전달해드렸습니다.
      맥주소는 이더넷 모듈에 적혀있을 겁니다.
      잘 기억이 안나네요.
      ip는 할당받은 값을 써야 하는데, 아마 공유기 설정 부분에서 찾아보면 있을겁니다.
      게이트 웨이와 서브넷 마스크도 공유기 설정쪽에 보면 있는데, 도스 창에서 ipconfig라고 쳐도 확인할 수 있습니다.

  23. jadu9000142 2012/07/13 23:10  댓글주소  수정/삭제  댓글쓰기

    좋은 자료 감사합니다 ~
    혹시 저도 LED 라이브러리좀 보내 주실수 있나요? jadu9000142@nate.com

  24. 12313 2012/07/21 18:52  댓글주소  수정/삭제  댓글쓰기

    좋은 자료 감사합니다.
    led라이브러리 보내주실수 있나요? jkwang77@gmail.com 입니다.

  25. PAUL 2013/04/19 19:41  댓글주소  수정/삭제  댓글쓰기

    늦었지만 LED라이브러리 부탁드립니다.

  26. PAUL 2013/04/19 19:42  댓글주소  수정/삭제  댓글쓰기

    LED라이브러리 부탁드립니다.
    kungh@naver.com
    감사합니다.

  27. 남영진 2013/04/22 16:53  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~~ 자료 잘 봤습니다.
    LED 라이브러리 자료 부탁드립니다.
    nam0692@naver.com
    감사합니다

  28. 고상욱 2013/05/02 17:05  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 좋은 정보 공유 감사드립니다. 혹시 저도 led 라이브러리를 받을수 있을까요 ??
    꼭좀 부탁드리겠습니다. sangwook7942@naver.com 입니다.

  29. creative 2013/05/09 16:19  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 좋은 정보 감사드립니다. 괜찮으시면 라이브러리 좀 보내주실수 있나요? creative0425@nate.com 입니다.
    감사합니다

  30. 여리여리 2013/05/17 16:48  댓글주소  수정/삭제  댓글쓰기

    인터넷이 사용가능한 곳 어디에서든 Led를 끄고 켜고 싶은데요 ㅜㅜ
    처음으로 아두이노를 공부해보는 거라 많이 어렵네용...
    아두이노와 이더넷쉴드를 구입해서 제작하려합니당..
    위글 링크된곳글을 읽었는데요 웹서버를 제작 및 구축하고 공유기 설정을 한다면
    어디서든 엘이디를 끄고 켤 수 있는건가요>???
    아두이노와 이더넷모듈이 아직 도착하지않았는데 그전에 정보를 많이 알고싶어서요 ㅜㅜ
    혹시 주실수 있는 정보 있으면 주시면 감사하겠습니다 ㅜㅠ
    메일주소는 calm6777@naver.com 입니당

    • Favicon of http://blog.kimchulho.com BlogIcon 김철호 2013/05/17 20:29  댓글주소  수정/삭제

      저도 배운지가 오래되서 알려드릴 수 있는게 없습니다.;;
      여튼 종종 물어보시는 분들이 계셔서 이번에 아두이노 스타터 키트하고 이더넷 모듈을 구입했습니다. 취미로 소소한 것들을 만들 수 있을것 같아서요. 다음주 초에 올것 같네요.
      오면 같이 해봐요!

  31. 열혈학생 2013/05/19 17:31  댓글주소  수정/삭제  댓글쓰기

    이더넷으로 모터제어를 하고자 하는 학생입니다.
    작성자님의 글을 보니 Delay 없이 Led가 on/off 되는 모습을 보았는데 이와 같이 구현해보고 싶은데요.
    아두이노 쿡북에 나온 led on/off제어는 딜레이가 생겨서 Led.h 파일을 보내주실수 있으신가요?ㅜㅜ 부탁드리겠습니다.
    메일주소는 buglow@naver.com 입니다.
    좋은 내용 및 참고자료 보고 갑니다. 감사합니다!

  32. 학생 2013/05/20 03:09  댓글주소  수정/삭제  댓글쓰기

    led 제어를 배우고 있습니다
    라이브러리 부탁드립니다
    blackree@naver.com
    감사합니다!

  33. 학생입니다.. 2013/05/20 17:02  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 아두이노로 웹서버를 만들어 제어하는 방법을 알아보다가 블로그에 방문하게 되었습니다.
    읽어보니 LED 라이브러리가 필요하다고 하는데 zxcvbnmplm@naver.com으로 보내주시면 참고해서 공부하겠습니다.

  34. 학생입니다 ㅜㅜ 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으로 접속해서 아두이노 값을 읽을 수 있을 겁니다. 이해되셨나요?

  35. Favicon of http://muis01@naver.com BlogIcon 학생입니다ㅜ 2013/06/03 22:37  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 아두이노를 이용하여 서보모터를 웹페이지에서 제어하는 방법을 알아보다가 블로그에 방문하게 되었습니다.
    이 예제를 돌려보면 무엇인가 알거같아서 부탁드립니다 LED라이브러리를 muis01@naver.com으로 보내주시면 많은 도움이 될것같습니다.

  36. 히야 2013/06/07 20:58  댓글주소  수정/삭제  댓글쓰기

    소스 복사해서 아두이노 스케치에 붙여넣기 했는데 오류나네요;;; Ip주소랑 게이트웨이주소 다 수정했는데도...아두이노 스케치 소스좀 부탁드립니다..fly_he@naver.com

  37. 학생 2013/06/09 20:09  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 철호님. 블로그 잘읽어봤습니다^^
    현재 아두이노, 와이파이쉴드를 이용하여 스마트폰으로 led제어나 서보모터를 제어해보려고 합니다...
    아두이노 소스 좀 부탁드립니다...한 학생을 살려주세요 ㅜ_ㅜ
    부탁드립니다...blackree@naver.com 입니다!



 

티스토리 툴바