Monitoring Suhu dan Kelembapan ESP32 DHT11 ke AhrarTech IoT via HTTP API

Source Code
Berikut adalah source code ESP32 + DHT11 untuk membaca data suhu dan kelembapan, kemudian mengirimkan data tersebut ke AhrarTech IoT melalui HTTP API.
Sebelum meng-upload program ke ESP32, sesuaikan terlebih dahulu nama WiFi, password WiFi, Device Token, dan interval pengiriman data.
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <DHT.h>
// ==============================
// DHT11
// ==============================
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// ==============================
// WIFI
// ==============================
const char* WIFI_SSID = "NAMA_WIFI_ANDA";
const char* WIFI_PASSWORD = "PASSWORD_WIFI_ANDA";
// ==============================
// AHRAR IOT
// ==============================
const char* API_URL =
"https://iot.ahrartech.com/api/v1/device/telemetry";
const char* DEVICE_TOKEN =
"DEVICE_TOKEN_ANDA";
// Interval kirim data: 10 detik
const unsigned long SEND_INTERVAL = 10000;
unsigned long lastSend = 0;
// ==============================
// CONNECT WIFI
// ==============================
void connectWiFi() {
Serial.print("Connecting to WiFi");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
// ==============================
// SEND TELEMETRY
// ==============================
void sendTelemetry(float suhu, float kelembapan) {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi disconnected");
connectWiFi();
}
WiFiClientSecure client;
client.setInsecure();
HTTPClient http;
Serial.println();
Serial.println("-----------------------------");
Serial.println("Sending telemetry...");
if (!http.begin(client, API_URL)) {
Serial.println("Failed to connect to API");
return;
}
// ==============================
// HEADER
// ==============================
http.addHeader(
"Content-Type",
"application/json"
);
String authorization = "Bearer ";
authorization += DEVICE_TOKEN;
http.addHeader(
"Authorization",
authorization
);
// ==============================
// JSON PAYLOAD
// ==============================
String payload = "{";
payload += "\"suhu\":";
payload += String(suhu, 1);
payload += ",";
payload += "\"kelembapan\":";
payload += String(kelembapan, 1);
payload += "}";
Serial.print("Payload: ");
Serial.println(payload);
// ==============================
// HTTP POST
// ==============================
int httpCode = http.POST(payload);
Serial.print("HTTP Status: ");
Serial.println(httpCode);
if (httpCode > 0) {
String response = http.getString();
Serial.print("Response: ");
Serial.println(response);
if (httpCode >= 200 && httpCode < 300) {
Serial.println("Telemetry sent successfully");
} else {
Serial.println("Server returned an error");
}
} else {
Serial.print("HTTP error: ");
Serial.println(
http.errorToString(httpCode)
);
}
http.end();
}
// ==============================
// SETUP
// ==============================
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println();
Serial.println("=============================");
Serial.println("Ahrar IoT - ESP32 + DHT11");
Serial.println("=============================");
dht.begin();
connectWiFi();
}
// ==============================
// LOOP
// ==============================
void loop() {
if (millis() - lastSend >= SEND_INTERVAL) {
lastSend = millis();
// ==============================
// READ SENSOR
// ==============================
float kelembapan = dht.readHumidity();
float suhu = dht.readTemperature();
// ==============================
// VALIDATION
// ==============================
if (
isnan(suhu) ||
isnan(kelembapan)
) {
Serial.println("Failed to read DHT11!");
return;
}
// ==============================
// SERIAL OUTPUT
// ==============================
Serial.println();
Serial.println("DHT11 Data");
Serial.print("Suhu : ");
Serial.print(suhu, 1);
Serial.println(" °C");
Serial.print("Kelembapan : ");
Serial.print(kelembapan, 1);
Serial.println(" %");
// ==============================
// SEND TO AHRAR IOT
// ==============================
sendTelemetry(
suhu,
kelembapan
);
}
}
Parameter yang Perlu Diubah
Sebelum program di-upload ke ESP32, ubah konfigurasi berikut:
const char* WIFI_SSID = "NAMA_WIFI_ANDA";
const char* WIFI_PASSWORD = "PASSWORD_WIFI_ANDA";
const char* DEVICE_TOKEN =
"DEVICE_TOKEN_ANDA";
const unsigned long SEND_INTERVAL = 10000;
Keterangan:
WIFI_SSID→ nama jaringan WiFi.WIFI_PASSWORD→ password WiFi.DEVICE_TOKEN→ token device yang diperoleh dari AhrarTech IoT.SEND_INTERVAL→ interval pengiriman data dalam milidetik. Nilai10000berarti data dikirim setiap 10 detik.
Pastikan sebelum mulai:
- ESP32 board package: ESP32 by Espressif Systems
- DHT library: DHT sensor library by Adafruit
- Dependency: Adafruit Unified Sensor
- Driver USB ESP32 sudah terpasang
- Board dan Port di Arduino IDE sudah benar