ESP8266-12E WIFI 보드 테스트용 소스 코드

  • 하기 소스 코드는 WIFI 보드를 AP로 동작하게 세팅하고, 휴대폰을 통해 미리 정해진 통신을 수행하는 코드이다.

소스코드

#include <SoftwareSerial.h>
 
#define DEBUG true
 
int ch_pd = 9; // en
 
SoftwareSerial esp8266(2, 3);
 
void setup() {
  pinMode(ch_pd, OUTPUT);
  digitalWrite(ch_pd, LOW);
  digitalWrite(7,HIGH);
  delay(500);
  digitalWrite(ch_pd, HIGH);
 
  Serial.begin(9600);
  esp8266.begin(9600); // your esp's baud rate might be different
 
  sendCommand("AT+RST\r\n",2000,DEBUG); // reset module
  sendCommand("AT+CWMODE=2\r\n",1000,DEBUG); // configure as access point
  sendCommand("AT+CWSAP=\"GTECwifi\",\"1234567890\",1,0\r\n",3000,DEBUG);
  delay(10000);
  sendCommand("AT+CIFSR\r\n",1000,DEBUG); // get ip address
  sendCommand("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections
  sendCommand("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // turn on server on port 80
 
  Serial.println("Server Ready");
}
 
void loop()
{
  if(esp8266.available()) // check if the esp is sending a message 
  {
    if(esp8266.find("+IPD,"))
    {
      delay(1000); // wait for the serial buffer to fill up (read all the serial data)
      // get the connection id so that we can then disconnect
      int connectionId =esp8266.read(); // subtract 48 because the read() function returns 
      // the ASCII decimal value and 0 (the first decimal number) starts at 48
 
      esp8266.find("pin="); // advance cursor to "pin="
 
      int pinNumber = (esp8266.read()-48); // get first number i.e. if the pin 13 then the 1st number is 1
      Serial.println("\r\npinNumber1");
      Serial.print(pinNumber);
 
      int secondNumber = (esp8266.read()-48);
      if(secondNumber>=0 && secondNumber<=9)
      {
        pinNumber*=10;
        pinNumber +=secondNumber; // get second number, i.e. if the pin number is 13 then the 2nd number is 3, then add to the first number
      }
      Serial.println("\r\npinNumber2");
      Serial.print(secondNumber);
      Serial.println("\r\n====");
 
      esp8266.find("sw="); // advance cursor to "pin="
 
      int sw = (esp8266.read()-48); // get first number i.e. if the pin 13 then the 1st number is 1
 
      if (sw==1) 
      {
        if (pinNumber==10){
          digitalWrite(pinNumber,LOW);
        }else{
          digitalWrite(pinNumber,HIGH);  
        }  
      }else if(sw==0){
        if (pinNumber==10){
          digitalWrite(pinNumber,HIGH);
        }else{
          digitalWrite(pinNumber,LOW);  
        }
      }
 
      Serial.println("\r\nsw");
      Serial.print(sw);
      Serial.println("\r\n====");     
      //digitalWrite(pinNumber, !digitalRead(pinNumber)); // toggle pin    
 
      // build string that is send back to device that is requesting pin toggle
      String content;
      content = "Pin ";
      content += pinNumber;
      content += " is ";
 
      if(digitalRead(pinNumber))
      {
        content += "ON";
      }
      else
      {
        content += "OFF";
      }
      char temp1[10];
      dtostrf(analogRead(A0),1,2,temp1);  
      content+="\r\n";   
      content+=temp1;
 
      sendHTTPResponse(connectionId,content);
 
      // make close command
      String closeCommand = "AT+CIPCLOSE="; 
      closeCommand+=connectionId; // append connection id
      closeCommand+="\r\n";
 
      sendCommand(closeCommand,1000,DEBUG); // close connection
    }
  }
}
 
/*
* Name: sendData
* Description: Function used to send data to ESP8266.
* Params: command - the data/command to send; timeout - the time to wait for a response; debug - print to Serial window?(true = yes, false = no)
* Returns: The response from the esp8266 (if there is a reponse)
*/
String sendData(String command, const int timeout, boolean debug)
{
  String response = "";
 
  int dataSize = command.length();
  char data[dataSize];
  command.toCharArray(data,dataSize);
 
  esp8266.write(data,dataSize); // send the read character to the esp8266
  if(debug)
  {
    Serial.println("\r\n====== HTTP Response From Arduino ======");
    Serial.write(data,dataSize);
    Serial.println("\r\n========================================");
  }
 
  long int time = millis();
 
  while( (time+timeout) > millis())
  {
    while(esp8266.available())
    {
 
      // The esp has data so display its output to the serial window 
      char c = esp8266.read(); // read the next character.
      response+=c;
    }  
  }
 
  if(debug)
  {
    Serial.print(response);
  }
 
  return response;
}
 
/*
* Name: sendHTTPResponse
* Description: Function that sends HTTP 200, HTML UTF-8 response
*/
void sendHTTPResponse(int connectionId, String content)
{
 
  // build HTTP response
  String httpResponse;
  String httpHeader;
  // HTTP Header
  httpHeader = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n"; 
  httpHeader += "Content-Length: ";
  httpHeader += content.length();
  httpHeader += "\r\n";
  httpHeader +="Connection: close\r\n\r\n";
  httpResponse = httpHeader + content + " "; // There is a bug in this code: the last character of "content" is not sent, I cheated by adding this extra space
  sendCIPData(connectionId,httpResponse);
}
 
/*
* Name: sendCIPDATA
* Description: sends a CIPSEND=<connectionId>,<data> command
*
*/
void sendCIPData(int connectionId, String data)
{
  String cipSend = "AT+CIPSEND=";
  cipSend += connectionId;
  cipSend += ",";
  cipSend +=data.length();
  cipSend +="\r\n";
  sendCommand(cipSend,1000,DEBUG);
  sendData(data,1000,DEBUG);
}
 
/*
* Name: sendCommand
* Description: Function used to send data to ESP8266.
* Params: command - the data/command to send; timeout - the time to wait for a response; debug - print to Serial window?(true = yes, false = no)
* Returns: The response from the esp8266 (if there is a reponse)
*/
String sendCommand(String command, const int timeout, boolean debug)
{
  String response = "";
 
  esp8266.print(command); // send the read character to the esp8266
 
  long int time = millis();
 
  while( (time+timeout) > millis())
  {
    while(esp8266.available())
    {
 
      // The esp has data so display its output to the serial window 
      char c = esp8266.read(); // read the next character.
      response+=c;
    }  
  }
 
  if(debug)
  {
    Serial.print(response);
  }
 
  return response;
}

 
arduino/esp8266_12e_test_source.txt · 마지막 수정: 2016/09/28 00:08 작성자 grinbee
 
이 위키의 내용은 다음의 라이센스에 따릅니다 :CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki