Согласование кнопки на браузере и кнопки на ардуино

aleksandr777
Offline
Зарегистрирован: 04.01.2018

попробуй так 

твойсервер/add_data.php?temperature=1&temperature1=1

или

твойсервер/add_data.php?temperature=1&&temperature1=1

 

Oleg_I
Offline
Зарегистрирован: 04.04.2016

выводит 0

aleksandr777
Offline
Зарегистрирован: 04.01.2018

а если кнопку понажимать, по идее должно 0 или 1, если так то надо искать откуда беруться 3 и 0 в сериале

b707
Offline
Зарегистрирован: 26.05.2017

aleksandr777 пишет:

вот что мне выдает сервер

HTTP/1.1 200 OK
Date: Thu, 03 May 2018 11:47:58 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

7

 

ну я ж говорил, что ваш код работает "случайно". Чуть что измени в сервере - и все развалится. Вы совершенно не контролируете, какую именно цифру вы вытащили из ответа. Вы даже не контролируете, а есть ли ответ вообще.

Oleg_I
Offline
Зарегистрирован: 04.04.2016

а какими командами мы можем задать просмотр точной позиции ?

b707
Offline
Зарегистрирован: 26.05.2017

Oleg_I пишет:

а какими командами мы можем задать просмотр точной позиции ?

Я уже написал - проверяйте не по одному символу, а сначала собирайте их в строчки. Анализируйте ответ, пока не найдете пустую строку. Длина заголовка может быть разной, поэтому надо искать именно пустую строчку, а не зацикливаться на числе символов или строк.

После этого в третьей строке будет ваш символ, который ноль или один.

aleksandr777
Offline
Зарегистрирован: 04.01.2018

ок, а есть пример как это сделать?

aleksandr777
Offline
Зарегистрирован: 04.01.2018

b707 пишет:

aleksandr777 пишет:

вот что мне выдает сервер

HTTP/1.1 200 OK
Date: Thu, 03 May 2018 11:47:58 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

7

 

ну я ж говорил, что ваш код работает "случайно". Чуть что измени в сервере - и все развалится. Вы совершенно не контролируете, какую именно цифру вы вытащили из ответа. Вы даже не контролируете, а есть ли ответ вообще.

 

и как мой код работает случайно, что под этим понимать?  что должно измениться чтоб все пошло не по плану. если можно пример?

b707
Offline
Зарегистрирован: 26.05.2017

aleksandr777 пишет:

 

и как мой код работает случайно, что под этим понимать?  что должно измениться чтоб все пошло не по плану. если можно пример?

как вы думаете, какой контакт включит ваша ЕСП например при таком (весьма вероятном ) ответе сервера?


HTTP/1.1 408 Request Timeout
Date: Thu, 03 May 2018 11:47:58 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 0
Connection: close
aleksandr777
Offline
Зарегистрирован: 04.01.2018

b707 пишет:

aleksandr777 пишет:

 

и как мой код работает случайно, что под этим понимать?  что должно измениться чтоб все пошло не по плану. если можно пример?

как вы думаете, какой контакт включит ваша ЕСП например при таком (весьма вероятном ) ответе сервера?


HTTP/1.1 408 Request Timeout
Date: Thu, 03 May 2018 11:47:58 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 0
Connection: close

 

никакой

b707
Offline
Зарегистрирован: 26.05.2017

aleksandr777 пишет:

никакой

С чего бы это? Посмотрите внимательно свой код. Он реагирует на любйю цифру в ответе из диапазона 0-7.  При этом срабатывает последняя цифра. В том ответе, что я вам привел, это будет "0" из строки "Content-Length: 0"

aleksandr777
Offline
Зарегистрирован: 04.01.2018

можно спорить, можно не спорить, Вы можете выложить как считаете правильно обрабатывать ответ от сервера?

пока что я не видел на этом форуме такого...

у меня сервер работает уже пол года по данному примеру, и проблем не было.

 

Oleg_I
Offline
Зарегистрирован: 04.04.2016

Правильно, так и есть но какими строками задаеться параметр в какую строку смотреть ? По возможности прошу подсказать

b707
Offline
Зарегистрирован: 26.05.2017

