Библиотека Ethernet2 и GET на модуле w5500

oldxaker
Offline
Зарегистрирован: 23.07.2018

Всем привет! 

Второй день сижу на форуме в поиске ответа,

приходит строка (UNO + W5500 + Ethernet2):

GET /?AHONH=10&AHONM=20&AHOFFH=21&AHOFFM=12&AAUTO=1&AONOFF=1 HTTP/1.1
 
нужно получать значение 
 
AHONH=10
AHONM=20
и тд
и если оно верно, то... диоды, переменные, кутеж
 
С радостью принимаю упреки в том что на форуме много примеров, смотри обработку GET, что гугл наше все и тп но примеры все котрые нашел написаны на Ethernet первой библиотеке, и с этой почему то не работает обработка строки. 
 
Часто решается все через подобную стоку в примерах (например):
 
if(readString.indexOf("AHONH=10") >0)
{
......
}
 
пробовал, не получается
 
Подскажите примером как это можно сделать, чтобы понять логику (уровень, как поняли, новичок, Arduino начал изучать потому то интересно и в следствеии хочу менно понять, а не просто дернуть откуда то код)
Благодарю.
 
 
andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

. Del

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Хм..а я думал indexof относится к поиску подстроки, но да к библиотеки не относится.

oldxaker
Offline
Зарегистрирован: 23.07.2018

Del это предложение удалить тему? 

Где ещё искать помощи, если не специализированных форумах?)

oldxaker
Offline
Зарегистрирован: 23.07.2018

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

oldxaker
Offline
Зарегистрирован: 23.07.2018

andycat пишет:
Хм..а я думал indexof относится к поиску подстроки, но да к библиотеки не относится.

 

в примерах, которые нашли по подобным темам именно через indexof получали данные из строки и далее присваивали значение переменным и тп, поэтому его и указал, что не означает что это верное решение)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

oldxaker пишет:

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

Так мы же и хотим Вам подсказать, а Вы нам палки в колёса ставите. Вот Вы писали

oldxaker пишет:

пробовал, не получается

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

ЕвгенийП пишет:

Как пробовали? Что не получается?

Ну, так давайте, выкладывайте Ваш, код как именно Вы пробовали и объясняйте что именно не получилось. Чего ж Вы этого не делаете?

 

oldxaker
Offline
Зарегистрирован: 23.07.2018

Евгений, Вас понял, пардон, торможу

Код, пробовали взять хотя бы первый параметр и включить тестовый светодиод при соответствии

#include <SPI.h>
#include <Ethernet2.h>
 
#include <EEPROM.h>
#include <SPI.h>                            
                      
byte address[][6] = {"1Node","2Node","3Node","4Node","5Node","6Node"};  
 
byte transmitt_data[21]; 
 
byte value;
 
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 178, 221);
 
EthernetServer server(80);
 
String readString; 
 
