Библиотека Ethernet2 и GET на модуле w5500
- Войдите на сайт для отправки комментариев
Втр, 24/07/2018 - 13:04
Всем привет!
Второй день сижу на форуме в поиске ответа,
приходит строка (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 начал изучать потому то интересно и в следствеии хочу менно понять, а не просто дернуть откуда то код)
Благодарю.
. Del
Хм..а я думал indexof относится к поиску подстроки, но да к библиотеки не относится.
Del это предложение удалить тему?
Где ещё искать помощи, если не специализированных форумах?)
Подскажите как это задачу решить, а именно о каких операторах почитать, какая логика должна быть?
в примерах, которые нашли по подобным темам именно через indexof получали данные из строки и далее присваивали значение переменным и тп, поэтому его и указал, что не означает что это верное решение)
Подскажите как это задачу решить, а именно о каких операторах почитать, какая логика должна быть?
Так мы же и хотим Вам подсказать, а Вы нам палки в колёса ставите. Вот Вы писали
пробовал, не получается
На что я попросил Вас показать как именно Вы пробовали и что именно не получилось, не помните?
Как пробовали? Что не получается?
Ну, так давайте, выкладывайте Ваш, код как именно Вы пробовали и объясняйте что именно не получилось. Чего ж Вы этого не делаете?
Евгений, Вас понял, пардон, торможу
Код, пробовали взять хотя бы первый параметр и включить тестовый светодиод при соответствии
Del это предложение удалить тему?
х?)
Нет, это просто удалённое сообщение.
[/quote]
Ну, так давайте, выкладывайте Ваш, код как именно Вы пробовали и объясняйте что именно не получилось. Чего ж Вы этого не делаете?
[/quote]
Евгений, нашел Ваш пост по похожей тематике, Вы точно знаете ответ))
Там сложно для начинающего, подскажите направление.
Тут многие могут знать ответ, для начала корректно код выложить надо.
Если делать так, то ругается на Ethernet
char *data = (char *) Ethernet::buffer + pos;
Как все сложно, как непросто ответить без самолюбования и прокачки ЭГО.
Я рад, что Вы являетесь хранителем сего тайного знания, почет и слава)))
За замечание спасибо, исправляюсь
Хорошего вечера (искренее)
Как все сложно, как непросто ответить без самолюбования и прокачки ЭГО.
да нет тут никакого самолубования. Вас просто просят правильно вставить код . То. как вы вставили выше - очень неудобно для обсуждения. так как там, во-первых, нет подсветки синтаксиса, а во-вторых - САМОЕ ГЛАВНОЕ - нет номеров строк.
Код без номерации строк обсуждать очень сложно - непонятно, как указать. о какой строке речь.
Так что не считайте это троллингом, а не ленитесь перевыложить код.
Как все сложно, как непросто ответить без самолюбования и прокачки ЭГО.
А Вы не ёрничайте. Ответить по неправильно выложенному коду действительно очень сложно. Как Вы себе видите совет по той простыне, что была выложена? Например: В строке №ХЗ добаьте {, строки с №ХЗ по №ХЗ удалите вовсе, и т.д. Понравилось? С номерами строк становится возможным какое-то обсуждение.
Так что не надо качать права, вот сейчас Вы нормально выложили, наверняка кто-то посмотрит и что-нибудь разумное скажет.
а что 54 строка закомментирована? Как же вы найдете в строке readstring нужную подстроку, если вы данные от клиента в эту строку не сохраняете?
Как все сложно, как непросто ответить без самолюбования и прокачки ЭГО.
А Вы не ёрничайте. Ответить по неправильно выложенному коду действительно очень сложно. Как Вы себе видите совет по той простыне, что была выложена? Например: В строке №ХЗ добаьте {, строки с №ХЗ по №ХЗ удалите вовсе, и т.д. Понравилось? С номерами строк становится возможным какое-то обсуждение.
Так что не надо качать права, вот сейчас Вы нормально выложили, наверняка кто-то посмотрит и что-нибудь разумное скажет.
Евгений, какие права? Никаких прав, пришел за помощью поэтому ни о каком ёрничестве речь не идет. За подсказку поблагодарил, так что если показалось поведение неадекватным - пардон.
Подскажите направление, вот об этом прошу, о каких операторах-командах почитать для выполнения задачи, об этом речь, заний в этом направлении нет, коды готовые читать сложно, поэтому и вопрос в каком направлении учить теорию )
а что 54 строка закомментирована? Как же вы найдете в строке readstring нужную подстроку, если вы данные от клиента в эту строку не сохраняете?
компилятор ругается на эту строку
'c' was not declared in this scope
Я бы тоже ругался, если бы мне приказали "иди за хлебом", а деньги через неделю пообещали дать. Посмотрите, где вы декларируете 'c', а где используете.
Как все сложно, как непросто ответить без самолюбования и прокачки ЭГО.
да нет тут никакого самолубования. Вас просто просят правильно вставить код . То. как вы вставили выше - очень неудобно для обсуждения. так как там, во-первых, нет подсветки синтаксиса, а во-вторых - САМОЕ ГЛАВНОЕ - нет номеров строк.
Код без номерации строк обсуждать очень сложно - непонятно, как указать. о какой строке речь.
Так что не считайте это троллингом, а не ленитесь перевыложить код.
Благодарю, возможно был излишне эмоционален, два дня ковыряюсь понять не могу логику, не имел цели как то задеть. Еще раз пардон.
компилятор ругается на эту строку
'c' was not declared in this scope
приехали...
oldxaker - ответьте честно, вы что, вообще не знаете языка си? - ну так, для определенности. чтобы мы тут знали, до какого уровня вам надо все разжевывать?
Касательно этой ошибки - неужели сами не додумались? - поменяйте строки 54 и 55 местами - и ошибка исчезнет.
Строку надо раскомментировать, без нее не заработает.
oldxaker - ответьте честно, вы что, вообще не знаете языка си? - ну так, для определенности. чтобы мы тут знали, до какого уровня вам надо все разжевывать?
Он же oldxaker. Скорее всего "писал на ассемблере драйверы ядра"(TM)
oldxaker - ответьте честно, вы что, вообще не знаете языка си? - ну так, для определенности. чтобы мы тут знали, до какого уровня вам надо все разжевывать?
Он же oldxaker. Скорее всего "писал на ассемблере драйверы ядра"(TM)
Я написал выше - новичок, можно уровень 0, буду признателен )
компилятор ругается на эту строку
'c' was not declared in this scope
приехали...
oldxaker - ответьте честно, вы что, вообще не знаете языка си? - ну так, для определенности. чтобы мы тут знали, до какого уровня вам надо все разжевывать?
Касательно этой ошибки - неужели сами не додумались? - поменяйте строки 54 и 55 местами - и ошибка исчезнет.
Строку надо раскомментировать, без нее не заработает.
благодарю, дождался совета )
Поменял (понял создание переменной шло после обращения к ней, тупо, согласен), не ругается, залил, диод тестовый не загорается
Может вы еще и Arduino IDE Serial Monitor не открывали?..
Может вы еще и Arduino IDE Serial Monitor не открывали?..
Это такая кнопочка в углу? )))
Вроде открывал, но не закрывал точно
Подскажите направление, вот об этом прошу, о каких операторах-командах почитать для выполнения задачи...
Подскажите, какие буквы надо выучить, чтобы писать стихи.
"Все" - не предлагать!
Подскажите направление, вот об этом прошу, о каких операторах-командах почитать для выполнения задачи...
Подскажите, какие буквы надо выучить, чтобы писать стихи.
"Все" - не предлагать!
+5
улыбнуло, дельное замечание)
А ищете вы какую строку?
Туповат в этом, новичок, хочу научиться поэтому спрашиваю. Желающие потренироваться в остроумии - велкам. Не обидчив)))
А ищете вы какую строку?
Ищу ?AHONH=10
Если меняю параметр на странице - строка меняется, то есть если там стоит 10 условите так же не обрабатывается
GET /?AHONH=10&AHONM=7&AHOFFH=3&AHOFFM=6&AAUTO=2&AONOFF=2 HTTP/1.1
то есть результат тот же
А ищете вы какую строку?
Ищу ?AHONH=10
а если внимательно посмотреть в код - ищете ?AHONH=0. И совершенно очевидно, что ни ?AHONH=10 ни ?AHONH=5 с вашей строкой поиска никогда не совпадет. Поэтому диод и не загорается.
Коллеги, вы уж простите, что я по простому, прямым текстом. Намеками, имхо, тут бесполезно, человек полный ноль.
А ищете вы какую строку?
Ищу ?AHONH=10
а если внимательно посмотреть в код - ищете ?AHONH=0. И совершенно очевидно, что ни ?AHONH=10 ни ?AHONH=5 с вашей строкой поиска никогда не совпадет. Поэтому диод и не загорается.
Коллеги, вы уж простите, что я по простому, прямым текстом. Намеками, имхо, тут бесполезно, человек полный ноль.
Нет, проблема однозначно не в этом. Я подставлял разные значения.
А ищете вы какую строку?
Ищу ?AHONH=10
а если внимательно посмотреть в код - ищете ?AHONH=0. И совершенно очевидно, что ни ?AHONH=10 ни ?AHONH=5 с вашей строкой поиска никогда не совпадет. Поэтому диод и не загорается.
Коллеги, вы уж простите, что я по простому, прямым текстом. Намеками, имхо, тут бесполезно, человек полный ноль.
Коллеги, надеюсь поймут Ваш порыв плебею помочь)
Нет, проблема однозначно не в этом. Я подставлял разные значения.
вот вы интересный... Вы так и не ответили на вопрос, знаете ли вы Си - а теперь еще один вопрос подоспел - а как у вас с логикой?
Зачем вы "подставляли разные значения" ? Разве не очевидно, что если вы ищете ANON=0. то подставлять лбые другие значения бессмысленно?
Попробуйте послать такой запрос
GET /?AHONH=0&AHONM=7&AHOFFH=3&AHOFFM=6&AAUTO=2&AONOFF=2 HTTP/1.1
и посмотрите, а вдруг заработает.
На алиэкспрессе глупую ардуину продали - не может она сообразить, что AHONH=5 это то же самое, что и AHONH=0, только число другое. Предлагаю вернуть ее по гарантии.
Нет, проблема однозначно не в этом. Я подставлял разные значения.
вот вы интересный... Вы так и не ответили на вопрос, знаете ли вы Си - а теперь еще один вопрос подоспел - а как у вас с логикой?
Зачем вы "подставляли разные значения" ? Разве не очевидно, что если вы ищете 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 и вот я выслушиваю дельные мнения знающих людей
На алиэкспрессе глупую ардуину продали - не может она сообразить, что AHONH=5 это то же самое, что и AHONH=0, только число другое. Предлагаю вернуть ее по гарантии.
+5 Хорошо. Убрали )
Этот же код на шилде w5100 и библиотеке Etheret работает, так же замечательн обрабатывается строка через
if (strncmp("?AHONH=10 ", data, 8) == 0)
Сейчас w5500 библиотека Ethernet2 и вот я выслушиваю дельные мнения знающих людей
Вот вам совет: возьмите скетч, который замечательно работает с W5100, замените в нем #include <Ethernet.h> на #include <Ethernet2.h> и наслаждайтесь жизнью.
Этот же код на шилде w5100 и библиотеке Etheret работает, так же замечательн обрабатывается строка через
if (strncmp("?AHONH=10 ", data, 8) == 0)
Сейчас w5500 библиотека Ethernet2 и вот я выслушиваю дельные мнения знающих людей
Вот вам совет: возьмите скетч, который замечательно работает с W5100, замените в нем #include <Ethernet.h> на #include <Ethernet2.h> и наслаждайтесь жизнью.
Вы точно пониматете о чем пишете?
Ладно. Всем удачи и самореализации в чем то более существенном, чем указание на незнание тому, кто просит совета.
Удачи!
Вот вам совет: возьмите скетч, который замечательно работает с W5100, замените в нем #include <Ethernet.h> на #include <Ethernet2.h> и наслаждайтесь жизнью.
Вы точно пониматете о чем пишете?
Сразили наповал. Я умываю руки.
Вот вам совет: возьмите скетч, который замечательно работает с W5100, замените в нем #include <Ethernet.h> на #include <Ethernet2.h> и наслаждайтесь жизнью.
Вы точно пониматете о чем пишете?
Сразили наповал. Я умываю руки.
Откройте две библиотеки и найдите 5 отличий в первых 10 стоках)
Оставлю запрос, может кто то зайдет и сможет подсказать.
за 44 сообщения я лишь узнал то, что и так знаю - что я не достаточно в этом вопросе компетентен (о чем сразу и написал) ну и с логикой что то у меня не так, из полезного - что код в форуме нужно вставлять нормально, а не как я зафигачил просто копипастом.
Итак, подправленный код по дельному совету двух участников форума (кусок кода)
Тестовый диод не включается.
Данные адресной строки
?AHONH=0&AHONM=30&AHOFFH=12&AHOFFM=45&AAUTO=1&AONOFF=0
Если кто то что то адекватное, не касаемое моей личности, а именно кода подскажет, буду признателен.
Всем мира и добра.
я нихрена не понимаю в web делах, но скомпилил скетч и сразу увидел предупреждение о нехватки памяти
чутка изменил, попробуйте, и посмотрите, что происходит в мониторе порта..
ДА!!!!
Включается именно при заданном параметре!!!
(Объявление переменной с ещё раньше, чтобы использовать не только в цикле но по всему коду)
И из за отсутствия
не выполнялся поиск по всей строке?
Я верно понимаю?
xDriver Вы второй раз просто заходите и решаете проблему (вчера буквально подключал два CS модуля на те же пины)
Спасибо огромное!!!
Буду разбираться, рабочий пример теперь есть
ну получилось, хорошо, я бы не стал так возбуждаться, что нужно сделать:
работаете вы со 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.