aleksandr777 пишет:

можно спорить, можно не спорить,

у меня сервер работает уже пол года по данному примеру, и проблем не было.

 

да что тут спорить? Ваши аргументы примерно звучат как "я всегда монтирую проводку, не отключая рубильник - и проблем не было " :)

Этот код будет работать, ТОЛЬКО если нужный символ ВСЕГДА самый последний цифровой символ ответа сервера. А чуть что не так - и результат непредсказуем.

Правильный анализ ответа без труда ищется в инете. Причем необязательно это ответ HTPP сервера - ответы GSM-модемов/ GPS-приемников и тд - обрабатываются так же. Сначала принимаемые символы собираются в строки, а потом строки анализируются.

Кстати. для упрощения обработки лучше кодировать состояние реле не одним символом, а уникальной строкой, например "RELAY_44=ON". Такие строки искать в ответе легче, так как они не встречаются в служебных данных. Кроме того, при таком кодировании в одном ответе сервера можно передавать состояние нескольких параметров, чего ваш код не поддерживает в принципе.

aleksandr777
Offline
Зарегистрирован: 04.01.2018

b707 пишет:

aleksandr777 пишет:

можно спорить, можно не спорить,

у меня сервер работает уже пол года по данному примеру, и проблем не было.

 

да что тут спорить? Ваши аргументы примерно звучат как "я всегда монтирую проводку, не отключая рубильник - и проблем не было " :)

Этот код будет работать, ТОЛЬКО если нужный символ ВСЕГДА самый последний цифровой символ ответа сервера. А чуть что не так - и результат непредсказуем.

Правильный анализ ответа без труда ищется в инете. Причем необязательно это ответ HTPP сервера - ответы GSM-модемов/ GPS-приемников и тд - обрабатываются так же. Сначала принимаемые символы собираются в строки, а потом строки анализируются.

Кстати. для упрощения обработки лучше кодировать состояние реле не одним символом, а уникальной строкой, например "RELAY_44=ON". Такие строки искать в ответе легче, так как они не встречаются в служебных данных. Кроме того, при таком кодировании в одном ответе сервера можно передавать состояние нескольких параметров, чего ваш код не поддерживает в принципе.

есть пример?

Oleg_I
Offline
Зарегистрирован: 04.04.2016

коллеги, у каждого из Вас виду опыта больше чем у меня прошу помочь по моему вопросу, что мне править и как задать просмотр указаного параметра 

aleksandr777
Offline
Зарегистрирован: 04.01.2018

скетч скинь свой. и с браузера по ссылкам что давал при нажатии кнопки значение меняется? 

Oleg_I
Offline
Зарегистрирован: 04.04.2016

через часа 2 смогу написать

b707
Offline
Зарегистрирован: 26.05.2017

Oleg_I пишет:

 прошу помочь по моему вопросу, что мне править и как задать просмотр указаного параметра 

накидал для примера код, который пропускает весь заголовок и извлекает 1 символ из третьей строки блока данных. Номер строчки, откуда читается параметр, задается переменной data_string_num Строки считаются только начиная с пустой строки в конце заголовка, пустая строка имеет номер 0.

byte i, startRead, buff ;
byte data_string_num =3;  // номер строки данных, откуда извлекается ответ сервера

while (client.available()) {
      c = client.read();
      if (c == '\r') continue;
      if (c == '\n') {                      // найден конец строки
         
         if ((startRead == 0) && (i == 0))  // если строка пустая - служебный заголовок закончился
           {startRead = 1; continue;}       // начинаем отсчитывать строки данных
         
         if (startRead > 0)                 // очередная строка данных
           (startRead++; continue;}         
         
         i=0; continue;
      }
      i++;
      if (startRead == data_string_num) { // если номер строки данных равен заданному
           if ( c=='1') buff=1;             // извлекаем параметр из первого символа строки
           if ( c=='0') buff=0;
           startRead++; 
         }
  }    

 

Oleg_I
Offline
Зарегистрирован: 04.04.2016

большое спасибо за потраченое время сейчас приеду буду пробовать . 

По ссылкам которые были выше проверил значение в браузере меняеться 0либо 1 зависимо от положение включателя