int pin = 6; // test led
 
 
void setup() {
 
  pinMode (pin, OUTPUT); // test led
  
  
  Serial.begin(9600);
  while (!Serial) {
    ; /
  }
 
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  
}
 
 
void loop() {
 
 
 
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
//        readString += c;
        char c = client.read();
        Serial.write(c);
        
       // if (c == '\n' && currentLineIsBlank) {
          
//
 
      if (c == '\n') { 
    
         Serial.println(readString);  
    if (readString.indexOf("?AHONH=0") > 0) 
    { 
    digitalWrite (pin, HIGH);
    Serial.println("done");
    }
    else
    {
      digitalWrite (pin, LOW);
      Serial.println("try");
    }
    
 
//
       
          
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
 
          client.println("<?xml version= 1.0 encoding= UTF-8 ?>");
          client.println("<!DOCTYPE html PUBLIC ");
          
          //client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
 
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("  <br>");
 
 
 
  client.println(" <hr align= center  width= 300  size= 3 color= #0000dd  /> ");
  client.println(" <b> <center> Achtertuin <center> </b>");
  client.println(" <hr align= center  width= 300  size= 3 color= #0000dd  /> ");
  client.println("<br>");
 
  client.println(" <form>");
  client.println(" &nbsp;  TIME ON &nbsp;");
 
  
  client.println("<input type= number  name= AHONH  max= 23 min= 0  value=  style= width:60px </p>"); // окно ввода
  
  client.println("<input type= number  name= AHONM  max= 59 min= 0  value=   style= width:60px </p>"); // окно ввода
 
  client.println("<br>");
 
  client.println(" &nbsp;  TIME OFF &nbsp;");
  client.println("<input type= number  name= AHOFFH  max= 23 min= 0  value=   style= width:60px </p>"); // окно ввода
  client.println("<input type= number  name= AHOFFM  max= 59 min= 0  value=   style= width:60px </p>"); // окно ввода
 
 
  client.println(" <hr align= center  width= 300  size= 3  color= #dddddd  /> ");
  client.println("&nbsp; AUTO MODE &nbsp;");
  client.println("<form>");
  client.println("<select name= AAUTO >");
 
  client.println("<option value= 2 > ON/OFF </option>");
  client.println("<option value= 1 >ON</option>");
  client.println("<option value= 0 >OFF</option>");
  client.println("</select></p>");
   
  client.println("&nbsp; ON OFF BUTTON &nbsp;");
  client.println("<form>");
  client.println("<select name= AONOFF >");
 
  client.println("<option value= 2 > ON/OFF </option>");
  client.println("<option value= 1 >OFF</option>");
  client.println("<option value= 0 >ON</option>");
     
  client.println("</select></p>");
 
  
  client.println("</select>");
 
 
  client.println("<p><input type= submit  value= SEND  ></p>");
 
  
  
  client.println("</html>");
          break;       }
       
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
 
      
  }
 
} // ----------------- loop end -----------
 
 
 
 
  
  
 
andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

oldxaker пишет:

Del это предложение удалить тему? 

х?)


Нет, это просто удалённое сообщение.

oldxaker
Offline
Зарегистрирован: 23.07.2018

 

[/quote]

Ну, так давайте, выкладывайте Ваш, код как именно Вы пробовали и объясняйте что именно не получилось. Чего ж Вы этого не делаете?

[/quote]

Евгений, нашел Ваш пост по похожей тематике, Вы точно знаете ответ))

Там сложно для начинающего, подскажите направление.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Тут многие могут знать ответ, для начала корректно код выложить надо.

oldxaker
Offline
Зарегистрирован: 23.07.2018

Если делать так, то ругается на  Ethernet

 

char *data = (char *) Ethernet::buffer + pos;

 
    if (strncmp( "?AHONH=10" , data , 8 ) == 0)
    { 
    digitalWrite (pin, HIGH);
    Serial.println("done");
    }
 
oldxaker
Offline
Зарегистрирован: 23.07.2018

andycat пишет:
Тут многие могут знать ответ, для начала корректно код выложить надо.

 

Как все сложно, как непросто ответить без самолюбования и прокачки ЭГО.

Я рад, что Вы являетесь хранителем сего тайного знания, почет и слава)))

За замечание спасибо, исправляюсь

Хорошего вечера (искренее)

oldxaker
Offline
Зарегистрирован: 23.07.2018
#include <SPI.h>
#include <Ethernet2.h>
 
#include <EEPROM.h>
#include <SPI.h>                            
                      
byte address[][6] = {"1Node","2Node","3Node","4Node","5Node","6Node"};  
 
byte transmitt_data[21]; 
 
byte value;
 
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 178, 221);
 
EthernetServer server(80);
 
String readString; 
 
