Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.06.2015, 01:30   #1
avgaz
Senior Member
 
Регистрация: 05.10.2014
Сообщений: 190
Вес репутации: 0
avgaz is an unknown quantity at this point
По умолчанию Разобрать GET на W5100

Пришли мне шилды w5100 все вроде не чего работают нормально, но столкнуля с такой проблемой не могу понять как разобрать get запрос который берётся из url например по запросу ссылки http://192.168.0.55/?nasos=on берется вот эта часть ?nasos=on и уже выполняется условие вот оп такому коду

Код:
 relestatus = EEPROM.read(addr);
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 100) {
          readString += c;
        } 
        if (c == '\n') {
         // Serial.println(readString); //print to serial monitor for debuging

          client.println("HTTP/1.1 200 OK"); //send new page
          client.println("Content-Type: text/html");
          client.println();
           client.print(temp1);
    
        if(readString.indexOf("?nasos=on") >0)
          {
            digitalWrite(11, HIGH);
            EEPROM.write(addr, 1);
            digitalWrite(2, HIGH);
          }
if(readString.indexOf("?nasos=off") >0)
          {
           digitalWrite(11, LOW);
            EEPROM.write(addr, 0);
          }
           client.print(digitalRead(11));
          delay(1);
          client.stop();
          readString="";
        

        }
      }
    }
  }
Но вот как сделать, что бы получить значение после = к примеру ссылка http://192.168.0.55/?time=3000 нужно взять из неё 3000 и записать в EEPROM вот как получить данные после = ??
avgaz вне форума   Ответить с цитированием
Старый 21.06.2015, 09:05   #2
Alex19279
Senior Member
 
Регистрация: 20.09.2014
Сообщений: 145
Вес репутации: 0
Alex19279 will become famous soon enough
По умолчанию Re: Разобрать GET на W5100

Спутал с веб-кодом, у вас скетч.

Последний раз редактировалось Alex19279; 21.06.2015 в 09:56.
Alex19279 вне форума   Ответить с цитированием
Старый 21.06.2015, 10:19   #3
Tohin
Moderator
 
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031
Tohin is a jewel in the roughTohin is a jewel in the roughTohin is a jewel in the rough
По умолчанию Re: Разобрать GET на W5100

отсюда:
Цитата:
Б) Теперь в скетче, в строке кода HTTP_req += c; Ардуина считывает весь GET запрос посимвольно. Т.е. после прочтения всего запроса в переменной HTTP_req хранится весь непонятный вам мусор. Но там также находится и строчка с нашими переданными переменными. Т.е. второй крупный шаг программы - это анализ полученного текста и вытаскивание из него тех переменных и их значений, которые пришли с запросом. Тут, по сути, вы работаете с текстом. И тут все зависит только от вашей логики - работаете ли вы с одной переменной или множеством, приходит ли каждый раз четкий набор переменных или каждый раз могут приходить разные переменные по одиночке и т.п. Но, используя стандартные функции работы с текстом, анализ текста не должен вызвать трудностей.
МК еще не обзавелся, поэтому деталей не знаю.
В Perl это выглядело так:
Код:
@pairs = split(/&/, $ENV{'QUERY_STRING'});
foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$FORM{$name} = $value;
		}
В результате в массиве $FORM оказывались пары типа:
$FORM{'time'}=3000

UPD:
Вот тут про разбитие строки на дуине.

Последний раз редактировалось Tohin; 21.06.2015 в 10:28.
Tohin вне форума   Ответить с цитированием
Старый 21.06.2015, 13:59   #4
vitfil
Junior Member
 
Регистрация: 04.02.2014
Адрес: Минск
Возраст: 51
Сообщений: 20
Вес репутации: 0
vitfil is an unknown quantity at this point
Отправить сообщение для vitfil с помощью Skype™
По умолчанию Re: Разобрать GET на W5100

