Официальный сайт компании Arduino по адресу arduino.cc
Ethernet Client не хочет работать с URL
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 10/01/2019 - 23:04
Задача:
Ложить данные в базу данных на сервере, передача идет методом get.
Но дело в том что на домашнем сервере все работает замечательно, обращение к серверу по ip,
И вручную, типа: http://192.168.10.21/get.php?data1ard=1.00&data2ard=2.00&data3ard=3.00
И ардуина нормально подключается, и передает данные.
К удаленному серверу доступ только по URL
Вручную все работает: http://site.com.ua/get.php?data1ard=1.00&data2ard=2.00&data3ard=3.00
А ардуино ни как не может достучаться.
В чем может быть проблемы?
#include <Ethernet.h> float a=1, b=2, c=3; String msg = "GET /get.php?data1ard="+ String(a) + "&data2ard="+String(b) + "&data3ard="+String(c); byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 }; IPAddress ip(192, 168, 10, 22); byte server[] = { 192, 168, 10, 21 }; //char server[] = "www.site.com.ua"; void setup() { } void loop() { EthernetClient client; Ethernet.begin(mac, ip); delay(1000); client.connect(server, 80); client.println(msg); client.println(" HTTP/1.1"); client.println("Connection: close"); client.println(); client.println(); delay (2000); client.stop(); }
DNS, gateway в ethernet.begin() не указаны. И вообще - что он в лупе делает?
Спасибо за ответ.
Так:
Но при компиляции ругается:
Параметры функции точками не разделяются. Строкой выше - верный синтаксис.
упс, поправил.
Только вот данные на сервер так и не доходят(
У меня не ходило из-за роутера давно не перезагружавшегося. (Микротик)
Тоже микротик, и все с ним в порядке, ну и перезагружен, на всякий случай.
упс, поправил.
Только вот данные на сервер так и не доходят(
https://www.arduino.cc/en/Reference/ClientConnect - проверяйте код возврата функции connect(). Подставьте временно ip-адрес своего публичного сервера. Может файрволл рубит.
Если микротик, посмотрите торчем - есть попытка коннекта или нет.
Сервер, на хостинге, доступ только по урлу, в том и загвоздка что на одном ip несколько url.
У меня не ходило из-за роутера давно не перезагружавшегося. (Микротик)
Это не роутер виноват скорее всего. Предполагаю, что после теста сменили ip или mac в скетче. А ARP-запись закэшировалось на старые. Менять надо одновременно оба адреса, иначе возможны произвольные глюки до того, как ARP не протухнет и не обновится.
Сервер, на хостинге, доступ только по урлу, в том и загвоздка что на одном ip несколько url.
В любом случае нужно чем-то посередине послушать, иначе диагноз не поставить.
Или сделайте get с какого-нить ya.ru. Если данные придут, то значит ресолв есть и нат работает.
Не совсем понял, извините.
С ARP все ок, проверил таблицу, ну и в скетче не менял.
Меняю только адрес сервера.
В экзамплах к библиотеке есть ВебКлиент - он делает get со внешнего сервера и результат вываливает в Serial. Вот им проверьте - работает ли, в принципе, коннект на внешку с таким маком, ип, днс-ом..
В скетче заменил
char server[] = "www.edelweise.com.ua";
IPAddress ip(192, 168, 10, 22);
Так вы со своими настройками пытайте. DHCP-то может раздавать не то, чем вы инициализируете...
Так вроди бы так и сделал.
Смотрите внимательней. Экзампл получает адрес и пр.по DHCP - это в логе видно. Тогда или свой скетч заставьте по DHCP все получать или экзампл правьте под статику.
У меня на роутере привязана ардуино по маку, на статический ip.
Но честно говоря не совсем понятно какая разница с какого локального ip будет идти запрос.
Суть не в адресе, как таковом. Один скетч работает, другой нет - вам нужно найти почему. Методу я вам подсказал.
Проблема решена.
Суть в том что нужно указывать виртуальный хост в запросе:
Спасибочки, как ни как натолкнули на анализ выхлопа с сервера.