Oleg_I
Offline
Зарегистрирован: 04.04.2016






#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };                                       

EthernetClient client;
char server[] = "мой сервер"; // имя вашего сервера  
bool buff=true;
const int led=5;

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

void loop()
 {
  
  sensors.requestTemperatures();
   
    if (client.connect(server, 80)) 
{

    client.print( "GET /add_data.php?");
    client.print("temperature=");
    client.print( sensors.getTempCByIndex(0) );
    client.print("&");
    client.print("&");
    client.print("temperature1=");
    client.print( sensors.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();
      Serial.print(c);
        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);
  }

 digitalWrite (led, buff);
 
  delay(500);
}

 

 

Oleg_I
Offline
Зарегистрирован: 04.04.2016

вот такой код сейчас загружен 

По ссылкам выдат 1 либо 0 зависит от того включено или выключено 

Oleg_I
Offline
Зарегистрирован: 04.04.2016

сейчас возьму за основу исходный код как из первоисточника и допишу о результатах сообщу 

aleksandr777
Offline
Зарегистрирован: 04.01.2018

где косяк 

#include <ESP8266WiFi.h>
const char* ssid     = "******";
const char* password = "your-password";
WiFiClient client;
char server[] = "192.168.1.35"; // имя вашего сервера  www.arduino.ru
//int buff=0;
const int led=5;

byte i, startRead, buff ;
byte data_string_num =3;  // номер строки данных, откуда извлекается ответ сервера

void setup() {
  Serial.begin(115200);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  pinMode( led, OUTPUT);
  digitalWrite(led, LOW);
}
void loop()
 {
WiFiClient client;
if (client.connect(server, 80)) 

{


    client.print( "GET /rele.php?");
    client.println( " HTTP/1.1");
    client.print( "Host: " );
    client.println(server);
    client.println( "Connection: close" );
    client.println();
    client.println();
        
    

  while (client.available())
 {
      char c = client.read();
      Serial.print(c);


       if (c == '\r') continue;
      if (c == '\n') {                      // найден конец строки
         
         if ((startRead == 0) && (i == 0))  // если строка пустая - служебный заголовок закончился
           {startRead = 1; continue;}       // начинаем отсчитывать строки данных
         
         if (startRead > 0)                 // очередная строка данных
           {startRead++; continue;}         
         
         i=0; continue;
      }
      i++;
      if (startRead == data_string_num) { // если номер строки данных равен заданному
           if ( c=='1') buff=1;             // извлекаем параметр из первого символа строки
           if ( c=='0') buff=0;
           startRead++; 
//        if ( c=='1')
//        {
//        buff=1;
//        }
//        if ( c=='0')
//        {
//         buff=0;
//        }
      } 
      Serial.println(buff);
      client.stop();
      client.flush();
      delay(1000); 
  }

}
 }

сериал выдает 

WiFi connected
IP address: 
192.168.1.43
H0
H0
 
aleksandr777
Offline
Зарегистрирован: 04.01.2018

Oleg_I пишет:







#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };                                       

EthernetClient client;
char server[] = "мой сервер"; // имя вашего сервера  
bool buff=true;
const int led=5;

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

void loop()
 {
  
  sensors.requestTemperatures();
   
    if (client.connect(server, 80)) 
{

    client.print( "GET /add_data.php?");
    client.print("temperature=");
    client.print( sensors.getTempCByIndex(0) );
    client.print("&");
    client.print("&");
    client.print("temperature1=");
    client.print( sensors.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();
      Serial.print(c);
        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);
  }

 digitalWrite (led, buff);
 
  delay(500);
}

 

 

75 строка лишняя

Oleg_I
Offline
Зарегистрирован: 04.04.2016

ругаеться компилятор на 20 строку кода 

19            if ( c=='1') buff=1;             // извлекаем параметр из первого символа строки
20            if ( c=='0') buff=0;
 
exit status 1
'c' was not declared in this scope
 
мол с не задан 
aleksandr777
Offline
Зарегистрирован: 04.01.2018

b707 пишет:

Oleg_I пишет:

 прошу помочь по моему вопросу, что мне править и как задать просмотр указаного параметра 

