#include <AFMotor.h>
#include <EEPROM.h>
#include <Servo.h>
HardwareSerial & ESPport = Serial;
int echoPin = 10;
int trigPin = 2;
AF_DCMotor motor(1);
const int ledPin = 13;
const int ledPin12 = 12;
const int ledPin9 = 9;
const int ledPin3 = 3;
const int ledPin5 = 5;
const int ledPin6 = 6;
int ledState = HIGH;
int ledStatett = HIGH;
int ledState12 = HIGH;
int ledState9 = HIGH;
int ledState3 = HIGH;
int ledState5 = HIGH;
int ledState6 = HIGH;
#define BUFFER_SIZE 64
char buffer[BUFFER_SIZE];
String vklotkl;
String vklotkl12;
String vklotkl9;
String vklotk22;
int temp[10]; // переменная, которой будет присваиваться значения например с датчика температуры
int duration,cm,j=0;
void setup()
{
motor.setSpeed(200);
motor.run(RELEASE);
pinMode(ledPin, OUTPUT);
pinMode(ledPin12, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(ledPin3, OUTPUT);
ESPport.begin(115200); // ESP8266
clearSerialBuffer();
GetResponse("AT+RST",3400); // перезагрузка ESP
Serial.println(GetResponse("AT+CIOWRITE=0,1",3400)); //
GetResponse("AT+CWMODE=2",300); // режим клиента
GetResponse("AT+RST",3400); // перезагрузка ESP
GetResponse("AT+CSYSWDTENABLE",300); // сторож
GetResponse("AT+CWSAP=\"seto44ka\",\"12345678\",9,4",7000); //создаем сеть
GetResponse("AT+CIPMODE=0",300); // сквозной режим передачи данных.
GetResponse("AT+CIPMUX=1",300); // multiple connection.
GetResponse("AT+CIPSERVER=1,88", 300); // запускаем ТСР-сервер на 88-ом порту
GetResponse("AT+CIPSTO=3", 300); // таймаут сервера 3 сек
GetResponse("AT+CIFSR", 300); // узнаём адрес
digitalWrite(ledPin,ledState);
digitalWrite(ledPin12,ledState12);
digitalWrite(ledPin9,ledState9);
analogWrite(ledPin3,ledState3);
analogWrite(ledPin5,ledState5);
analogWrite(ledPin6,ledState6);
}
///////////////////основной цикл, принимает запрос от клиента///////////////////
void loop()
{
// int duration, cm;
/*
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
cm = duration / 58;
// temp=cm;*/
j++;
int ch_id, packet_len;
char *pb;
ESPport.readBytesUntil('\n', buffer, BUFFER_SIZE);
if(strncmp(buffer, "+IPD,", 5)==0)
{
sscanf(buffer+5, "%d,%d", &ch_id, &packet_len);
otvet_klienty(ch_id);
if (packet_len > 0)
{
pb = buffer+5;
while(*pb!=':') pb++;
pb++;
switch (pb[5])
{
case 'a':
{ clearSerialBuffer();
if(ledState == LOW)
{
ledState = HIGH;
vklotkl = "VKL";
}
else
{
ledState = LOW;
vklotkl = "OTKL";
}
digitalWrite(ledPin, ledState);
break;
}
case 'z'://livo
{ clearSerialBuffer();
motor.setSpeed(255);
motor.run(FORWARD);
break;
}
case 'd': //prawo
{ clearSerialBuffer();
motor.setSpeed(255);
motor.run(FORWARD);
break;
}
case 'w'://pered
{ clearSerialBuffer();
motor.setSpeed(255);
motor.run(FORWARD);
break;
}
case 's': //nazat
{ clearSerialBuffer();
motor.setSpeed(255);
motor.run(BACKWARD);
break;
}
case 'q': //stop
{ clearSerialBuffer();
motor.setSpeed(1);
motor.run(RELEASE);
break;
}
case 'b': //zbros
{ clearSerialBuffer();
motor.run(RELEASE);
break;
}
default:
{ otvet_klienty(ch_id);}
// otvet_klienty(ch_id);
}
// otvet_klienty(ch_id);
}
clearBuffer();
}
}
//////////////////////формирование ответа клиенту////////////////////
void otvet_klienty(int ch_id)
{
String Header;
String data;
for (int k=0;k<10;k++)
{ //cm=eho();
cm=j;
data+=String(cm)+", " ; }
Header = "HTTP/1.1 200 OK\r\n";
Header += "Content-Type: text/html\r\n";
Header += "Connection: close\r\n";
String Content;
Content = "<html><body>";
/*Content += "<form action='a' method='GET'>D13 <input type='submit' value='VKL/OTKL'> " + vklotkl + "</form>";
Content += "<form action='b' method='GET'>D12 <input type='submit' value='VKL/OTKL'> " + vklotkl12 + "</form>";
Content += "<form action='c' method='GET'>D9 <input type='submit' value='VKL/OTKL'> " + vklotkl9 + "</form>";
Content += "<form action='w' method='GET'>WW </form>";
Content += "<form action='s' method='GET'>SS </form>";
Content += "<form action='q' method='GET'>QQ </form>"; */
// Content += "<br />Temp: " + String(cm) + " C"; // передача переменной cm
Content += "<br />Temp: " + data + " C";
Content += "</body></html>";
Header += "Content-Length: ";
Header += (int)(Content.length());
Header += "\r\n\r\n";
ESPport.print("AT+CIPSEND="); // ответ клиенту
ESPport.print(ch_id);
ESPport.print(",");
ESPport.println(Header.length()+Content.length());
delay(20);
if(ESPport.find(">"))
{
ESPport.print(Header);
ESPport.print(Content);
// delay(200);
}
}
/////////////////////отправка АТ-команд/////////////////////
String GetResponse(String AT_Command, int wait)
{
String tmpData;
ESPport.println(AT_Command);
delay(wait);
while (ESPport.available() >0 )
{
char c = ESPport.read();
tmpData += c;
if ( tmpData.indexOf(AT_Command) > -1 )
tmpData = "";
else
tmpData.trim();
}
return tmpData;
}
//////////////////////очистка ESPport////////////////////
void clearSerialBuffer(void)
{
while ( ESPport.available() > 0 )
{
ESPport.read();
}
}
////////////////////очистка буфера////////////////////////
void clearBuffer(void) {
for (int i =0;i<BUFFER_SIZE;i++ )
{
buffer=0;
}
}
////////////////////подключение к wifi/////////////////////
boolean connectWiFi(String NetworkSSID,String NetworkPASS)
{
String cmd = "AT+CWJAP=\"";
cmd += NetworkSSID;
cmd += "\",\"";
cmd += NetworkPASS;
cmd += "\"";
ESPport.println(cmd);
delay(6500);
}
int eho(void){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
return duration / 58;
}