2016-05-03 14 views
0
#include <SoftwareSerial.h> 
#define DEBUG true 
SoftwareSerial esp8266(8,9);       
void setup() 
{ 
    Serial.begin(9600); 
    esp8266.begin(9600); 
    pinMode(11,OUTPUT); 
    digitalWrite(11,LOW); 

    pinMode(12,OUTPUT); 
    digitalWrite(12,LOW); 

    pinMode(13,OUTPUT); 
    digitalWrite(13,LOW); 

    pinMode(10,OUTPUT); 
    digitalWrite(10,LOW); 

    sendCommand("AT+RST\r\n",2000,DEBUG); // reset module 
    sendCommand("AT+CWMODE=1\r\n",1000,DEBUG); // configure as access point 
    sendCommand("AT+CWJAP=\"SSID\",\"PASSWD\"\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); 
    int connectionId = esp8266.read()-48; // subtract 48 because the read() function returns 
              // the ASCII decimal value and 0 (the first decimal number) starts at 48 
    esp8266.find("pin="); 
    int pinNumber = (esp8266.read()-48); // get first number i.e. if the pin 13 then the 1st number is 1 
    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 
    } 

    if((pinNumber==12)&&(pinNumber!=11)) 
    {digitalWrite(12, HIGH); 
    digitalWrite(11,LOW);} 
    if((pinNumber==11)&&(pinNumber!=12)) 
    {digitalWrite(12, LOW); 
    digitalWrite(11,HIGH);}  
    // 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"; 
    } 

    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; 
} 

Hallo, ich habe diesen Code die esp mit dem Internet verbindet, so dass ich einschalten oder ausschalten von einem mobilen Appl führte ich will, es ändern. Ich möchte das esp8266 01 ein Access Point sein .. Ich möchte nicht das Internet verwenden Ich möchte das Telefon direkt an die esp8266 anschließen Welche Änderungen muss ich tun und wie kann ich esp8266 als Access Pointwie kann ich meinen Esp8266 als Zugangspunkt ändern

konfigurieren

Antwort

0

Wenn Sie die ESP initialisiert, konfiguriert Sie es in Station Mode

sendCommand("AT+CWMODE=1\r\n",1000,DEBUG); 
sendCommand("AT+CWJAP=\"SSID\",\"PASSWD\"\r\n",3000,DEBUG); 

um im AP-Modus zu konfigurieren, sollten Sie diese ersetzen mit:

sendCommand("AT+CWMODE=2\r\n",1000,DEBUG); 

Siehe CWMODE documentation

Modus:
1 bedeutet Stationsmodus
2 bedeutet AP-Modus
3 bedeutet AP + Stationsmodus

+0

was sonst muss ich –

+0

ändern, das genug sein sollte in der Lage sein, um den Zugriff auf das ESP durch seine Standard-IP '192.168.4.1' – mpromonet

+0

thnx es funktioniert :) –

Verwandte Themen