int pin = 6; // test led
 
 
void setup() {
 
  pinMode (pin, OUTPUT); // test led
  
  
  Serial.begin(9600);
  while (!Serial) {
    ; /
  }
 
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  
}
 
 
void loop() {
 
 
 
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
//        readString += c;
        char c = client.read();
        Serial.write(c);
        
       // if (c == '\n' && currentLineIsBlank) {
          
//
 
      if (c == '\n') { 
    
         Serial.println(readString);  
    if (readString.indexOf("?AHONH=0") > 0) 
    { 
    digitalWrite (pin, HIGH);
    Serial.println("done");
    }
    else
    {
      digitalWrite (pin, LOW);
      Serial.println("try");
    }
    
 
//
       
          
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
 
          client.println("<?xml version= 1.0 encoding= UTF-8 ?>");
          client.println("<!DOCTYPE html PUBLIC ");
          
          //client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
 
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("  <br>");
 
 
 
  client.println(" <hr align= center  width= 300  size= 3 color= #0000dd  /> ");
  client.println(" <b> <center> Achtertuin <center> </b>");
  client.println(" <hr align= center  width= 300  size= 3 color= #0000dd  /> ");
  client.println("<br>");
 
  client.println(" <form>");
  client.println(" &nbsp;  TIME ON &nbsp;");
 
  
  client.println("<input type= number  name= AHONH  max= 23 min= 0  value=  style= width:60px </p>"); // окно ввода
  
  client.println("<input type= number  name= AHONM  max= 59 min= 0  value=   style= width:60px </p>"); // окно ввода
 
  client.println("<br>");
 
  client.println(" &nbsp;  TIME OFF &nbsp;");
  client.println("<input type= number  name= AHOFFH  max= 23 min= 0  value=   style= width:60px </p>"); // окно ввода
  client.println("<input type= number  name= AHOFFM  max= 59 min= 0  value=   style= width:60px </p>"); // окно ввода
 
 
  client.println(" <hr align= center  width= 300  size= 3  color= #dddddd  /> ");
  client.println("&nbsp; AUTO MODE &nbsp;");
  client.println("<form>");
  client.println("<select name= AAUTO >");
 
  client.println("<option value= 2 > ON/OFF </option>");
  client.println("<option value= 1 >ON</option>");
  client.println("<option value= 0 >OFF</option>");
  client.println("</select></p>");
   
  client.println("&nbsp; ON OFF BUTTON &nbsp;");
  client.println("<form>");
  client.println("<select name= AONOFF >");
 
  client.println("<option value= 2 > ON/OFF </option>");
  client.println("<option value= 1 >OFF</option>");
  client.println("<option value= 0 >ON</option>");
     
  client.println("</select></p>");
 
  
  client.println("</select>");
 
 
  client.println("<p><input type= submit  value= SEND  ></p>");
 
  
  
  client.println("</html>");
          break;       }
       
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
 
      
  }
 
} // ----------------- loop end -----------
 
 

 

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

oldxaker пишет:

Как все сложно, как непросто ответить без самолюбования и прокачки ЭГО.

да нет тут никакого самолубования. Вас просто просят правильно вставить код . То. как вы вставили выше - очень неудобно для обсуждения. так как там, во-первых, нет подсветки синтаксиса, а во-вторых - САМОЕ ГЛАВНОЕ - нет номеров строк.

Код без номерации строк обсуждать очень сложно - непонятно, как указать. о какой строке речь.

Так что не считайте это троллингом, а не ленитесь перевыложить код.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

oldxaker пишет:

Как все сложно, как непросто ответить без самолюбования и прокачки ЭГО.

