Ошибка в отправке Post запроса

kirsanownic
Offline
Зарегистрирован: 13.02.2018
Не работает программа, найдите оишбку, пожалуйста 
 
#include <DHT.h>
#include <Ethernet.h>
#include <SPI.h>
 
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 }; // RESERVED MAC ADDRESS
EthernetClient client;
 
#define DHTPIN 2 // SENSOR PIN
#define DHTTYPE DHT11 // SENSOR TYPE - THE ADAFRUIT LIBRARY OFFERS SUPPORT FOR MORE MODELS
DHT dht(DHTPIN, DHTTYPE);
 
long previousMillis = 0;
unsigned long currentMillis = 0;
long interval = 2500; // READING INTERVAL
 
int t = 0;  // TEMPERATURE VAR
int h = 0;  // HUMIDITY VAR
String data;
 
void setup() { 
  Serial.begin(115200);
 
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP"); 
  }
 
  dht.begin(); 
  delay(1000); // GIVE THE SENSOR SOME TIME TO START
 
  h = (int) dht.readHumidity(); 
  t = (int) dht.readTemperature(); 
 
  data = "";
}
 
void loop(){
 
  currentMillis = millis();
  if(currentMillis - previousMillis > interval) { // READ ONLY ONCE PER INTERVAL
    previousMillis = currentMillis;
    h = (int) dht.readHumidity();
    t = (int) dht.readTemperature();
  }
 
  data = "t=", t , "&h=" , h;
 
  if (client.connect("http://aa8308b7.ngrok.io/",80)) { // REPLACE WITH YOUR SERVER ADDRESS
    client.println("POST /measurements HTTP/1.1"); 
    client.println("Host: http://aa8308b7.ngrok.io/"); // SERVER ADDRESS HERE TOO
    client.println("Content-Type: application/x-www-form-urlencoded"); 
    client.print("Content-Length: 6"); 
    client.println(data.length()); 
    client.println(); 
    client.print(data); 
  } 
 
  if (client.connected()) { 
    client.stop();  // DISCONNECT FROM THE SERVER
  }
 
  delay(5000); // WAIT FIVE MINUTES BEFORE SENDING AGAIN
}
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Первая ошибка - неправильно встален текст скетча.

2. Программа работает. Она всегда таботает так, как написана. Но не всегда так, как ее хотели написать. Если Вы хотите осмысленного обсуждения, следует написать:

- что программа по Вашему замыслу должна делать,

- что программа делает на самом деле,

- чем одно отличается от другого.

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

Программа должна  оправлять POST запрос на сервер http://aa8308b7.ngrok.io/ c данными h=число&t=число, но она этого не делает

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

А код правильно вставить? Не судьба?

kirsanownic
Offline
Зарегистрирован: 13.02.2018
#include <DHT.h>
#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 }; // RESERVED MAC ADDRESS
EthernetClient client;

#define DHTPIN 2 // SENSOR PIN
#define DHTTYPE DHT11 // SENSOR TYPE - THE ADAFRUIT LIBRARY OFFERS SUPPORT FOR MORE MODELS
DHT dht(DHTPIN, DHTTYPE);

long previousMillis = 0;
unsigned long currentMillis = 0;
long interval = 2500; // READING INTERVAL

int t = 0;  // TEMPERATURE VAR
int h = 0;  // HUMIDITY VAR
String data;

void setup() { 
  Serial.begin(115200);

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP"); 
  }

  dht.begin(); 
  delay(1000); // GIVE THE SENSOR SOME TIME TO START

  h = (int) dht.readHumidity(); 
  t = (int) dht.readTemperature(); 

  data = "";
}

void loop(){

  currentMillis = millis();
  if(currentMillis - previousMillis > interval) { // READ ONLY ONCE PER INTERVAL
    previousMillis = currentMillis;
    h = (int) dht.readHumidity();
    t = (int) dht.readTemperature();
  }

  data = "t=", t , "&h=" , h;

  if (client.connect("http://aa8308b7.ngrok.io/",80)) { // REPLACE WITH YOUR SERVER ADDRESS
    client.println("POST /measurements HTTP/1.1"); 
    client.println("Host: http://aa8308b7.ngrok.io/"); // SERVER ADDRESS HERE TOO
    client.println("Content-Type: application/x-www-form-urlencoded"); 
    client.print("Content-Length: 6"); 
    client.println(data.length()); 
    client.println(); 
    client.print(data); 
  } 

  if (client.connected()) { 
    client.stop();  // DISCONNECT FROM THE SERVER
  }

  delay(5000); // WAIT FIVE MINUTES BEFORE SENDING AGAIN
}

 

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

Вот эта строка data = "t=", t , "&h=" , h; это что? Вставьте Serial.println(data); после этой строки и посмотрите что будет.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Этот обморок так и будет канючить, вместо того, чтобы взять - и учиться. Уже какая тема с этим несчастным POST-запросом - третья? В строке 45 - дичь. В строке 51 - дичь, ибо кто гарантировал, что длина данных в data - ровно 6 символов?

По ходу, это бесполезно.

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

Не, раньше вроде про get были. Видимо, с get не получилось. Решено попробовать с post

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

Я просто жду, когда мне попадутся люди, которые могут помочь, а не просто говорить "иди учись" или "дичь". За совет по данным спасибо, исправил на 9, гарантирую, что будет ровно 9

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

Мне нужно оправить на сервер строчку t=*считанное датчиком число*&h=*считанное датчиком число*. Посоветуйте, как реализовать такое в string и запихнуть в запрос?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

kirsanownic пишет:

Я просто жду, когда мне попадутся люди, которые могут помочь, а не просто говорить "иди учись" или "дичь". За совет по данным спасибо, исправил на 9, гарантирую, что будет ровно 9

Нет, ты тупо не хочешь учиться элементарным вещам. Не будет ровно 9, можешь не гарантировать. У класса String есть метод length, который выдаёт длину хранящейся внутри строки. Нормальный программист напишет так:

client.print(F("Content-Length: "));
client.println(data.length());

и не будет подставлять magic numbers. Но тебе- пофигу, похоже, ведь гораздо проще запостить несколько раз один и тот же вопрос, и ждать, когда сделают за тебя, а ты в это время будешь греть свою ленивую жопу возле батареи.

kirsanownic пишет:

Мне нужно оправить на сервер строчку t=*считанное датчиком число*&h=*считанное датчиком число*. Посоветуйте, как реализовать такое в string и запихнуть в запрос?

Советую: читай примеры, там есть всё. Читай форум - тут есть кучу кусков кода, где работают со строками. Оторви жопу от батареи.