Отправка HTTP-запроса с помощью ESP8266 - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь сделать запрос POST, используя мой esp8266.Я настроил webhook и пытаюсь вызвать его с помощью моего esp8266.Я пробовал различные методы, но это не похоже на работу.

Сначала я попытался использовать библиотеку ESP8266HTTPClient, но она не сработала.Затем я попытался сделать запрос на публикацию напрямую через client.println, но он также не работал.Когда я понял, что не могу отправить запросы http на настроенный мной веб-крючок, я начал отправлять его на локальный веб-сайт, который я сделал через экспресс, чтобы было проще протестировать его.При отправке простой команды curl я получаю правильный ответ, однако, когда я пытаюсь отправить http-вызов через esp8266, я не могу.

Вот моя попытка использования библиотеки ESP8266HTTPClient:

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>

const int sensorPin = 4;

WiFiServer server(80);

const  String altLink = "http://localhost:3000/message";

const String ssid = "shefer 2.4GHz";
const String password = "1234554321";

void setup() {
  Serial.begin(9600);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid,password);

  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }

  Serial.println();
  Serial.print("Connected, IP Address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop() {
  HTTPClient http;
  http.begin(altLink);
  http.addHeader("Content-Type", "text/plain");
  int sensorValue = int(analogRead(sensorPin)/128);
  if(sensorValue >= 0 && sensorValue <=3){
    Serial.println("Light is on, sending request");
    int httpCode = http.POST("Hello from esp8266");
    //int httpCode = http.POST("");
    Serial.println("HTTP Code: " + httpCode);
    if (httpCode != 200){
      Serial.println("Couldn't send the request, got code: " + httpCode);
    } else {
      Serial.println("Request was sent successfully");
    }
    http.end();
    delay(5000);
  }
 }

А вот моя попытка сделать запрос на публикацию напрямую через 'client.println'

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>

WiFiServer server(80);

const String ssid = "shefer 2.4GHz";
const String password = "1234554321";

void setup() {
  Serial.begin(9600);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid,password);

  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }

  Serial.println();
  Serial.print("Connected, IP Address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop() {
  WiFiClient client;
  String data;
  Serial.print("Requesting POST: ");
   // Send request to the server:
   client.println("POST /message HTTP/1.1");
   client.println("Host: localhost:3000");
   client.println("Accept: */*");
   client.println("Content-Type: text/plain");
   client.print("Content-Length: ");
   client.println(data.length());
   client.println();
   client.print(data);
   delay(50000);
 }

Я ожидаю, что esp8266 отправит запрос POST, но это не так.Я перепробовал много вещей, и я довольно отчаялся.Вся помощь будет принята с благодарностью.Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2019

Это не может работать в любом случае, потому что вы используете localhost в качестве пункта назначения.

localhost означает «сам» - это относится к компьютеру, который отправляет запрос.Так же как и IP-адрес 127.0.0.1.В этом случае они будут ссылаться на ESP8266, на котором работает ваш код, а не на веб-сервер, с которым вы пытаетесь установить связь.

Вам необходимо использовать фактическое имя или IP-адрес компьютера, с которого вы хотите отправитьпросьба, а не localhost.

...