А Вы не ёрничайте. Ответить по неправильно выложенному коду действительно очень сложно. Как Вы себе видите совет по той простыне, что была выложена? Например: В строке №ХЗ добаьте {, строки с №ХЗ по №ХЗ удалите вовсе, и т.д. Понравилось? С номерами строк становится возможным какое-то обсуждение.

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

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

а что 54 строка закомментирована? Как же вы найдете в строке readstring нужную подстроку, если вы данные от клиента в эту строку не сохраняете?

oldxaker
Offline
Зарегистрирован: 23.07.2018

ЕвгенийП пишет:

oldxaker пишет:

Как все сложно, как непросто ответить без самолюбования и прокачки ЭГО.

А Вы не ёрничайте. Ответить по неправильно выложенному коду действительно очень сложно. Как Вы себе видите совет по той простыне, что была выложена? Например: В строке №ХЗ добаьте {, строки с №ХЗ по №ХЗ удалите вовсе, и т.д. Понравилось? С номерами строк становится возможным какое-то обсуждение.

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

Евгений, какие права? Никаких прав, пришел за помощью поэтому ни о каком ёрничестве речь не идет. За подсказку поблагодарил, так что если показалось поведение неадекватным - пардон. 

Подскажите направление, вот об этом прошу, о каких операторах-командах почитать для выполнения задачи, об этом речь, заний в этом направлении нет, коды готовые читать сложно, поэтому и вопрос в каком направлении учить теорию )

oldxaker
Offline
Зарегистрирован: 23.07.2018

b707 пишет:

а что 54 строка закомментирована? Как же вы найдете в строке readstring нужную подстроку, если вы данные от клиента в эту строку не сохраняете?

 

компилятор ругается на эту строку

'c' was not declared in this scope

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

Я бы тоже ругался, если бы мне приказали "иди за хлебом", а деньги через неделю пообещали дать. Посмотрите, где вы декларируете 'c', а где используете.

oldxaker
Offline
Зарегистрирован: 23.07.2018

b707 пишет:

oldxaker пишет:

Как все сложно, как непросто ответить без самолюбования и прокачки ЭГО.

да нет тут никакого самолубования. Вас просто просят правильно вставить код . То. как вы вставили выше - очень неудобно для обсуждения. так как там, во-первых, нет подсветки синтаксиса, а во-вторых - САМОЕ ГЛАВНОЕ - нет номеров строк.

Код без номерации строк обсуждать очень сложно - непонятно, как указать. о какой строке речь.

Так что не считайте это троллингом, а не ленитесь перевыложить код.

Благодарю, возможно был излишне эмоционален, два дня ковыряюсь понять не могу логику, не имел цели как то задеть. Еще раз пардон.

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

oldxaker пишет:

компилятор ругается на эту строку

'c' was not declared in this scope

приехали...

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

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

Строку надо раскомментировать, без нее не заработает.

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

b707 пишет:

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

Он же oldxaker. Скорее всего "писал на ассемблере драйверы ядра"(TM)

oldxaker
Offline
Зарегистрирован: 23.07.2018

sadman41 пишет:

b707 пишет:

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

Он же oldxaker. Скорее всего "писал на ассемблере драйверы ядра"(TM)

 

Я написал выше - новичок, можно уровень 0, буду признателен )

oldxaker
Offline
Зарегистрирован: 23.07.2018

b707 пишет:

oldxaker пишет:

компилятор ругается на эту строку

'c' was not declared in this scope

приехали...

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

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

Строку надо раскомментировать, без нее не заработает.

благодарю, дождался совета )

 

oldxaker
Offline
Зарегистрирован: 23.07.2018

Поменял (понял создание переменной шло после обращения к ней, тупо, согласен), не ругается, залил, диод тестовый не загорается

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

Может вы еще и Arduino IDE Serial Monitor не открывали?..

oldxaker
Offline
Зарегистрирован: 23.07.2018

sadman41 пишет:

Может вы еще и Arduino IDE Serial Monitor не открывали?..

Это такая кнопочка в углу? )))

Вроде открывал, но не закрывал точно

new client
GET /?AHONH=5&AHONM=7&AHOFFH=3&AHOFFM=6&AAUTO=2&AONOFF=2 HTTP/1.1

try
client disconnected
new client
GET /favicon.ico HTTP/1.1

try
client disconnected

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

oldxaker пишет:

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

Подскажите, какие буквы надо выучить, чтобы писать стихи.

"Все" - не предлагать!

oldxaker
Offline
Зарегистрирован: 23.07.2018

andriano пишет:

oldxaker пишет:

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

Подскажите, какие буквы надо выучить, чтобы писать стихи.

"Все" - не предлагать!

 

+5

улыбнуло, дельное замечание)

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

oldxaker пишет:
GET /?AHONH=5&AHONM=7&AHOFFH=3&AHOFFM=6&AAUTO=2&AONOFF=2 HTTP/1.1

А ищете вы какую строку?

oldxaker
Offline
Зарегистрирован: 23.07.2018

Туповат в этом, новичок, хочу научиться поэтому спрашиваю. Желающие потренироваться в остроумии - велкам. Не обидчив))) 

 

oldxaker
Offline
Зарегистрирован: 23.07.2018

sadman41 пишет:

oldxaker пишет:
GET /?AHONH=5&AHONM=7&AHOFFH=3&AHOFFM=6&AAUTO=2&AONOFF=2 HTTP/1.1

А ищете вы какую строку?

 

Ищу ?AHONH=10

Если меняю параметр на странице - строка меняется, то есть если там стоит 10  условите так же не обрабатывается 

GET /?AHONH=10&AHONM=7&AHOFFH=3&AHOFFM=6&AAUTO=2&AONOFF=2 HTTP/1.1

то есть результат тот же

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

oldxaker пишет:

sadman41 пишет:

А ищете вы какую строку?

 

Ищу ?AHONH=10

