← Semua artikel

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

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. Nilai 10000 berarti 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