Pendahuluan

Dokumentasi ini akan menjelaskan kepada anda bagaimana ESP32 dapat terhubung dengan platform Antares, membaca data dari beberapa sensor, dan mengambil dan mengirim data yang telah dibaca akan pada platform Antares.

Hardware

Untuk mengukur kondisi suhu dan intensitas cahaya, dibutuhkan beberapa perangkat elektronik. Berikut adalah beberapa perangkat yang akan digunakan pada contoh ini:

  • ESP32
  • Perangkat untuk membaca data hasil pengukuran sensor. Board yang akan digunakan adalah WeMos Lolin32 ESP32
  • DHT11
  • Sensor untuk mengukur suhu dan kelembapan
  • LDR
  • Sensor untuk mengukur intensitas cahaya

Software

Berikut adalah beberapa software yang dibutuhkan untuk menjalankan contoh-contoh pada dokumentasi ini:

Program Dasar Arduino ESP32

Segmen berikut berisi contoh-contoh program yang dapat anda coba untuk menjalankan beberapa fungsi pada ESP32.

Setiap board ESP32 mempunyai LED di dalamnya yang bisa anda kontrol dengan mengakses dan memberi logika HIGH atau LOW pada pin GPIO2 di board ESP32. Perlu diingat bahwa LED di ESP32 adalah Active Low, yang berarti jika diberi logika 1 (HIGH), LED akan mati. Sebaliknya, jika diberi logika 0 (LOW), LED akan menyala.
#define led 2                 // Buat variabel "led" sebagai pin GPIO2

void setup() {
  pinMode(led, OUTPUT);       // Atur pin "led" sebagai OUTPUT
}

void loop() {
  digitalWrite(led, HIGH);    // Matikan LED
  delay(1000);                // Jeda 1 detik
  digitalWrite(led, LOW);     // Nyalakan LED
  delay(1000);                // Jeda 1 detik
}

GPIO
GPIO pada board ESP32 biasanya ditandai dengan angka 0 sampai dengan 39. Setiap pin memiliki fitur yang berbeda-beda sesuai kegunaannya masing-masing. Silahkan ikuti rangkaian sambungan ESP32 dengan LED sesuai gambar berikut: (NB. resistor bernilai sekitar 220 ohm) esp32-led-schematic esp32-led-fritzing
#define led1 25               // Buat variabel "led1" sebagai pin 25
#define led2 26               // Buat variabel "led2" sebagai pin 26

void setup() {
  pinMode(led1, OUTPUT);      // Atur pin "led1" sebagai OUTPUT
  pinMode(led2, OUTPUT);      // Atur pin "led2" sebagai OUTPUT
}

void loop() {
  digitalWrite(led1, HIGH);   // Nyalakan LED 1
  digitalWrite(led2, LOW);    // Matikan LED 2
  delay(1000);                // Jeda 1 detik
  digitalWrite(led1, LOW);    // Matikan LED 1
  digitalWrite(led2, HIGH);   // Nyalakan LED 2
  delay(1000);                // Jeda 1 detik
}

Serial Monitor
Serial monitor berfungsi untuk mengirim data dari ESP32 ke port serial komputer untuk menampilkan data di komputer.
void setup() {
  Serial.begin(115200);     // Buka komunikasi serial pada baudrate 115200
}

int angka = 0;              // Buat variabel angka dengan nilai 0

void loop() {
  Serial.print("Angka: ");  // Kirim angka ke serial monitor
  Serial.println(angka);
  angka++;                  // Tambah variabel angka +1
  delay(1000);              // Jeda 1 detik
}

Sensor Cahaya
Silahkan gunakan rangkaian dengan LDR seperti berikut: LDR - Schematic LDR - Fritzing
void setup() {
  Serial.begin(115200);               // Buka komunikasi serial pada baudrate 115200
}

void loop() {
  int sensorCahaya = analogRead(A0);   // Baca nilai sensor
  Serial.println(sensorCahaya);       // Kirim nilai sensor ke serial monitor
  delay(1000);                        // Jeda 1 detik
}

Sensor Temperatur
Pada sensor temperatur DHT11, diperlukan library DHT11. Silahkan gunakan rangkaian seperti berikut: DHT11 - Schematic DHT11 - Fritzing
#include "DHT.h"            // Inisiasi library DHT11
#define DHTPIN 15           // Buat variabel DHTPIN, mengarah pada pin 15
#define DHTTYPE DHT11       // Tentukan tipe DHT menjadi DHT11
DHT dht(DHTPIN, DHTTYPE);   // Buat objek dht

void setup() {
	Serial.begin(9600);      // Buka komunikasi serial pada baudrate 9600
	dht.begin();             // Inisiasi objek dht
}

