Как отправлять get запрос на веб сервер?

kirsanownic
Offline
Зарегистрирован: 13.02.2018

Привет всем, делаю подобие умного дома для школьного проекта. Имеется arduino r3 uno, ethernet shield, датчик DHT 11. Никак не выходит отправить данные температуры и влажности на поднятый веб сервер, да и понятия, как это делать правильно особо нет(php? mysql? как обработать запрос? как его отправить?), в интернете нигде нет нормальной инструкции. Помогите школьнику!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, в библиотеке же есть примеры. Не работают?

b707
Offline
Зарегистрирован: 26.05.2017

 Почитайте для начала основы HTTP-протокола - а то у вас все в вопросе смешано - клиенты и сервера, запросы и ответы, скрипты и базы данных. Для ардуины вам нужен только веб-клиент и запрос, все остальное делается на сервере и программируется отдельно.

kirsanownic
Offline
Зарегистрирован: 13.02.2018

Да, основная проблема, с которой я столкнулся, сервер не принимает никаких запросов от ардуино.  Посмотрите, почему? Сам серв: 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();
}

 

b707
Offline
Зарегистрирован: 26.05.2017

kirsanownic пишет:

Да, основная проблема, с которой я столкнулся, сервер не принимает никаких запросов от ардуино.  Посмотрите, почему?

Я вам уже написал "почему" - потому что вы основ не знаете, а беретесь что-то программировать. Вот это вот - откровенный бред:

client.print( "GET <a href="http://f00ee03e.ngrok.io" rel="nofollow">http://f00ee03e.ngrok.io</a>");

Почитайте в инете, как формируется GET запрос.

kirsanownic
Offline
Зарегистрирован: 13.02.2018

Понятия не имею, почему эта строчка изменилась в редакторе. Вот так выглядит отправка запроса:

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();
kirsanownic
Offline
Зарегистрирован: 13.02.2018

Пока что просто пытаюсь добиться того, чтобы в логах появился след от ардуино

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, попытайтесь отправить ардуиной типа такого: "http://myserver/sys/page.php?t=36&h=78"

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Вы отправляете запрос на адрес .iot= понятно что такого сервера нет, вот и следа никакого нет

b707
Offline
Зарегистрирован: 26.05.2017

kirsanownic пишет:

Понятия не имею, почему эта строчка изменилась в редакторе. Вот так выглядит отправка запроса:

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 - это, фактически, отдельный запрос. Сервер, наверно, с ума сходит от этих маленьких "укусов". Попробуйте сначала сформировать весь запрос в одной переменной, а потом отослать разом.

И для начала можно попробовать на сервере, который гарантировано отвечает - например яндекс или гугль.

 

b707
Offline
Зарегистрирован: 26.05.2017

Penni пишет:
Вы отправляете запрос на адрес .iot= понятно что такого сервера нет, вот и следа никакого нет

ну почему, может это адрес в локалке? У нас в локалке тоже внутренние DNS-адреса в домене .int

kirsanownic
Offline
Зарегистрирован: 13.02.2018

Разобрался! Тема закрыта, всем спасибо!

b707
Offline
Зарегистрирован: 26.05.2017

kirsanownic пишет:

Разобрался! Тема закрыта, всем спасибо!

и в чем была засада?