반응형

【 아두이노프로젝업뎃#1 ESP8266 esp-01 스마트폰으로 LED 컨트롤 하기 업뎃 자료

 

먼저 아래 기존 게시글을 참고하세요. 

【 아두이노모듈#28】 ESP8266 esp-01 활용하기#4 : 스마트폰으로 LED 컨트롤 하기(with Arduino & cp2102 )

 

이번 글은 기존 프로젝트에서 LED를 완전히 개별로 제어가능하도록 코드를 일부 수정하여 게시하오니 참고하세요. 

 

 

[ 관련 영상 보기 ]

 

 

수정된 코드 

/*  ### 스마트폰 WiFi로 esp8266모듈회로의 LED 켜고·끄기 ### 
 *  1. LED를 연결한 esp8266 회로를 서버로 동작시킨다. 
 *  2. 앱인벤터를 이용하여 접속앱을 직접 제작 한다.
 *  3. 접속앱에서 esp8266 서버 주소를 입력하고 접속한다. 
 *    (접속 IP 주소는 코드 업로드가 완료되면 시리얼모니터(115200bps)를 통해 확인 가능함)
 *  4. 앱화면의 버튼을 눌러 LED를 On·Off 할 수 있다.(GPIO0(LED1), GPIO2(LED2))
 *  5. 아두이노 우노를 제거하고 미니 전원을 연결하여 소형화 된 무선 WiFi 모듈을 구성해본다.  
 *    http://server_ip/gpio0/0 이면 GPIO0(LED1) 를 LOW로 설정,
 *    http://server_ip/gpio0/1 이면 GPIO0(LED1) 를 HIGH로 설정,
 *    http://server_ip/gpio2/0 이면 GPIO2(LED2) 를 LOW로 설정,
 *    http://server_ip/gpio2/1 이면 GPIO2(LED2) 를 HIGH로 설정,
 *    
 *  주의 : 반드시 동일한 내부 네트웍(하나의 공유기로 연결된)에서 동작 시켜야 접속이 이루어 집니다. 
 *  
 *  제작과정의 좀더 상세한 내용과 설명 영상은 http://rasino.tistory.com/300 참조 하세요 
 */

#include <ESP8266WiFi.h>
#define GPIO0 0
#define GPIO2 2
int GP0val=0;
int GP2val=0;

const char* ssid = "XXXXXXX";         //  접속가능한 공유기(AP) WiFi의 ID를 입력하세요
const char* password = "xxxxxxx";    // 공유기(AP) WiFi의 접속 패스워드를 입력하세요
// 서버 인스턴스를 생성합니다 (80번 포트 지정)
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);
  // GPIO 포트들을 초기화 합니다
  pinMode(GPIO0, OUTPUT);
  digitalWrite(GPIO0, 0);
  pinMode(GPIO2, OUTPUT);
  digitalWrite(GPIO2, 0);
  // Serial 통신으로 WiFi 네트웍에 연결합니다.
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);  // 네트웍에 설정된 id와 패스워드로 접속을 합니다.
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // 서버 시작
  server.begin();
  Serial.println("Server started");

  // 서버의(esp8266) IP 주소를 출력합니다 
  Serial.println(WiFi.localIP());
}

void loop() {
  
  // 클라이언트가 접속하는지 체크 합니다
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // 클라이언트가 데이터를 보낼 때까지 기다립니다.
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // 요청 첫 출을 읽어 옵니다.
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // 요청 사항과 비교 후 GPIO들에 대해 셋팅 해줍니다.
  
  if (req.indexOf("/gpio0/0") != -1){
    GP0val = 0;
    digitalWrite(GPIO0, GP0val);
  }
  else if (req.indexOf("/gpio0/1") != -1) {
    GP0val = 1;
    digitalWrite(GPIO0, GP0val);
  }
  else if (req.indexOf("/gpio2/0") != -1) {
    GP2val = 0;
    digitalWrite(GPIO2, GP2val);  
  }
  else if (req.indexOf("/gpio2/1") != -1) {
    GP2val = 1;
    digitalWrite(GPIO2, GP2val);  
  }
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }

  client.flush();
  // 응답을 준비합니다.
  String s1 = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n \r\n\r\nGPIO 0 is now ";
  String s2 = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n \r\n\r\nGPIO 2 is now ";
  s1 += (GP0val)?"HIGH":"LOW";   //GP0val 값에 따라 HIGH 또는 LOW 응답합니다.
  s1 += "\n";
  s2 += (GP2val)?"HIGH":"LOW";   //GP2val 값에 따라 HIGH 또는 LOW 응답합니다.
  s2 += "\n";

  // 클라이언트로 응답을 보냅니다
  client.print(s1);
  delay(1);
  client.print(s2);
  delay(1);
  Serial.println("Client disonnected");  // 응답완료 후에는 클라이언트를 닫습니다.
}

 

[코드 다운로드]

WiFiWebLED3.zip
0.00MB

 

반응형