I was building an IoT device and uses mongodb atlas as my backend. My ESP32 has to POST data to the database. I uses arduino IDE and here’s my code:
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
/************ Useful Setup Constants *****************/
const char* AtlasAPIEndpoint = "https://ap-southeast-1.aws.data.mongodb-api.com/app/data-<id>/endpoint/data/v1/action/insertOne";
const char* AtlasAPIKey = <my_api_key>;
const char* ssid = "*******";
const char* password = "*********";
/* This one Works with Atlas OK*/
const char* rootCACertificate =
"-----BEGIN CERTIFICATE-----n"
"MIIF6TCCA9GgAwIBAgIQBeTcO5Q4qzuFl8umoZhQ4zANBgkqhkiG9w0BAQwFADCBn"
"iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pln"
"cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVn"
"BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwn"
"OTEyMDAwMDAwWhcNMjQwOTExMjM1OTU5WjBfMQswCQYDVQQGEwJGUjEOMAwGA1UEn"
"CBMFUGFyaXMxDjAMBgNVBAcTBVBhcmlzMQ4wDAYDVQQKEwVHYW5kaTEgMB4GA1UEn"
"AxMXR2FuZGkgU3RhbmRhcmQgU1NMIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBn"
"DwAwggEKAoIBAQCUBC2meZV0/9UAPPWu2JSxKXzAjwsLibmCg5duNyj1ohrP0pILn"
"m6jTh5RzhBCf3DXLwi2SrCG5yzv8QMHBgyHwv/j2nPqcghDA0I5O5Q1MsJFckLSkn"
"QFEW2uSEEi0FXKEfFxkkUap66uEHG4aNAXLy59SDIzme4OFMH2sio7QQZrDtgpbXn"
"bmq08j+1QvzdirWrui0dOnWbMdw+naxb00ENbLAb9Tr1eeohovj0M1JLJC0epJmxn"
"bUi8uBL+cnB89/sCdfSN3tbawKAyGlLfOGsuRTg/PwSWAP2h9KK71RfWJ3wbWFmVn"
"XooS/ZyrgT5SKEhRhWvzkbKGPym1bgNi7tYFAgMBAAGjggF1MIIBcTAfBgNVHSMEn"
"GDAWgBRTeb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUs5Cn2MmvTs1hPJ98n"
"rV1/Qf1pMOowDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDn"
"VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCIGA1UdIAQbMBkwDQYLKwYBBAGyn"
"MQECAhowCAYGZ4EMAQIBMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNln"
"cnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNyn"
"bDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRyn"
"dXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZn"
"aHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAWGf9n"
"crJq13xhlhl+2UNG0SZ9yFP6ZrBrLafTqlb3OojQO3LJUP33WbKqaPWMcwO7lWUXn"
"zi8c3ZgTopHJ7qFAbjyY1lzzsiI8Le4bpOHeICQW8owRc5E69vrOJAKHypPstLbIn"
"FhfFcvwnQPYT/pOmnVHvPCvYd1ebjGU6NSU2t7WKY28HJ5OxYI2A25bUeo8tqxyIn"
"yW5+1mUfr13KFj8oRtygNeX56eXVlogMT8a3d2dIhCe2H7Bo26y/d7CQuKLJHDJdn"
"ArolQ4FCR7vY4Y8MDEZf7kYzawMUgtN+zY+vkNaOJH1AQrRqahfGlZfh8jjNp+20n"
"J0CT33KpuMZmYzc4ZCIwojvxuch7yPspOqsactIGEk72gtQjbz7Dk+XYtsDe3CMWn"
"1hMwt6CaDixVBgBwAc/qOR2A24j3pSC4W/0xJmmPLQphgzpHphNULB7j7UTKvGofn"
"KA5R2d4On3XNDgOVyvnFqSot/kGkoUeuDcL5OWYzSlvhhChZbH2UF3bkRYKtcCD9n"
"0m9jqNf6oDP6N8v3smWe2lBvP+Sn845dWDKXcCMu5/3EFZucJ48y7RetWIExKREan"
"m9T8bJUox04FB6b9HbwZ4ui3uRGKLXASUoWNjDNKD/yZkuBjcNqllEdjB+dYxzFfn"
"BT02Vf6Dsuimrdfp5gJ0iHRc2jTbkNJtUQoj1iM=n"
"-----END CERTIFICATE-----n";
WiFiClient client;
char lastid[25] = "0";
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("ESP32-CAM IP Address: ");
Serial.println(WiFi.localIP());
getLightDefinition();
}
void loop() {
}
void getLightDefinition() {
WiFiClientSecure client;
client.setCACert(rootCACertificate);
HTTPClient https;
if (!https.begin(client, AtlasAPIEndpoint)) {
Serial.println("[HTTPS] Unable to connect");
return;
}
https.addHeader("Content-Type", "application/json");
https.addHeader("Access-Control-Request-Headers", "*");
https.addHeader("api-key", AtlasAPIKey);
DynamicJsonDocument payload(1024);
payload["dataSource"] = "test";
payload["database"] = "testmakentu";
payload["collection"] = "test";
payload["document"]["time"] = "08:00";
payload["document"]["daysofweek"] = "WED";
String JSONText;
serializeJson(payload, JSONText);
int httpCode = https.POST(JSONText);
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
String payload = https.getString();
Serial.println(payload);
DynamicJsonDocument description(32687);
DeserializationError error = deserializeJson(description, payload);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.c_str());
return;
}
}
} else {
Serial.printf("[HTTPS] POST ... failed, error: %sn", https.errorToString(httpCode).c_str());
}
https.end();
}
When I run the code, serial monitor shows:[HTTPS] POST ... failed, error: connection refused
.
Actually I am just deleting some code from here:
https://github.com/mongodb-developer/xmas_2021_tree_camera/blob/main/ESP32-Arduino/mongo_xmastree/mongo_xmastree.ino
I tried to use postman to POST data and it worked, so I sure that the problem was not that I didn’t have access, and also I know my wifi works ok.
So I guess the problem occurs in the rootCACertificate part. Is my assumption correct? If so, how can I fix it or get another rootCACertificate? Thanks!