Как отправлять get запрос на веб сервер?
- Войдите на сайт для отправки комментариев
Втр, 13/02/2018 - 20:13
Привет всем, делаю подобие умного дома для школьного проекта. Имеется arduino r3 uno, ethernet shield, датчик DHT 11. Никак не выходит отправить данные температуры и влажности на поднятый веб сервер, да и понятия, как это делать правильно особо нет(php? mysql? как обработать запрос? как его отправить?), в интернете нигде нет нормальной инструкции. Помогите школьнику!
Ну, в библиотеке же есть примеры. Не работают?
Почитайте для начала основы HTTP-протокола - а то у вас все в вопросе смешано - клиенты и сервера, запросы и ответы, скрипты и базы данных. Для ардуины вам нужен только веб-клиент и запрос, все остальное делается на сервере и программируется отдельно.
Да, основная проблема, с которой я столкнулся, сервер не принимает никаких запросов от ардуино. Посмотрите, почему? Сам серв: http://f00ee03e.ngrok.io
#include <SPI.h> #include <Ethernet.h> #include "DHT.h" //Константы #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Мак адрес EthernetClient client; //Переменные unsigned long int timeConn = millis(); // Частота отправки данных о t/h на сервер float h; // Значение температуры float t; // Значение влажности char server[] = "http://f00ee03e.ngrok.io"; /*-------------------------------------------------------------- Необходимые настройки --------------------------------------------------------------*/ void setup() { //Старт Serial.begin(9600); Ethernet.begin(mac); dht.begin(); } /*-------------------------------------------------------------- Основное тело программы --------------------------------------------------------------*/ void loop() { h = dht.readHumidity(); t = dht.readTemperature(); if (millis() - timeConn > 2000) { sendData(t,h); timeConn = millis(); Serial.println("CONNECT SERVER: Send temp/hum"); } } /*-------------------------------------------------------------- Функция отправляет данные о температуре и влажности на WEB сервер. --------------------------------------------------------------*/ void sendData(float t, float h) { client.connect(server, 80); client.print( "GET http://f00ee03e.ngrok.io"); client.print("t="); client.print(t); client.print("&"); client.print("h="); client.print(h); client.println(" HTTP/1.1"); client.print( "Host: " ); client.println(server); client.println( "Connection: close" ); client.println(); client.println(); client.stop(); client.flush(); }Да, основная проблема, с которой я столкнулся, сервер не принимает никаких запросов от ардуино. Посмотрите, почему?
Я вам уже написал "почему" - потому что вы основ не знаете, а беретесь что-то программировать. Вот это вот - откровенный бред:
client.print( "GET <a href="http://f00ee03e.ngrok.io" rel="nofollow">http://f00ee03e.ngrok.io</a>");
Почитайте в инете, как формируется GET запрос.
Понятия не имею, почему эта строчка изменилась в редакторе. Вот так выглядит отправка запроса:
Пока что просто пытаюсь добиться того, чтобы в логах появился след от ардуино
Ну, попытайтесь отправить ардуиной типа такого: "http://myserver/sys/page.php?t=36&h=78"
Вы отправляете запрос на адрес .iot= понятно что такого сервера нет, вот и следа никакого нет
Понятия не имею, почему эта строчка изменилась в редакторе. Вот так выглядит отправка запроса:
Каждый client.print - это, фактически, отдельный запрос. Сервер, наверно, с ума сходит от этих маленьких "укусов". Попробуйте сначала сформировать весь запрос в одной переменной, а потом отослать разом.
И для начала можно попробовать на сервере, который гарантировано отвечает - например яндекс или гугль.
ну почему, может это адрес в локалке? У нас в локалке тоже внутренние DNS-адреса в домене .int
Разобрался! Тема закрыта, всем спасибо!
Разобрался! Тема закрыта, всем спасибо!
и в чем была засада?