재료

  • 점프 와이어 9개
  • USB 케이블 1개
  • LED 1개
  • 브래드 보드 1개
  • AC 어댑터 1개
  • 저항 1개
  • 아두이노 우노 1개
  • esp8266 1개

첨부파일

    ESP8266을 사용하기 위한 펌웨어 업데이트도 마쳤고, Wi-Fi 공유기와도 연결이 되었으니 이제는 무선으로 LED를 깜빡이게 하는 작은 프로젝트에 도전해보도록 합시다. 제가 이번 프로젝트를 진행하기 이전에 <손에 잡히는 아두이노>라는 아두이노 기초 프로젝트를 진행한 적이 있어요. 아두이노와 연결하여 사용할 수 있는 LED, 부저, LCD, 서보 모터 등과 조도, 온도, 화염, 초음파, 기울기 등의 센서, 그리고 적외선, 지그비, 블루투스와 같은 통신에 대해서 다뤘었는데, 거기에서도 LED를 다루는 프로젝트는 가장 간단하고 쉽게 따라할 수 있었던 프로젝트였습니다. 이번에도 가장 간단하면서도 자주 쓰이는 LED를 먼저 다뤄보도록 하겠습니다.   




STEP1. 준비물

아두이노 보드, USB 케이블, 브래드 보드, AC 어댑터, 저항, LED, 점프와이어 9개


이건 항상 준비해주셔야 하는 기본 준비물입니다.


이것은 이번 프로젝트를 위해서 추가로 준비해주셔야 하는 준비물입니다.


STEP2. 회로도

    아래와 같이 회로를 구성해주세요. 지난 번에 공유기와 연결하였던 회로도에서 13번 핀에 LED를 추가해준 것입니다.




STEP3. 코드

우선 아래의 코드를 아두이노에 업로드해주세요.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <SoftwareSerial.h>
#define DEBUG true
 
SoftwareSerial esp8266(2,3); //RX는 2번 핀, TX는 3번 핀
const int LED=13;
 
void setup() {
  // put your setup code here, to run once:
   Serial.begin(9600);
   esp8266.begin(9600); //esp의 보드레이트
 
   pinMode(LED, OUTPUT); //LED가 꽂힌 핀을 output으로 설정
   digitalWrite(LED, LOW); //LED를 끈 상태로 초기화
 
  /*AT Command 이용*/
  sendData("AT+RST\r\n", 2000, DEBUG); //reset module
  sendData("AT+CWMODE=3\r\n", 1000, DEBUG); //dual mode로 설정
  sendData("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n", 5000, DEBUG); //사용할 공유기 설정
  sendData("AT+CIPMUX=1\r\n", 1000, DEBUG); //multiple connections 설정
  sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); //포트 번호를 80번으로 설정
}
 
void loop() {
  // put your main code here, to run repeatedly:
  if(esp8266.available()){ //esp8266에 웹에서 메시지가 왔는지 파악
    if(esp8266.find("+IPD,")){ //data를 받아옴
      delay(1000); //시리얼 버퍼에서 보내져온 데이터가 다 찰 때까지 대기
      int connectionID=esp8266.read()-48; //connection ID를 알아내고 아스키코드값이므로 48을 빼줌
      esp8266.find("pin=");
      int pinNumber=(esp8266.read()-48)*10; //get the first number
      pinNumber+=(esp8266.read()-48); //get the second number
      digitalWrite(pinNumber, !digitalRead(pinNumber)); //LED toggle
      /*연결을 끊음*/
      String closeCommand="AT+CIPCLOSE=";
      closeCommand+=connectionID;
      closeCommand+="\r\n";
      sendData(closeCommand, 1000, DEBUG);
    }
  }
}
 
/*ESP8266의 정보를 알아내고 설정하기 위한 함수 선언*/
String sendData(String command, const int timeout, boolean debug){
  String response = "";
  esp8266.print(command); //command를 ESP8266에 보냄
  long int time=millis();
  
  while((time+timeout)>millis()){
    while(esp8266.available()){
      /*esp가 가진 데이터를 시리얼 모니터에 출력하기 위함*/
      char c=esp8266.read(); //다음 문자를 읽어옴
      response+=c;
    }
  }
  if(debug){
    Serial.print(response);
  }
 
  return response;
}


여기서 18번째 라인은 본인이 사용하게 될 SSID와 Password를 입력해주시면 됩니다. 만약 업로드가 안된다면 ESP8266의 전원을 뺀 후에 업로드해보세요. ESP8266이 생각보다 전력을 많이 소모해서 전력 부족으로 업로드가 되지 않을 수도 있습니다.

    그런 후에 아래의 html 파일을 만들어 주시면 됩니다. 아래의 코드를 메모장에 복사해서 붙여넣고 파일 저장을 "test.html"과 같이 html 확장자로 저장해주시면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 </head>
 <body>
 </br></br>
 <center>
 <br><font size=4 face="맑은 고딕" color="GRAY"> ESP8266 Project 1</br>
 <font size=6 face="맑은고딕" color="LIGHTBLUE"> ★ ESP8266로 LED 깜빡이기 ★
 </font></center></br></br>
 <center><button id="13" class="led" style="height:100; width:130;"><font size=4>LED PIN 13</font></button></center>
 
 <script src="jquery.min.js"></script>
 <script type="text/javascript">
  $(document).ready(function(){
   $(".led").click(function(){
    var p = $(this).attr('id'); // get id value (i.e. pin13, pin12, or pin11)
    // send HTTP GET request to the IP address with the parameter "pin" and value "p", then execute the function
    $.get("http://192.168.0.111:80/", {pin:p}); // execute get request
   });
  });
 </script>
 </body>
</html>
 


또한 위의 코드에서 18번째 라인은 IP주소로 수정해주시면 됩니다. 저 같은 경우에는 IP 주소가 192.168.0.111 인데요, IP주소는 AP Command를 이용해서 알아 내신 후에 수정하시면 됩니다. IP 주소를 알아내는 방법은 이전 글에 적혀있는데, AT+CIFSR 명령어를 사용하시면 됩니다. HTML 파일을 만드셨으면 첨부파일을 다운로드 받아서 같은 폴더 안에 넣어주세요. 그리고 나서 만든 HTML 파일을 클릭하시면 아래와 같은 화면이 뜨는 것을 확인할 수 있습니다.




STEP4. 결과 확인

    계속 노트북과 USB로 연결해놓는 것보다는 AC 어댑터를 이용해서 전원을 연결해주는 것이 와이파이로 통신하는 것을 보다 정확하게 확인시켜줄 것 같아서 저는 USB 연결을 제거하고 전원을 연결해주었습니다.


그런 후에 웹페이지에서 LED PIN 13 버튼을 눌러보았더니 제가 버튼을 토글할 때마다 전원이 켜지고 꺼지는 것을 확인할 수 있었습니다.



    다음 프로젝트에서는 LED를 지금의 회로에 몇 개 더 연결하여 좀 더 복잡한 프로그래밍을 해보도록 하겠습니다. 현재 회로도에서 LED 몇 개가 추가될 뿐이니 지금 상태 그대로 다음 프로젝트에서 보도록 해요:-)

댓글 0

MADE BY

김민정

사물인터넷, 아두이노