Ошибка в отправке Post запроса
- Войдите на сайт для отправки комментариев
Сб, 17/02/2018 - 14:37
Не работает программа, найдите оишбку, пожалуйста
#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
}
1. Первая ошибка - неправильно встален текст скетча.
2. Программа работает. Она всегда таботает так, как написана. Но не всегда так, как ее хотели написать. Если Вы хотите осмысленного обсуждения, следует написать:
- что программа по Вашему замыслу должна делать,
- что программа делает на самом деле,
- чем одно отличается от другого.
Программа должна оправлять POST запрос на сервер http://aa8308b7.ngrok.io/ c данными h=число&t=число, но она этого не делает
А код правильно вставить? Не судьба?
Вот эта строка data = "t=", t , "&h=" , h; это что? Вставьте Serial.println(data); после этой строки и посмотрите что будет.
Этот обморок так и будет канючить, вместо того, чтобы взять - и учиться. Уже какая тема с этим несчастным POST-запросом - третья? В строке 45 - дичь. В строке 51 - дичь, ибо кто гарантировал, что длина данных в data - ровно 6 символов?
По ходу, это бесполезно.
Не, раньше вроде про get были. Видимо, с get не получилось. Решено попробовать с post
Я просто жду, когда мне попадутся люди, которые могут помочь, а не просто говорить "иди учись" или "дичь". За совет по данным спасибо, исправил на 9, гарантирую, что будет ровно 9
Мне нужно оправить на сервер строчку t=*считанное датчиком число*&h=*считанное датчиком число*. Посоветуйте, как реализовать такое в string и запихнуть в запрос?
Я просто жду, когда мне попадутся люди, которые могут помочь, а не просто говорить "иди учись" или "дичь". За совет по данным спасибо, исправил на 9, гарантирую, что будет ровно 9
Нет, ты тупо не хочешь учиться элементарным вещам. Не будет ровно 9, можешь не гарантировать. У класса String есть метод length, который выдаёт длину хранящейся внутри строки. Нормальный программист напишет так:
и не будет подставлять magic numbers. Но тебе- пофигу, похоже, ведь гораздо проще запостить несколько раз один и тот же вопрос, и ждать, когда сделают за тебя, а ты в это время будешь греть свою ленивую жопу возле батареи.
Мне нужно оправить на сервер строчку t=*считанное датчиком число*&h=*считанное датчиком число*. Посоветуйте, как реализовать такое в string и запихнуть в запрос?
Советую: читай примеры, там есть всё. Читай форум - тут есть кучу кусков кода, где работают со строками. Оторви жопу от батареи.