а если внимательно посмотреть в код - ищете ?AHONH=0. И совершенно очевидно, что ни ?AHONH=10 ни ?AHONH=5 с вашей строкой поиска никогда не совпадет. Поэтому диод и не загорается.

Коллеги, вы уж простите, что я по простому, прямым текстом. Намеками, имхо, тут бесполезно, человек полный ноль.

oldxaker
Offline
Зарегистрирован: 23.07.2018

b707 пишет:

oldxaker пишет:

sadman41 пишет:

А ищете вы какую строку?

 

Ищу ?AHONH=10

а если внимательно посмотреть в код - ищете ?AHONH=0. И совершенно очевидно, что ни ?AHONH=10 ни ?AHONH=5 с вашей строкой поиска никогда не совпадет. Поэтому диод и не загорается.

Коллеги, вы уж простите, что я по простому, прямым текстом. Намеками, имхо, тут бесполезно, человек полный ноль.

 

Нет, проблема однозначно не в этом. Я подставлял разные значения. 

oldxaker
Offline
Зарегистрирован: 23.07.2018

b707 пишет:

oldxaker пишет:

sadman41 пишет:

А ищете вы какую строку?

 

Ищу ?AHONH=10

а если внимательно посмотреть в код - ищете ?AHONH=0. И совершенно очевидно, что ни ?AHONH=10 ни ?AHONH=5 с вашей строкой поиска никогда не совпадет. Поэтому диод и не загорается.

Коллеги, вы уж простите, что я по простому, прямым текстом. Намеками, имхо, тут бесполезно, человек полный ноль.

Коллеги, надеюсь поймут Ваш порыв плебею помочь) 

 

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

oldxaker пишет:

Нет, проблема однозначно не в этом. Я подставлял разные значения. 

вот вы интересный... Вы так и не ответили на вопрос, знаете ли вы Си - а теперь еще один вопрос подоспел - а как у вас с логикой?

Зачем вы "подставляли разные значения" ? Разве не очевидно, что если вы ищете ANON=0. то подставлять лбые другие значения бессмысленно?

Попробуйте послать такой запрос

GET /?AHONH=0&AHONM=7&AHOFFH=3&AHOFFM=6&AAUTO=2&AONOFF=2 HTTP/1.1

и посмотрите, а вдруг заработает.

 

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

На алиэкспрессе глупую ардуину продали - не может она сообразить, что AHONH=5  это то же самое, что и AHONH=0, только число другое. Предлагаю вернуть ее по гарантии.

oldxaker
Offline
Зарегистрирован: 23.07.2018

b707 пишет:

oldxaker пишет:

Нет, проблема однозначно не в этом. Я подставлял разные значения. 

вот вы интересный... Вы так и не ответили на вопрос, знаете ли вы Си - а теперь еще один вопрос подоспел - а как у вас с логикой?

Зачем вы "подставляли разные значения" ? Разве не очевидно, что если вы ищете ANON=0. то подставлять лбые другие значения бессмысленно?

Попробуйте послать такой запрос

GET /?AHONH=0&AHONM=7&AHOFFH=3&AHOFFM=6&AAUTO=2&AONOFF=2 HTTP/1.1

и посмотрите, а вдруг заработает.

Хорошо)))

Представьте что я очень тупой человек, который изучает Си и логика на уровне зачаточной. Если не пропало желание заняться просвещением со столь не простыми исходными данными, буду рад.

Подставлял разные значения, одзначает что я продставлял разные значения, то есть и 0 и на несоответствие ( то есть когда не 0, меняя код) диод не срабатывает.

Этот же код на шилде w5100  и библиотеке Etheret работает, так же замечательн обрабатывается строка через 

if (strncmp("?AHONH=10 ", data, 8) == 0)

Сейчас w5500 библиотека Ethernet2 и вот я выслушиваю дельные мнения знающих людей

oldxaker
Offline
Зарегистрирован: 23.07.2018

sadman41 пишет:

На алиэкспрессе глупую ардуину продали - не может она сообразить, что AHONH=5  это то же самое, что и AHONH=0, только число другое. Предлагаю вернуть ее по гарантии.

 

+5  Хорошо. Убрали )

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

oldxaker пишет:

Этот же код на шилде w5100  и библиотеке Etheret работает, так же замечательн обрабатывается строка через 