Топикстартер, вы разыскиваете готовую реализацию или вас интересует алгоритм? Если второе, внемлете:
1. Находите символы ? или & в строке. Все, что до, отбрасываете вместе с ним.
2. Находите символ = До него - имя параметра. После (до символа & или когца строки) - значение параметра.
Это вариант посимвольного парсинга строки url.
vitfil вне форума   Ответить с цитированием
Старый 21.06.2015, 14:38   #5
avgaz
Senior Member
 
Регистрация: 05.10.2014
Сообщений: 190
Вес репутации: 0
avgaz is an unknown quantity at this point
По умолчанию Re: Разобрать GET на W5100

Цитата:
Сообщение от vitfil Посмотреть сообщение
Топикстартер, вы разыскиваете готовую реализацию или вас интересует алгоритм? Если второе, внемлете:
1. Находите символы ? или & в строке. Все, что до, отбрасываете вместе с ним.
2. Находите символ = До него - имя параметра. После (до символа & или когца строки) - значение параметра.
Это вариант посимвольного парсинга строки url.
Мне бы просто пример разбра хотя бы этой ссылки http://192.168.0.55/?time=3000
avgaz вне форума   Ответить с цитированием
Старый 21.06.2015, 14:57   #6
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Разобрать GET на W5100

Сканируете строку(массив) в цикле пока packid не будет =8

PHP код:
void packet_id(uint8_t inbyte)
{     
    switch (
inbyte)  
    {
       case 
'm':   
          
packid=2;  
        break;
        
       case 
'e':   
          
packid*=2;   
        break; 
        
       case 
'=':   
           
packid*=4
        break;   
        
        default:
           
packid=0;  
    }

Admin вне форума   Ответить с цитированием
Старый 21.06.2015, 19:30   #7
avgaz
Senior Member
 
Регистрация: 05.10.2014
Сообщений: 190
Вес репутации: 0
avgaz is an unknown quantity at this point
По умолчанию Re: Разобрать GET на W5100

Цитата:
Сообщение от Admin Посмотреть сообщение
Сканируете строку(массив) в цикле пока packid не будет =8

PHP код:
void packet_id(uint8_t inbyte)
{     
    switch (
inbyte)  
    {
       case 
'm':   
          
packid=2;  
        break;
        
       case 
'e':   
          
packid*=2;   
        break; 
        
       case 
'=':   
           
packid*=4
        break;   
        
        default:
           
packid=0;  
    }

Что то я не совсем понял, зачем мне перебирать массив? у меня ?time=3000 ведь не постоянная там может быть и ?time=5000 и тд
avgaz вне форума   Ответить с цитированием
Старый 21.06.2015, 23:47   #8
Wagan
Senior Member
 
Регистрация: 02.06.2015
Адрес: Москва
Сообщений: 168
Вес репутации: 0
Wagan is an unknown quantity at this point
Отправить сообщение для Wagan с помощью Skype™
По умолчанию Re: Разобрать GET на W5100

Так Вам и показали, как добраться при разборе строки до числа. Находите 'me=', далее разбираете строку, считывая искомое число.
Wagan вне форума   Ответить с цитированием
Старый 22.06.2015, 08:32   #9
vitfil
Junior Member
 
Регистрация: 04.02.2014
Адрес: Минск
Возраст: 51
Сообщений: 20
Вес репутации: 0
vitfil is an unknown quantity at this point
Отправить сообщение для vitfil с помощью Skype™
По умолчанию Re: Разобрать GET на W5100

Цитата:
Сообщение от avgaz Посмотреть сообщение
Мне бы просто пример разбра хотя бы этой ссылки http://192.168.0.55/?time=3000
Так пример и есть готовое решение!
vitfil вне форума   Ответить с цитированием
Старый 22.06.2015, 08:39   #10
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Разобрать GET на W5100

Еще нужно было добавить проверку
PHP код:
 if ( packid == 16 
  {
     
packid=0//обнулить для следующего сканирования строки
     
... 
 } 
Admin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 01:55. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика