Я HTTP отправляю данные в веб-api https://morning-cliffs-85779.herokuapp.com/api/users с arduino, подключенного к esp8226. Я использую библиотеку wifesp для 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-интерфейс node express:
app.post('/api/users', function (req, res) {
console.info('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');
});
}
});





Сделал это. Вот код:
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);
}
Надеюсь, это кому-то поможет.
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
Я отвечаю на этот вопрос здесь: stackoverflow.com/questions/67828007/…