отправить GET запрос на сайт
- Войдите на сайт для отправки комментариев
Чт, 15/05/2014 - 18:39
Ребята помогите все перерыл не могу понять как отправить GET запрос на сайт.
arduino ethernet shield должен отправить на сайт vivi.kz/index.php?t=4
Serial.println("connecting to server...");if(client.connect(serverName, 80)) {Serial.println("making HTTP request...");// Создаем GET HTTP-запрос:client.println("GET /index.php?t=4 HTTP/1.1");client.println("HOST: vivi.kz");client.println();}#include <DHT.h> #include <SPI.h> #include <Ethernet.h> #define DHTTYPE DHT22 #define DHTPIN 9 DHT dht(DHTPIN, DHTTYPE); int dhtTemp; int dhtHum; int dhtHIC; /******************** НАСТРОЙКИ ETHERNET ********************/ byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x85, 0xD9 };// физический mac адрес byte ip[] = { 192, 168, 0, 9 }; // ip в lan byte subnet[] = { 255, 255, 255, 0 }; // маска подсети byte gateway[] = { 192, 168, 0, 1 }; // шлюз по умолчанию EthernetServer server(80); // порт сервера void setup() { Ethernet.begin(mac,ip,gateway,subnet); // инициализировать Ethernet устройства server.begin(); // начать прослушивание клиентов dht.begin(); } void loop() { dhtCheck(); generateWebPage (); } void dhtCheck() { dhtTemp = dht.readTemperature(); dhtHum = dht.readHumidity(); dhtHIC = dht.computeHeatIndex(dhtTemp, dhtHum, false); } void generateWebPage () { EthernetClient client = server.available(); // искать клиента client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); client.println("<html>"); client.println("<head>"); client.println("<title>Lair module</title>"); client.println("<meta http-equiv=\"refresh\" content=\"15\">"); client.println("<meta http-equiv='content-type' content='text/html; charset=UTF-8'>"); client.println("</head>"); client.println("<body>"); client.println("<table>"); client.println("<tr>"); client.println("<td>"); client.println("<center>"); client.println("<b>Климат</b>"); client.println("</center>"); client.println("</td>"); client.println("</tr>"); client.println("<tr>"); client.println("<td>"); client.println("<b>Температура: </b>"); if (dhtHIC > 0) {client.print("+");} client.print(dhtHIC); client.println("°"); client.println("</td>"); client.println("</tr>"); client.println("<tr>"); client.println("<td>"); client.println("<b>Влажность: </b>"); client.print(dhtHum); client.println("%"); client.println("</td>"); client.println("</tr>"); client.println("</table>"); /* client.println("<h2>Observing State Of Switch</h2>"); client.print("<h2>Switch is: </2>"); if (digitalRead(8)) { client.println("<h3>ON</h3>"); } else { client.println("<h3>OFF</h3>"); } */ client.println("</body>"); client.println("</html>"); delay(1); // даем время, чтобы принять данные client.stop(); } // http://tehnopage.ru/ethernet-shield-w5100 // http://radioprog.ru/post/109каждую минуту или при изменении температуры?
костыль с IFRAME не сгодится ?
HTML код будет такой
iframe используется для подгрузки в основной хтмл код еще сторониие страницы сайтов, а так же легко справляется для осылки GET запросов ;)
а так как у вас в коде есть перезагрузка страницы каждые 15 секунд
то и GET запрос из фрейма тоже будет отсылаться с загрузкой вашей страницы
О! Спасибо, добрый человек! А как можно в моем скетче создать вторую страницу с именем, к примеру, debug?
Чтоб было 2 страницы -- основная (корневая) и /debug
И, кстати, костыль с IFRAME работает только если страница открыта в браузере. Есть ещё варианты по переодической отправке get-запроса БЕЗ открытия страницы в браузере?
О! Спасибо, добрый человек! А как можно в моем скетче создать вторую страницу с именем, к примеру, debug?
Чтоб было 2 страницы -- основная (корневая) и /debug
Дело в том что я не работал еще с ардуино+ethernet и очень смутно имею представление о его работе... жду пару посылок с ethernet шилдами...
И, кстати, костыль с IFRAME работает только если страница открыта в браузере. Есть ещё варианты по переодической отправке get-запроса БЕЗ открытия страницы в браузере?
Для подобных случаев на серверах с осями Linux используется демон cron, но как я понимаю в вашем случае (ардуино и ethernet шилд) тупо ардуина выводит в окно клиента (браузера) HTML код функцией generateWebPage, может все таки получать нужные данные не при помощи GET запроса к ардуино, а непосредственно в коде ардуино прописать выполнение данной операции через определенный промежуток времени?
Дело в том, что я хочу реализовать связку arduino + свой сервер. Ардуинка мониторит подключенные к ней датчики (температура, влажность, освещенность, движение и т.д.), выполняет какие либо действия при изменении значений датчиков и выводит состояния подключенных сенсоров на свою веб страницу (в примере за это отвечает функция generateWebPage). При этом, ардуинка должна с какой либо переодичностью (к примеру: каждые 3 минуты) или по событию (сработал датчик движения) скидывать значения датчиков на мой сервер.
Также нужно научить Arduino ПРИНИМАТЬ команды (к примеру зажигать или гасить светодиод) от основного сервера.
Установить Arduino Mega Server на Arduino UNO нет возможности.
big-vl, Просто сильно выручил!
Вопрос был как быть когда требуют не в домен отправлять а по адресу http(s)://narodmon.ru/api
bool SendToNarodmon() { // Собственно формирование пакета и отправка. // попытка подключения if (client.connect("narodmon.ru", 80)) { client.println("GET /api/sensorsValues?sensors=54516,54519,51830,51843,52446,54544,57282,4309&uuid=6524911116d2f82d04a711f67154f531&api_key=MyKey HTTP/1.1"); // и отправляем данные client.println("HOST:narodmon.ru"); client.println(); delay(150); while (client.available()) { String line = client.readStringUntil('\r'); // если что-то в ответ будет - все в Serial Serial.print(line); delay(10); } } else { Serial.println("connection failed"); return false; // не удалось; } } }