if (strncmp("?AHONH=10 ", data, 8) == 0)

Сейчас w5500 библиотека Ethernet2 и вот я выслушиваю дельные мнения знающих людей

Вот вам совет: возьмите скетч, который замечательно работает с W5100, замените в нем #include <Ethernet.h> на #include <Ethernet2.h> и наслаждайтесь жизнью.

oldxaker
Offline
Зарегистрирован: 23.07.2018

sadman41 пишет:

oldxaker пишет:

Этот же код на шилде w5100  и библиотеке Etheret работает, так же замечательн обрабатывается строка через 

if (strncmp("?AHONH=10 ", data, 8) == 0)

Сейчас w5500 библиотека Ethernet2 и вот я выслушиваю дельные мнения знающих людей

Вот вам совет: возьмите скетч, который замечательно работает с W5100, замените в нем #include <Ethernet.h> на #include <Ethernet2.h> и наслаждайтесь жизнью.

 

Вы точно пониматете о чем пишете?

oldxaker
Offline
Зарегистрирован: 23.07.2018

Ладно. Всем удачи и самореализации в чем то более существенном, чем указание на незнание тому, кто просит совета. 

Удачи!

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

oldxaker пишет:

sadman41 пишет:

Вот вам совет: возьмите скетч, который замечательно работает с W5100, замените в нем #include <Ethernet.h> на #include <Ethernet2.h> и наслаждайтесь жизнью.

Вы точно пониматете о чем пишете?

Сразили наповал. Я умываю руки.

oldxaker
Offline
Зарегистрирован: 23.07.2018

sadman41 пишет:

oldxaker пишет:

sadman41 пишет:

Вот вам совет: возьмите скетч, который замечательно работает с W5100, замените в нем #include <Ethernet.h> на #include <Ethernet2.h> и наслаждайтесь жизнью.

Вы точно пониматете о чем пишете?

Сразили наповал. Я умываю руки.

Откройте две библиотеки и найдите 5 отличий в первых 10 стоках)

 

oldxaker
Offline
Зарегистрирован: 23.07.2018

Оставлю запрос, может кто то зайдет и сможет подсказать.

за 44 сообщения я лишь узнал то, что и так знаю - что я не достаточно в этом вопросе компетентен (о чем сразу и написал) ну и с логикой что то у меня не так, из полезного - что код в форуме нужно вставлять нормально, а не как я зафигачил просто копипастом.

Итак, подправленный код по дельному совету двух участников форума (кусок кода)

Тестовый диод не включается.

Данные адресной строки

?AHONH=0&AHONM=30&AHOFFH=12&AHOFFM=45&AAUTO=1&AONOFF=0

Если кто то что то адекватное, не касаемое моей личности, а именно кода подскажет, буду признателен.

Всем мира и добра.

 EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
       readString += c;
        
        Serial.write(c);
        

      if (c == '\n') { 
    
     Serial.println(readString);  
    
    if (readString.indexOf("?AHONH=0") > 0) 
    { 
    digitalWrite (pin, HIGH);
    Serial.println("done");
    }
    else
    {
      digitalWrite (pin, LOW);
      Serial.println("try");
    }

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

я нихрена не понимаю в web  делах, но скомпилил скетч и сразу увидел предупреждение о нехватки памяти

чутка изменил, попробуйте, и посмотрите, что происходит в мониторе порта..

#include <SPI.h>
#include <Ethernet2.h>
#include <EEPROM.h>
#include <SPI.h>

uint8_t address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};
uint8_t transmitt_data[21];
uint8_t value;
uint8_t mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

IPAddress ip(192, 168, 178, 221);
EthernetServer server(80);
String readString;
char c;

uint8_t pin = 6; // test led

