Как исправить "HTTP / 1.1 400 Bad Request" с Arduino Uno и ESP8266 - 01 - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь получить данные из darksky api для использования в небольшом проекте arduino.Я использую Arduino UNO и плату ESP8266. Я могу подключиться к Интернету через плату, но я очень застрял, когда дело доходит до запроса get.

Я пробовал много разных комбинаций строк, чтобы попытаться заставить запрос работать. Но, несмотря на все мои усилия, статус всегда "Неожиданный ответ: HTTP / 1.1 400 Bad Request".Я приложил свой код ниже.Я ценю любую помощь.

#include <ArduinoHttpClient.h>
#include "WiFiEsp.h"

#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"

// set up software serial to allow serial communication to our TX and RX pins
SoftwareSerial Serial1(10, 11);
#endif

// Set  baud rate of so we can monitor output from esp.
#define ESP8266_BAUD 9600


// CHANGE THIS TO MATCH YOUR SETTINGS
char ssid[] = "SSID";
char pass[] = "PASS";
char serverAddress[] = 
"https://api.darksky.net/forecast/KEY/44.64,-63.57?exclude=hourly,minutely,daily,alerts,flags";
int status = WL_IDLE_STATUS;

// Define an esp server that will listen on port 443 (https)
//WiFiEspServer server(443);
WiFiEspClient client;

void setup(){
// Open up communications for arduino serial and esp serial at same rate
Serial.begin(9600);
Serial1.begin(9600);

// Initialize the esp module
WiFi.init(&Serial1);

// Start connecting to wifi network and wait for connection to complete
while (status != WL_CONNECTED)
{
    Serial.print("Conecting to wifi network: ");
    Serial.println(ssid);

    status = WiFi.begin(ssid, pass);
}
digitalWrite(13,1);

// Once we are connected log the IP address of the ESP module
Serial.print("IP Address of ESP8266 Module is: ");
Serial.println(WiFi.localIP());
Serial.println("You're connected to the network");


client.setTimeout(10000);
if (!client.connect("api.darksky.net", 443)) {
  Serial.println(F("Connection failed"));
  return;
}
else{
  Serial.println("--- connected to api.darksky.net on port 443 ---");
}

  // Send HTTP request
client.println(F("GET /forecast/KEY/44.64,-63.57 HTTP/1.0"));
client.println(F("Host: api.darksky.net.org"));
client.println(F("Connection: close"));
if (client.println() == 0) {
  Serial.println(F("Failed to send request"));
  return;
}
else{
  Serial.println("--- Request sent ---");
}

// Check HTTP status
char status[32] = {0};
client.readBytesUntil('\r', status, sizeof(status));
if (strcmp(status, "HTTP/1.1 200 OK") != 0) {
  Serial.print(F("Unexpected response: "));
  Serial.println(status);
  return;
}

}

void loop(){
}

Спасибо за помощь.Я был бы очень признателен.Я не уверен, что проблема в моих строках.Или что я использую HTTP-клиент для доступа к материалам HTTPS.Еще раз спасибо.

...