• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Сервер-Телефон

sER

New member
Здравствуйте мастера. Прочитал ужасно много информации, аж голова идёт кругом.

AT+CWMODE=2 //AP
AT+RST //Перезапуск модуля
AT+CWSAP="Test","123456",9,4 //Установить параметры для режима AP
//AT+CIFSR //Отобразить IP адрес, который получили от AP
//AT+CWLIF //Отобразить IP адреса подключенных клиентов
Это я выполнил один раз.

AT+CIPMODE=0 //Установить сквозной режим (обычный режим)
AT+CIPMUX=1 //Режим множественных подключений
AT+CIPSERVER=1,88 //Запустить сервер
AT+CIPSTO=5 //Установить таймаут сервера

Далее мне необходимо организовать следующее
При получении сервером
+IPD,0,467;GET /?id1=true&id2=false HTTP/1.1
Если id1=true То
AT+CIPSEND=0,6
>Horoho


Код:
void loop() {
if ( espSerial.available() ){
Serial.write(espSerial.read() );
char id1 = strstr(espSerial.available(),"id1=") + 4;
if (id1="true"){
AT+CIPSEND=0,6
>Horoho
}

if ( Serial.available() )
 espSerial.write( Serial.read() );
}
}
Помогите с кодом. И подскажите, правильность AT команд
 

sER

New member
Код:
#include <SoftwareSerial.h>
// ESP TX - 10 (Arduino SoftwareSerial RX)
// ESP RX - 11 (Arduino SoftwareSerial TX)
SoftwareSerial espSerial(10, 11);

#define BUFFER_SIZE 128
char buffer[BUFFER_SIZE];

void setup() {
  espSerial.begin(115200);
  Serial.begin(115200);
}
/*void loop() {
  if ( espSerial.available() )
    Serial.write( espSerial.read() );
  if ( Serial.available() )
    espSerial.write( Serial.read() );
}*/
//AT+RESTORE
//AT+CWMODE=2
//AT+RST
//AT+CWSAP="ESP756190","21030826",1,4
//AT+CIFSR
//AT+CWLIF

//AT+CIPMODE=0
//AT+CIPMUX=1
//AT+CIPSERVER=1,88
//AT+CIPSTO=5
//


void loop()
{
/* if ( espSerial.available() )
    Serial.write( espSerial.read() );
  if ( Serial.available() )
    espSerial.write( Serial.read() );*/

 
int ch_id, packet_len;
char *pb; 
espSerial.readBytesUntil('\n', buffer, BUFFER_SIZE);
  if(strncmp(buffer, "+IPD,", 5)==0)
  {
Serial.println(buffer);
pb = buffer+5;
      while(*pb!=':') pb++;
      pb++;
   if((strncmp(pb, "GET /?id=true", 13) == 0) )
       {
Serial.println("Horoho");
  }
      if((strncmp(pb, "GET /?id=false", 14) == 0) )
       {
Serial.println("Ploho");
  }
  
    }
  }
Без имени-2.jpg
Почему так много мусора?
 

sER

New member
Код:
#include <SoftwareSerial.h>
SoftwareSerial espSerial(10, 11);
#define BUFFER_SIZE 256
char buffer[BUFFER_SIZE];

void setup() {
  espSerial.begin(115200);
  Serial.begin(9600);
espSerial.println("AT+RST");
Serial.println("1");
delay(2000);
espSerial.println("AT+CWMODE=1");
Serial.println("2");
delay(1000);
espSerial.println("AT+RST");
Serial.println("3");
delay(3000);
espSerial.println("AT+CSYSWDTENABLE");
Serial.println("4");
delay(1000);
espSerial.println("AT+CWJAP=\"Internet\",\"40061991\"");
Serial.println("5");
delay(6000);
espSerial.println("AT+CIPMODE=0");
Serial.println("6");
delay(1000);
espSerial.println("AT+CIPMUX=1");
Serial.println("7");
delay(1000);
espSerial.println("AT+CIPSERVER=1,88");
Serial.println("8");
delay(1000);
espSerial.println("AT+CIPSTO=2");
Serial.println("9");
delay(1000);
espSerial.println("AT+CIFSR");
Serial.println("10");
delay(1000);
}

void loop()
{
int ch_id, packet_len;
char *pb; 
espSerial.readBytesUntil('\n', buffer, BUFFER_SIZE);
 
if(strncmp(buffer, "+IPD,", 5)==0)
  {
   sscanf(buffer+5, "%d,%d", &ch_id, &packet_len);
   if (packet_len > 0)
    {
      pb = buffer+5;
      while(*pb!=':') pb++;
      pb++;
     if((strncmp(pb, "GET / ", 6) == 0) || (strncmp(pb, "GET /?", 6) == 0))
       {
        otvet_klienty(ch_id);
        Serial.println(buffer);
       }     
    }
  }

}
void otvet_klienty(int ch_id)
{
  String Header;
  Header =  "HTTP/1.1 200 OK\r\n";
  Header += "Content-Type: text/html\r\n";
  Header += "Connection: close\r\n"; 
 
  String Content;
Content = "<!DOCTYPE html>";
Content += "<html><head><meta charset=\"utf-8\"><meta http-equiv=\"Cache-Control\" content=\"no-cache\"><title>Stranica</title></head><body>";
Content += "<h1>Privet</h1></body></html>";

  Header += "Content-Length: ";
  Header += (int)(Content.length());
  Header += "\r\n\r\n";
 
   espSerial.print("AT+CIPSEND="); // ответ клиенту
espSerial.print(ch_id);
espSerial.print(",");
   espSerial.println(Header.length()+Content.length());
delay(100);

// if(espSerial.find(">"))
   // {
       espSerial.print(Header);
      espSerial.print(Content);
    delay(110);
    //}
}
Работает нестабильно, часто зависает. Окажите помощь, что я не так сделал?
Если делаю проверку

if(espSerial.find(">"))
{
espSerial.print(Header);
espSerial.print(Content);
delay(110);
}
Не выводит страницу
 

shuraf

Member
Ходишь по граблям пройденными всеми. С АТ работать тяжело и почти безнадёжно. По возможности переходит на IDE
 

Refalkof

New member
Помогите! Что в коде не так с client.read? Не отображает получение данные.
Код:
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

OneWire oneWire(15);
DallasTemperature ds(&oneWire);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

EthernetClient client;
char server[] = "-----";
int buff = 0;
const int led = 7;

void setup()
{
Ethernet.begin(mac);
ds.begin();
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}

void loop()
{

ds.requestTemperatures();

if (client.connect(server, 80))
{

client.print( "GET /add.php?");
client.print("temperature=");
client.print( ds.getTempCByIndex(0) );
client.print("&");
client.print("&");
client.print("temperature1=");
client.print( ds.getTempCByIndex(1) );
client.println( " HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Connection: close");
client.println();
client.println();

delay(200);

while (client.available())
{
char c = client.read();
if ( c=='1')
{
buff=1;
}
if ( c=='0')
{
buff=0;
}
}
client.stop();
client.flush();
delay(100);
}
else
{
client.stop();
delay(1000);
client.connect(server, 80);
}

if ( buff==1)
{
digitalWrite (led, HIGH);
}
if ( buff==0)
{
digitalWrite(led, LOW);
}
delay(500);
}
 
Последнее редактирование:
Сверху Снизу