Как HTTP отправить данные в Node Express API из Arduino esp8226? - PullRequest
0 голосов
/ 16 октября 2018

Я HTTP Отправка данных на веб-интерфейс API https://morning -cliffs-85779.herokuapp.com / api / users из arduino, подключенного к esp8226.Я использую библиотеку wizesp для HTTP_POST данных.

Когда сообщение публикуется, Arduino дает такой ответ:

 Connected to server
 [WiFiEsp] Data packet send error (2)
 [WiFiEsp] Failed to write to socket 3
 [WiFiEsp] Disconnecting  3

А сервер Heroku дает ответ:

at=error code=H13 desc="Connection closed without response"

Ниже приведен код Arduino:

if (client.connect(server, 80)) {
      Serial.println("Connected to server");
    // Make a HTTP request
    String content = "id=5bc58842bdfea0153bb27214&volt=7";
    client.println("POST /api/users HTTP/1.1");
    client.println("Host: morning-cliffs-85779.herokuapp.com:80");// ("Host": host:port)
    client.println("Accept: */*");
    client.println("Content-Length: " + content.length());
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println();
    client.println(content);
}

Это API-интерфейс экспресс-узла:

app.post('/api/users', function (req, res) {

    console.log('here');

    if (req.body.id) {
        DevReading.findByIdAndUpdate(req.body.id, {
            volt: req.body.volt
        }, function (err, reading) {
            if (err) throw err;

            res.send('Update Success');
        });
    }

    else {

        var newDevReading = DevReading ({
            deviceName: 'test',
            volt: req.body.volt
        });

        newDevReading.save(function (err) {
            if (err) throw err;
            res.send('Reading Post Success');
        });
    }

});

Ответы [ 2 ]

0 голосов
/ 22 октября 2018
if (client.connect(server, 80)) {
  Serial.println("Connected to server");
// Make a HTTP request
String content = "id=5bc58842bdfea0153bb27214&volt=7";
client.println("POST /api/users HTTP/1.1");
client.println("Host: morning-cliffs-85779.herokuapp.com:80");// ("Host": host:port)
client.println("Accept: */*");
client.println("Content-Length: " + content.length());
client.println("Content-Type: application/x-www-form-urlencoded");
client.println();
client.println(content);
client.println('\r\n\r\n');

}

лучше добавить следующую строку после ваших метаданных и после содержимого.Вы можете увидеть это здесь httpServer

0 голосов
/ 16 октября 2018

Сделал это.Вот код:

if (client.connectSSL(server, 443)) {
    Serial.println("Connected to server");
    // Make a HTTP request
    String PostData = content + volt;
    Serial.println(PostData);
    client.println("POST /api/users HTTP/1.1");
    client.println("Host: morning-cliffs-85779.herokuapp.com");
    client.println("Cache-Control: no-cache");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    client.println(PostData.length());
    client.println();
    client.println(PostData);
}

Надеюсь, это кому-нибудь поможет.

...