Отправка и прием данных от сервера
- Войдите на сайт для отправки комментариев
Сб, 24/12/2016 - 15:53
Добрый день.
Подскажите как можно реализовать отправку данных с arduino с помощью W5100 на сервер php и принять ответ от сервера.
Т.е. ардуинка к примеру каждый час отправляет GET запросом единицу "1"
Код (C++):
client.connect(server, 80);
client.print( "GET /index.php?int=1");
Эта единица уходит на сервер. Сервер принимает, обрабатывает эту единицу и в конце своего скрипта посылает GET на ардуинку. Ардуинка принимает данные от сервера и выдает внешний признак(мигает диод, пищит, дергает серву и т.д).
На данный момент ардуинка умеет отправлять данные на сервер и сервер их обрабатывает. Но вот удачно отработал скрипт или нет ардуинка не знает. Хотелось бы что бы ардуинка могла принимать от сервера что то вроде "1" или "0".
Клиент посылает GET-запрос серверу, сервер возвращает клиенту содержимое файла, в твоем случае index.php, который может содержать всё что тебе угодно, в том числе "0" или "1".
Вопрос в том и состоит. Как клиенту т.е. arduino принять от сервера ответ? По сути можно же вернуть GET ардуинке. Как этот GET ардуинкой принять и прочитать я не знаю.
client.read()
Эта единица уходит на сервер. Сервер принимает, обрабатывает эту единицу и в конце своего скрипта посылает GET на ардуинку.
С какого перепугу это сервер GET отправляет (превращаясь, тем самым, в клиента, кстати)? Он что, приболел?
Курите вебовские протоколы до полного понимания мехнанизма взаимодействия сервера и клиента.
По сути можно же вернуть GET ардуинке.
Если она не за фаирволом и ... ещё миллион условий. Серверы так никогда не делают. Запрос посылает всегда клиент. Дело сервера - отвечать на запросыы, а не слать их.
Всем спасибо ответ нашел тут же на форуме.
client.connect(server, 80);
client.print( "GET /index.php?dat=");
client.print(dat);
client.println();
delay (50);
if (client.connected())
{
while (client.available())
{
char inChar = client.read();
currentLine += inChar;
if (currentLine == "1")
{
tone(3,800,200);
delay(2000);
}
if(currentLine == "0")
{
tone(3,1000,200);
}
}
client.stop();
}
Напишите пожалуйста код сервера, а то тоже мучаюсь с данной проблемой
Не нужен тебе на ардуине сервер. Внимательно прочитай ответы #4 и #5.
Я говорю не про сервер на ардуино, я спрашиваю какой код на сервере обрабатывает запрос от ардуино и отправляет ответ
Любой стандартный HTTP-сервер.
Можешь послать запрос на Яндекс или Гугль - и он тебе на ардуину ответит.
А если у меня свой сервер на который я посылаю запрос, как мне обратно отправить на дуню данные?
В виде ответа на запрос.
Вы в браузере когда посылаете запрос, как Вам сервер отправляет эту страницу, которую Вы сейчас читаете? Неужели get шлёт? Он просто отвечает на запрос.
не надо "отправлять на дуню данные". Сервер это сделает сам, АВТОМАТИЧЕСКИ. Это его работа.
В самом простом случае, если положить на сервере данные для ардуины в файл ardu.htm в каталоге /bbb/, то отправив с ардуины запрос
GET /bbb/ardu.htm
- в ответ получишь содержимое этого файла.
Для подробностей Вам стоит почитать основы работы HTTP-протокола.
ЕвгенийП, объясняю ситуацию.
Есть хостинг. На нем скрипт, который обрабатывает входящие данные и отправляет ответ. Дуня должна принять этот ответо и обработать принятые данные.
Проблем с отправкой на сервер не возникло, а обратно уже не выходит. Сервер просто возвращает json ответ, дуина получает что-то подобное этому:\
Еще дополнительный вопрос: как обращаться к дуине от сервера, без ее запроса? Например по какому либо событию на самом сервере
Еще дополнительный вопрос: как обращаться к дуине от сервера, без ее запроса? Например по какому либо событию на самом сервере
никак.
Это делается по другому - ардуина сама должна обращаться к серверу через определенные промежутки времени - например раз в 5 минут и проверять, нет ли для нее данных.
Проблем с отправкой на сервер не возникло, а обратно уже не выходит. Сервер просто возвращает json ответ, дуина получает что-то подобное этому:
Извиняюсь, как то отправилось без меня :)
Так вот, как убрать все лишнее и получить json
Извиняюсь, как то отправилось без меня :)
Так вот, как убрать все лишнее и получить json
Все что выше пустой строки - это служебная информация. Ее можно просто игнорировать.
После пустой строки начинается собственно содержание ответа. Его нужно парсить - то есть искать нужные части по каким-то признакам, например кавычкам и тп
А что такое 1e и 0? Сервер это не передает...
А что такое 1e и 0? Сервер это не передает...
Передаёт. Если бы не передавал, их бы не было. Это длина следующей строки.
как обращаться к дуине от сервера, без ее запроса? Например по какому либо событию на самом сервере
НИкак.
Вы просто не понимаете смысла слов "сервер" и "клиент". Запомните. Клиент посылает запросы серверу, а тот отвечает, и никогда наоборот. Просто по определению этих слов. Если Ваш протокол устроен так, что два компьютера посылают запросы друг-другу, значит они у Вас меняются ролями - то один сервер, а друго - клиент, то наоборот. Запрос всегда идёт от клиента к серверу. Это просто определение этих терминов. Если клиенту нужно часто получать информацию от сервера, значит он должен часто запрашивать.