накидал для примера код, который пропускает весь заголовок и извлекает 1 символ из третьей строки блока данных. Номер строчки, откуда читается параметр, задается переменной data_string_num Строки считаются только начиная с пустой строки в конце заголовка, пустая строка имеет номер 0.

byte i, startRead, buff ;
byte data_string_num =3;  // номер строки данных, откуда извлекается ответ сервера

while (client.available()) {
      c = client.read();
      if (c == '\r') continue;
      if (c == '\n') {                      // найден конец строки
         
         if ((startRead == 0) && (i == 0))  // если строка пустая - служебный заголовок закончился
           {startRead = 1; continue;}       // начинаем отсчитывать строки данных
         
         if (startRead > 0)                 // очередная строка данных
           (startRead++; continue;}         
         
         i=0; continue;
      }
      i++;
      if (startRead == data_string_num) { // если номер строки данных равен заданному
           if ( c=='1') buff=1;             // извлекаем параметр из первого символа строки
           if ( c=='0') buff=0;
           startRead++; 
         }
  }    

 

тут еще в 13 строке вместо ( { поставь и запиши стоочку так char c = client.read();

у меня с такой записью не заработало( ищу где накосячил

 

Oleg_I
Offline
Зарегистрирован: 04.04.2016

aleksandr777 пишет:

Oleg_I пишет:







#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

75 строка лишняя

но на результате не отразилось (

b707
Offline
Зарегистрирован: 26.05.2017

aleksandr777 пишет:

тут еще в 13 строке вместо ( { поставь

да, верно, не ту скобку поставил

и обьявление char с куда-нибудь добавьте.

 

 

 

aleksandr777
Offline
Зарегистрирован: 04.01.2018

залей этот и покажи что в сериал плюет

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };                                       

EthernetClient client;
char server[] = "мой сервер"; // имя вашего сервера  
bool buff=true;
const int led=5;

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

void loop()
 {
  
  sensors.requestTemperatures();
   
    if (client.connect(server, 80)) 
{

    client.print( "GET /add_data.php?");
    client.print("temperature=");
    client.print( sensors.getTempCByIndex(0) );
    client.print("&");
    client.print("&");
    client.print("temperature1=");
    client.print( sensors.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();
      Serial.print(c);
    
   client.stop();
   delay(1000);
 
  }

}
}

 

 

b707
Offline
Зарегистрирован: 26.05.2017

aleksandr777 пишет:

залей этот и покажи что в сериал плюет

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };                                       

EthernetClient client;
char server[] = "мой сервер"; // имя вашего сервера  
bool buff=true;
const int led=5;

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

void loop()
 {
  
  sensors.requestTemperatures();
   
    if (client.connect(server, 80)) 
{

    client.print( "GET /add_data.php?");
    client.print("temperature=");
    client.print( sensors.getTempCByIndex(0) );
    client.print("&");
    client.print("&");
    client.print("temperature1=");
    client.print( sensors.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();
      Serial.print(c);
    
   client.stop();
   delay(1000);
 
  }

}
}

 

 

фигурную скобку со строки 59 надо переставить в строку 55, иначе ответ после каждого символа будет замирать на целую секунду.

Ну а сам результат Олег уже выкладывал - и не раз. например в сообщении #24. Что вы там нового надеетесь увидеть, интересно?

aleksandr777
Offline
Зарегистрирован: 04.01.2018

интересно почему сервер ему 2 лишних значения выдает на ардуино. хотя с браузера все верно работает...

если б ему в браузер выдавало 3 значения то копать надо было бы на сервере  ... хотя мож чего не знаю

я попробовал твой пример залить - не работает... меняй номер строик  не меняй, ответ выше выложен

b707
Offline
Зарегистрирован: 26.05.2017

aleksandr777 пишет:

где косяк 

#include <ESP8266WiFi.h>
const char* ssid     = "******";
const char* password = "your-password";
WiFiClient client;
char server[] = "192.168.1.35"; // имя вашего сервера  www.arduino.ru
//int buff=0;
const int led=5;

byte i, startRead, buff ;
byte data_string_num =3;  // номер строки данных, откуда извлекается ответ сервера

void setup() {
  Serial.begin(115200);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  pinMode( led, OUTPUT);
  digitalWrite(led, LOW);
}
void loop()
 {
WiFiClient client;
if (client.connect(server, 80)) 

{


    client.print( "GET /rele.php?");
    client.println( " HTTP/1.1");
    client.print( "Host: " );
    client.println(server);
    client.println( "Connection: close" );
    client.println();
    client.println();
        
    

  while (client.available())
 {
      char c = client.read();
      Serial.print(c);


       if (c == '\r') continue;
      if (c == '\n') {                      // найден конец строки
         
         if ((startRead == 0) && (i == 0))  // если строка пустая - служебный заголовок закончился
           {startRead = 1; continue;}       // начинаем отсчитывать строки данных
         
         if (startRead > 0)                 // очередная строка данных
           {startRead++; continue;}         
         
         i=0; continue;
      }
      i++;
      if (startRead == data_string_num) { // если номер строки данных равен заданному
           if ( c=='1') buff=1;             // извлекаем параметр из первого символа строки
           if ( c=='0') buff=0;
           startRead++; 
//        if ( c=='1')
//        {
//        buff=1;
//        }
//        if ( c=='0')
//        {
//         buff=0;
//        }
      } 
      Serial.println(buff);
      client.stop();
      client.flush();
      delay(1000); 
  }

}
 }

сериал выдает 

WiFi connected
IP address: 
192.168.1.43
H0
H0
 

косяк в вашей редакции моего кода. Нафига вы оператор client.stop() вставил в цикл приема сообщения? Вы же крашите канал после приема первого же символа - "H" из заголовка "HTTP..."

Все операторы строк 86-89 вынесите наружу цикла while. Или, что тоже самое - переставьте скобку со строки 90 в строку 85

 

b707
Offline
Зарегистрирован: 26.05.2017

aleksandr777 пишет:

я попробовал твой пример залить - не работает... меняй номер строик  не меняй, ответ выше выложен

выше написал. Не понимаешь кода - не редактируй.

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

косяк в вашей редакции моего кода. Нафига вы оператор client.stop() вставил в цикл приема сообщения? Вы же крашите канал после приема первого же символа - "H" из заголовка "HTTP..."

Все операторы строк 86-89 вынесите наружу цикла while. Или, что тоже самое - переставьте скобку со строки 90 в строку 85

Опять даете яблоко беззубым... Они ж его не разжуют.

Oleg_I
Offline
Зарегистрирован: 04.04.2016

да, в сериал выводит точно такое же сообщение 

b707
Offline
Зарегистрирован: 26.05.2017

Oleg_I пишет:

да, в сериал выводит точно такое же сообщение 

пробуйте код из сообщения №74 , только строчки с 86 по 89 выкиньте совсем, а после скобки в строке 90 добавьте вывод значения buff в Serial (желательно с какой-нить строкой, типа "buff=" чтоб не спутать с другими нулями и единицами)

Oleg_I
Offline
Зарегистрирован: 04.04.2016

сейчас проверил вот такой код  в сериале при включенном положениии включателя идут одни еденицы но светодиод не загораеться 

1
1
1
1
1
1
а при выключеном 
вот такое сообщение 
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 17:08:36 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Server: awex
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Request-ID: ac458617b622bf4ce6bfcb436275d5d4
 
3
 
1
 
0
 
1
 
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };                                       
byte i, startRead, buff ; // новая строка 
byte data_string_num =3;  // номер строки данных, откуда извлекается ответ сервера (новая строка переменная )

EthernetClient client;
char server[] = "мой сервер"; // ; имя вашего сервера 

const int led=5;

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

void loop()
 {
  
  sensors.requestTemperatures();
  
    if (client.connect(server, 80)) 
{

    client.print( "GET /add_data.php?");
    client.print("temperature=");
    client.print( sensors.getTempCByIndex(0) );
    client.print("&");
    client.print("&");
    client.print("temperature1=");
    client.print( sensors.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();
      Serial.print(c);


       if (c == '\r') continue;
      if (c == '\n') {                      // найден конец строки
         
         if ((startRead == 0) && (i == 0))  // если строка пустая - служебный заголовок закончился
           {startRead = 1; continue;}       // начинаем отсчитывать строки данных
         
         if (startRead > 0)                 // очередная строка данных
           {startRead++; continue;}         
         
         i=0; continue;
      }
      i++;
      if (startRead == data_string_num) { // если номер строки данных равен заданному
           if ( c=='1') buff=1;             // извлекаем параметр из первого символа строки
           if ( c=='0') buff=0;
           startRead++; 

      } 
       }
      Serial.println(buff);
      client.stop();
      client.flush();
      delay(1000); 
 

}
 }

 

b707
Offline
Зарегистрирован: 26.05.2017

блин, я ж написал вам, как поправить код. Почему не слушаете?

Строку 77 запишите так:

Serial.print("buff = "); Serial.println(buff);

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

Они ж его не разжуют.

похоже на то...

Не сдержался, не смог смотреть, как один беззубый учит жевать другого :)

Oleg_I
Offline
Зарегистрирован: 04.04.2016

просто не успеваю за сообщениями я написал только потом увидел ваше сообщение 

aleksandr777
Offline
Зарегистрирован: 04.01.2018

работает  

#include <ESP8266WiFi.h>
const char* ssid     = "*******";
const char* password = "your-password";
WiFiClient client;
char server[] = "192.168.1.35"; 
//int buff=0;
const int led=5;

byte i, startRead, buff ;
byte data_string_num =8;  // номер строки данных, откуда извлекается ответ сервера

void setup() {
  Serial.begin(115200);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  pinMode( led, OUTPUT);
  digitalWrite(led, LOW);
}
void loop()
 {
WiFiClient client;
if (client.connect(server, 80)) 

{


    client.print( "GET /rele.php?");
    client.println( " HTTP/1.1");
    client.print( "Host: " );
    client.println(server);
    client.println( "Connection: close" );
    client.println();
    client.println();
        
    

  while (client.available())
 {
      char c = client.read();
      Serial.print(c);


       if (c == '\r') continue;
      if (c == '\n') {                      // найден конец строки
         
         if ((startRead == 0) && (i == 0))  // если строка пустая - служебный заголовок закончился
           {startRead = 1; continue;}       // начинаем отсчитывать строки данных
         
         if (startRead > 0)                 // очередная строка данных
           {startRead++; continue;}         
         
         i=0; continue;
      }
      i++;
      if (startRead == data_string_num) { // если номер строки данных равен заданному
           if ( c=='1') buff=1;             // извлекаем параметр из первого символа строки
           if ( c=='0') buff=0;
           startRead++; 
//        if ( c=='1')
//        {
//        buff=1;
//        }
//        if ( c=='0')
//        {
//         buff=0;
//        }
      } 
 }
      Serial.println(buff);
      client.stop();
      client.flush();
      delay(100); 
 

}
 }

ток номер строки поправить нужно 

подскажите почему  сервер выплевывает еще несколько значений после системного?

sadman41
Offline
Зарегистрирован: 19.10.2016

А что ему еще делать, если вы его заставляете печатать всё, что в буфере клиента имеется? Если этого не нужно, просто выпрыгивайте из while() и после стопа сетевого клиента чистите буфер. Кстати, flush делает немного не то, что вы ожидаете.

Oleg_I
Offline
Зарегистрирован: 04.04.2016

блин я не смог проверить у меня перестала ардуина прошиваться 

avrdude: ser_recv(): read error: Неверный дескриптор.
 
 
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer
выбранный последовательный порт avrdude: stk500_send(): failed to send command to serial port
 не существует или плата не подключена к нему
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Oleg_I пишет:

блин я не смог проверить у меня перестала ардуина прошиваться 

93 поста держалась, а на 94-ом таки не вынесла её душа таких издевательств. Мир ей!

Oleg_I
Offline
Зарегистрирован: 04.04.2016

Заработала ардуина залил код  

 

в сериале следующее сообщение

Hbuff=

0
Hbuff=
0
Hbuff=
0
 

которое не реагирует на положение включателя 

 

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };                                       
byte i, startRead, buff ; // новая строка 
byte data_string_num =3;  // номер строки данных, откуда извлекается ответ сервера (новая строка переменная )

EthernetClient client;
char server[] = "сервер"; // имя сервера

const int led=5;

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

void loop()
 {
  
  sensors.requestTemperatures();
  
    if (client.connect(server, 80)) 
{

    client.print( "GET /add_data.php?");
    client.print("temperature=");
    client.print( sensors.getTempCByIndex(0) );
    client.print("&");
    client.print("&");
    client.print("temperature1=");
    client.print( sensors.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();
      Serial.print(c);


       if (c == '\r') continue;
      if (c == '\n') {                      // найден конец строки
         
         if ((startRead == 0) && (i == 0))  // если строка пустая - служебный заголовок закончился
           {startRead = 1; continue;}       // начинаем отсчитывать строки данных
         
         if (startRead > 0)                 // очередная строка данных
           {startRead++; continue;}         
         
         i=0; continue;
      }
      i++;
      if (startRead == data_string_num) { // если номер строки данных равен заданному
           if ( c=='1') buff=1;             // извлекаем параметр из первого символа строки
           if ( c=='0') buff=0;
           startRead++; 

      } 
      
      client.stop();
      client.flush();
     
  } 
  Serial.println("buff=");
  Serial.println(buff);

}
 }

 

 

aleksandr777
Offline
Зарегистрирован: 04.01.2018

попробуй byte data_string_num =2; так..... у тебя 2е значение меняется после 1й пустой строки и задержку на конце поставь 100. но тормазит порядком все равно отклик

aleksandr777
Offline
Зарегистрирован: 04.01.2018

так.. 1е значение (1) это значене "с"  2е значение это buff

11
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:44 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:44 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:44 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:44 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:44 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:45 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:45 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:45 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:45 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:45 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:45 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:45 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:46 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:46 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:46 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:46 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

01
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:46 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

00
HTTP/1.1 200 OK
Date: Thu, 03 May 2018 21:23:46 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8

 

aleksandr777
Offline
Зарегистрирован: 04.01.2018

концовку поправь 

 startRead++; 

      } 
 }
      Serial.println(buff);
      client.stop();
      
      delay(100); 
 

}
 }

 