void loop() {
	float hum = dht.readHumidity();      // Baca kelembapan
	float temp = dht.readTemperature();  // Baca temperatur
	if (isnan(hum) || isnan(temp)) {     // Cek jika sensor error
      Serial.println("Gagal Membaca DHT sensor!");
      return;
	}
	Serial.println("Humidity: " + (String)hum + " %");       // Print kelembapan (%)
	Serial.println("Temperature: " + (String)temp + " *C");  // Print temperatur (*C)
	delay(1000);
}

Antares HTTP

Di bawah ini adalah beberapa contoh-contoh kode untuk mengirim dan menerima data melalui HTTP pada database Antares dengan ESP32.

Kirim Data
Contoh kode untuk pengiriman data ada di File > Examples > Antares ESP32 HTTP > AntaresStoreData
#include <AntaresESP32HTTP.h>

#define ACCESSKEY "your-access-key"       // Ganti dengan access key akun Antares anda
#define WIFISSID "your-wifi-ssid"         // Ganti dengan SSID WiFi anda
#define PASSWORD "your-wifi-password"     // Ganti dengan password WiFi anda

#define applicationName "your-application-name"   // Ganti dengan application name Antares yang telah dibuat
#define deviceName "your-device-name"     // Ganti dengan device Antares yang telah dibuat

AntaresESP32HTTP antares(ACCESSKEY);    // Buat objek antares

void setup() {
  Serial.begin(115200);     // Buka komunikasi serial dengan baudrate 115200
  antares.setDebug(true);   // Nyalakan debug. Set menjadi "false" jika tidak ingin pesan-pesan tampil di serial monitor
  antares.wifiConnection(WIFISSID,PASSWORD);  // Mencoba untuk menyambungkan ke WiFi
}

void loop() {
  // Isi variabel dengan nilai acak, dengan tipe data yang berbeda
  int temp = random(25,30) ;
  int hum = random(75,90);
  float windsp = float(random(20, 30))/3.33;
  float rainlv = float(random(0, 20))/6.99;
  String lat = "-6.8718189";
  String lon = "107.5872477";

  // Memasukkan nilai-nilai variabel ke penampungan data sementara
  antares.add("temperature", temp);
  antares.add("humidity", hum);
  antares.add("wind_speed", windsp);
  antares.add("rain_level", rainlv);
  antares.add("latitude", lat);
  antares.add("longitude", lon);

  // Kirim dari penampungan data ke Antares
  antares.send(applicationName, deviceName);
  delay(10000);
}

Ambil Data Terakhir
Kode ini akan mengambil data terakhir yang terekam di device application Antares anda.
Contoh kodenya bisa dilihat pada File > Examples > Antares ESP32 HTTP > AntaresGetLatestData
#include <AntaresESP32HTTP.h> // Inisiasi library HTTP Antares ESP32

#define ACCESSKEY "your-access-key"       // Ganti dengan access key akun Antares anda
#define WIFISSID "your-wifi-ssid"         // Ganti dengan SSID WiFi anda
#define PASSWORD "your-wifi-password"     // Ganti dengan password WiFi anda 

#define applicationName "your-application-name"   // Ganti dengan application name Antares yang te
#define deviceName "your-device-name"    // Ganti dengan device Antares yang telah dibuat

AntaresESP32HTTP antares(ACCESSKEY);      // Buat objek antares

void setup() {
  Serial.begin(115200);     // Buka komunikasi serial dengan baudrate 115200
  antares.setDebug(true);   // Nyalakan debug. Set menjadi "false" jika tidak ingin pesan-pesan tampil di serial monitor
  antares.wifiConnection(WIFISSID,PASSWORD);  // Mencoba untuk menyambungkan ke WiFi
}

void loop() {
  // Mengambil data terakhir ke penampungan data
  antares.get(applicationName, deviceName);

  // Mendapatkan data individu
  int temp = antares.getInt("temperature");
  int hum = antares.getInt("humidity");
  float windsp = antares.getFloat("wind_speed");
  float rainlv = antares.getFloat("rain_level");
  String lat = antares.getString("latitude");
  String lon = antares.getString("longitude");

  // Kirim ke serial monitor
  Serial.println("Temperature: " + String(temp));
  Serial.println("Humidity: " + String(hum));
  Serial.println("Wind speed: " + String(windsp));
  Serial.println("Rain level: " + String(rainlv));
  Serial.println("Latitude: " + lat);
  Serial.println("Longitude: " + lon);
  delay(10000);
}

Antares MQTT

Di bawah ini adalah beberapa contoh-contoh kode untuk mengirim dan menerima data melalui MQTT pada database Antares dengan ESP32. Mendengarkan data (subscribe) dapat berupa real-time, yang berarti setiap ada masuk ke database Antares melalui topik MQTT, data tersebut akan dibaca oleh ESP32 secara langsung.

