Невозможно опубликовать данные из ESP8266 - PullRequest
0 голосов
/ 10 января 2019

Я взял пример из этого поста:

Проводка данных ESP8266

Я также изменил настройки в соответствии со своей средой. Ниже приведен код для эскиза:

/*
 * HTTP Client POST Request
 * Copyright (c) 2018, circuits4you.com
 * All rights reserved.
 * https://circuits4you.com 
 * Connects to WiFi HotSpot. */

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#include "DHT.h"   //https://github.com/adafruit/DHT-sensor-library 

/* Set these to your desired credentials. */
const char *ssid = "myssid";  //ENTER YOUR WIFI SETTINGS
const char *password = "mypassword";

//Web/Server address to read/write from 
const char *host = "https://mysite.herokuapp.com/reading";   //https://circuits4you.com website or IP address of server

// Create the DHT temperature and humidity sensor object
DHT dht1(D4, DHT11);
DHT dht2(D7, DHT11);

//=======================================================================
//                    Power on setup
//=======================================================================

void setup() {
  delay(1000);
  Serial.begin(9600);
  WiFi.mode(WIFI_OFF);        //Prevents reconnection issue (taking too long to connect)
  delay(1000);
  WiFi.mode(WIFI_STA);        //This line hides the viewing of ESP as wifi hotspot

  WiFi.begin(ssid, password);     //Connect to your WiFi router
  Serial.println("");

  Serial.print("Connecting");
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  //If connection successful show IP address in serial monitor
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());  //IP address assigned to your ESP

   dht1.begin();
   dht2.begin();

}

//=======================================================================
//                    Main Program Loop
//=======================================================================
void loop() {

  // Read DHT temperature and humidity values
  float DHT11_t = dht1.readTemperature();
  float DHT11_h = dht1.readHumidity();

  float DHT21_t = dht2.readTemperature();
  float DHT21_h = dht2.readHumidity(); 


  //POST data routine starts here

  HTTPClient http;    //Declare object of class HTTPClient

  String postData;
//  int adcvalue=analogRead(A0);  //Read Analog value of LDR
//  ADCData = String(adcvalue);   //String to interger conversion
//  station = "A";

  //Post Data
  postData = "InttempC=" + String(DHT11_t) +"&InttempF=" + String(DHT11_t) + "&Inthum=" + String(DHT11_h) + "&ExttempC=" + String(DHT21_t) +"&ExttempF=" + String(DHT21_t) + "&Exthum=" + String(DHT21_h);

  http.begin("https://mysite.herokuapp.com/reading");              //Specify request destination
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");    //Specify content-type header

  int httpCode = http.POST(postData);   //Send the request
  String payload = http.getString();    //Get the response payload

  Serial.println(httpCode);   //Print HTTP return code
  Serial.println(payload);    //Print request response payload

  http.end();  //Close connection

  delay(60000);  //Post Data at every 60 seconds
}
//=======================================================================

Я также написал запрос на публикацию в Node / Express, и он отлично работает. Я проверил это с Почтальоном, и когда я отправляю вышеупомянутые шесть значений из Почтальона, они сохраняются. Ниже приведен код из вкладки запроса почтальона:

POST /reading HTTP/1.1
Host: mysite.herokuapp.com
Content-Type: application/x-www-form-urlencoded
cache-control: no-cache
Postman-Token: 2aaba4bc-54bd-4e0a-aeb1-d51d35445164
InttempC=99999InttempF=555Inthum=4ExttempC=545454ExttempF=55Exthum=77

Маршрут почтового запроса выглядит следующим образом (и на самом деле он работает нормально при доступе из Почтальона):

// Process Form
app.post('/reading', (req, res) => {
    const newReading = {
        InttempC: req.body.InttempC,
        InttempF: req.body.InttempF,
        Inthum: req.body.Inthum,
        ExttempC: req.body.ExttempC,
        ExttempF: req.body.ExttempF,
        Exthum: req.body.Exthum
    }
    new Reading(newReading)
        .save();
});

Я поставлен в тупик, так как на мониторе последовательного порта я вижу, что мой NodeMCU подключается, ему назначается IP-адрес, а затем, когда выполняется почтовый запрос, он возвращает код ответа -1, с которым я не могу разобраться, где проблема.

...