Oleg_I
Offline
Зарегистрирован: 04.04.2016
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };                                       
byte i, startRead, buff ; // новая строка 
byte data_string_num =3;  // номер строки данных, откуда извлекается ответ сервера (новая строка переменная )

EthernetClient client;
char server[] = "сервер"; //  имя вашего сервера 

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

void loop()
 {
  
  sensors.requestTemperatures();
  
    if (client.connect(server, 80)) 
{

    client.print( "GET /add_data.php?");
    client.print("temperature=");
    client.print( sensors.getTempCByIndex(0) );
    client.print("&");
    client.print("&");
    client.print("temperature1=");
    client.print( sensors.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();
      Serial.print(c);


       if (c == '\r') continue;
      if (c == '\n') {                      // найден конец строки
         
         if ((startRead == 0) && (i == 0))  // если строка пустая - служебный заголовок закончился
           {startRead = 1; continue;}       // начинаем отсчитывать строки данных
         
         if (startRead > 0)                 // очередная строка данных
           {startRead++; continue;}         
         
         i=0; continue;
      }
      i++;
      if (startRead == data_string_num) { // если номер строки данных равен заданному
           if ( c=='1') buff=1;             // извлекаем параметр из первого символа строки
           if ( c=='0') buff=0;
           startRead++; 



      } 
 }
      Serial.print("buff= "); Serial.println(buff);
      client.flush();
      client.stop();
      delay(1000); 
 

}
 }

Вот такой последний код я использую  и вот такое сообщение в мониторе порта при включенов включателе 

HTTP/1.1 200 OK

Date: Thu, 03 May 2018 21:46:28 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Server: awex
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Request-ID: 35a42ad3db9c19ecd341ab2980cd53be
 
3
 
1
 
0
 
buff= 1
  buff просто обновляеться не сразу после изменения положения включателя но он как раз соответсвует цифре включателя котрая идет после "3"