void setup() {
  pinMode (pin, OUTPUT); // test led
  Serial.begin(9600);
  while (!Serial);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    while (client.connected()) {
      if (client.available()) {
        c = client.read();
        readString += c;
        Serial.print(c);
        if (c == '\n') {
          Serial.println(readString);
          if (readString.indexOf("?AHONH=0") > 0)
          {
            digitalWrite (pin, HIGH);
            Serial.println("done");
          }
          else
          {
            digitalWrite (pin, LOW);
            Serial.println("try");
          }

          client.println(F("HTTP/1.1 200 OK"));
          client.println(F("Content-Type: text/html"));
          client.println(F("Connection: close"));  // the connection will be closed after completion of the response
          client.println(F("<?xml version= 1.0 encoding= UTF-8 ?>"));
          client.println(F("<!DOCTYPE html PUBLIC "));
          //client.println("Refresh: 5"));  // refresh the page automatically every 5 sec
          client.println();
          client.println(F("<!DOCTYPE HTML>"));
          client.println(F("<html>"));
          client.println(F("  <br>"));
          client.println(F(" <hr align= center  width= 300  size= 3 color= #0000dd  /> "));
          client.println(F(" <b> <center> Achtertuin <center> </b>"));
          client.println(F(" <hr align= center  width= 300  size= 3 color= #0000dd  /> "));
          client.println(F("<br>"));
          client.println(F(" <form>"));
          client.println(F(" &nbsp;  TIME ON &nbsp;"));
          client.println(F("<input type= number  name= AHONH  max= 23 min= 0  value=  style= width:60px </p>")); // окно ввода
          client.println(F("<input type= number  name= AHONM  max= 59 min= 0  value=   style= width:60px </p>")); // окно ввода
          client.println(F("<br>"));
          client.println(F(" &nbsp;  TIME OFF &nbsp;"));
          client.println(F("<input type= number  name= AHOFFH  max= 23 min= 0  value=   style= width:60px </p>")); // окно ввода
          client.println(F("<input type= number  name= AHOFFM  max= 59 min= 0  value=   style= width:60px </p>")); // окно ввода
          client.println(F(" <hr align= center  width= 300  size= 3  color= #dddddd  /> "));
          client.println(F("&nbsp; AUTO MODE &nbsp;"));
          client.println(F("<form>"));
          client.println(F("<select name= AAUTO >"));
          client.println(F("<option value= 2 > ON/OFF </option>"));
          client.println(F("<option value= 1 >ON</option>"));
          client.println(F("<option value= 0 >OFF</option>"));
          client.println(F("</select></p>"));
          client.println(F("&nbsp; ON OFF BUTTON &nbsp;"));
          client.println(F("<form>"));
          client.println(F("<select name= AONOFF >"));
          client.println(F("<option value= 2 > ON/OFF </option>"));
          client.println(F("<option value= 1 >OFF</option>"));
          client.println(F("<option value= 0 >ON</option>"));
          client.println(F("</select></p>"));
          client.println(F("</select>"));
          client.println(F("<p><input type= submit  value= SEND  ></p>"));
          client.println(F("</html>"));

          readString = "";
          break;
        }
      } else {
        readString = "";
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

 

oldxaker
Offline
Зарегистрирован: 23.07.2018

ДА!!!!

Включается именно при заданном параметре!!!

oldxaker
Offline
Зарегистрирован: 23.07.2018

(Объявление переменной с ещё раньше, чтобы использовать не только в цикле но по всему коду)

И из за отсутствия

 readString = "";

          break;
        }
      } else {
        readString = "";
      }

не выполнялся поиск по всей строке?

Я верно понимаю?

oldxaker
Offline
Зарегистрирован: 23.07.2018

xDriver Вы второй раз просто заходите и решаете проблему (вчера буквально подключал два CS модуля на те же пины)

Спасибо огромное!!!

Буду разбираться, рабочий пример теперь есть

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

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

работаете вы со string, ну ваше дело, я тоже работаю, тут его не любят хотя платформа ардуино, как и многе другие, его активно используют (тут пришлось С# чутка покывырять, ардуина отдыхает).

надо написать функцию, принимающию два параметра, например входную строку -

"?AHONH=0&AHONM=30&AHOFFH=12&AHOFFM=45&AAUTO=1&AONOFF=0

и итересующий вас токен "AHONH"

а вернет она вам значение этого токена, в надлежащем виде, хотите тот же стринг "0", либо это уже будет число.

вы же знаете что строка начинается с "?",  а разделители у нее "&", и заканчивается она "\n", а аргументы разделяются знаком "="

пример:

SearchToten("?AHONH=0&AHONM=30&AHOFFH=12&AHOFFM=45&AAUTO=1&AONOFF=0", "AHONH");

вернет либо стринг - "0", либо числовой 0.