Kirim (Publish)
Contoh kode untuk pengiriman data ke topic akun antares anda ada di File > Examples > Antares ESP32 MQTT > AntaresMQTTPublish
#include <AntaresESP32MQTT.h>     // Inisiasi library MQTT Antares

#define ACCESSKEY "your-access-key"       // Ganti dengan access key akun Antares anda
#define WIFISSID "your-wifi-ssid"         // Ganti dengan SSID WiFi anda
#define PASSWORD "your-wifi-password"     // Ganti dengan password WiFi anda

#define applicationName "your-application-name"   // Ganti dengan application name Antares yang telah dibuat
#define deviceName "your-device-name"     // Ganti dengan device Antares yang telah dibuat

AntaresESP32MQTT antares(ACCESSKEY);    // Buat objek antares

void setup() {
  Serial.begin(115200);     // Buka komunikasi serial dengan baudrate 115200
  antares.setDebug(true);   // Nyalakan debug. Set menjadi "false" jika tidak ingin pesan-pesan tampil di serial monitor
  antares.wifiConnection(WIFISSID,PASSWORD);  // Mencoba untuk menyambungkan ke WiFi
  antares.setMqttServer();  // Inisiasi server MQTT Antares
}

void loop() {
  /*
    Cek koneksi ke broker MQTT Antares. Jika disconnect,
    akan dicoba untuk menyambungkan lagi
   */
  antares.checkMqttConnection();

  // Inisiasi variabel
  int temp = random(25,30) ;
  int hum = random(75,90);
  float windsp = float(random(20, 30))/3.33;
  float rainlv = float(random(0, 20))/6.99;
  String lat = "-6.8718189";
  String lon = "107.5872477";

  // Tambahkan variabel ke penampungan data sementara
  antares.add("temperature", temp);
  antares.add("humidity", hum);
  antares.add("wind_speed", windsp);
  antares.add("rain_level", rainlv);
  antares.add("latitude", lat);
  antares.add("longitude", lon);

  // Publish data ke database Antares dan juga broker MQTT Antares
  antares.publish(applicationName, deviceName);
  delay(5000);
}

Mendengarkan (Subscribe)
Contoh kode untuk mendengarkan topic MQTT akun antares anda ada di File > Examples > Antares ESP32 MQTT > AntaresMQTTSubscribe
#include <AntaresESP32MQTT.h>     // Inisiasi library MQTT Antares

#define ACCESSKEY "your-access-key"       // Ganti dengan access key akun Antares anda
#define WIFISSID "your-wifi-ssid"         // Ganti dengan SSID WiFi anda
#define PASSWORD "your-wifi-password"     // Ganti dengan password WiFi anda

#define applicationName "your-application-name"   // Ganti dengan application name Antares yang telah dibuat
#define deviceName "your-device-name"     // Ganti dengan device Antares yang telah dibuat

AntaresESP32MQTT antares(ACCESSKEY);    // Buat objek antares

/*
  Fungsi utama untuk mendapatkan topik dan payload dari setiap
  pesan MQTT yang diterima oleh ESP32.
*/
void callback(char topic[], byte payload[], unsigned int length) {

  antares.get(topic, payload, length);  // Menyimpan topic dan payload ke penampungan data sementara

  Serial.println("New Message!");
  Serial.println("Topic: " + antares.getTopic());     // Print topic
  Serial.println("Payload: " + antares.getPayload()); // Print payload

  // Print data-data yang telah didapatkan
  Serial.println("Temperature: " + String(antares.getInt("temperature")));
  Serial.println("Humidity: " + String(antares.getInt("humidity")));
  Serial.println("Wind speed: " + String(antares.getFloat("wind_speed")));
  Serial.println("Rain level: " + String(antares.getFloat("rain_level")));
  Serial.println("Latitude: " + antares.getString("latitude"));
  Serial.println("Longitude: " + antares.getString("longitude"));
}

void setup() {
  Serial.begin(115200);     // Buka komunikasi serial dengan baudrate 115200
  antares.setDebug(true);   // Nyalakan debug. Set menjadi "false" jika tidak ingin pesan-pesan tampil di serial monitor
  antares.wifiConnection(WIFISSID,PASSWORD);  // Mencoba untuk menyambungkan ke WiFi
  antares.setMqttServer();  // Inisiasi server MQTT Antares
  antares.setCallback(callback);  // Set fungsi callback menjadi fungsi callback seperti di atas
}
void loop() {
  /*
    Cek koneksi ke broker MQTT Antares. Jika disconnect,
    akan dicoba untuk menyambungkan lagi
   */
  antares.checkMqttConnection();
}