Program Socket ESP32 Mengirim Data Suhu dan Kelembapan melalui WiFi (Client)

T. Ezandi Trinanda
3 min readJul 3, 2021

ESP32 diperankan sebagai client untuk mengirim data dan menerima perintah dari server Python. Seperti diketahui sebelumnya bahwa ESP32 telah memiliki modul WiFi yang tertanam pada boardnya. Library untuk menggunakan fungsi dari WiFi juga sudah diinstal secara default saat board ESP32 diinstal pada Arduino IDE.

Untuk mengirimkan data suhu dan kelembapan ESP32 disambungkan dengan sensor DHT22.

Rangkaian ESP32 untuk Mengirim Data Suhu dan Kelembapan

Rangkaian breadboard ESP32 dengan sensor DHT22
Skema rangkaian ESP32 dengan sensor DHT22

Kode Mengirim Data dari Klien ke Server

#include “WiFi.h”
#include “DHT.h”
// Informasi sambungan Wi-Fi dan IP Address Server
const char* ssid = “nama_ssid”;
const char* password = “passwordnya”;
const char* host = “192.168.0.0”;
// Deklarasi Wi-Fi Server
WiFiClient client;
#define DHTPIN 4 // Digital pin yang tersambung ke Sensor DHT22
#define DHTTYPE DHT22 // Type Sensor DHT22
// Membuat Objek baru dht dengan parameter DHTPIN dan DHTTYPE
DHT dht(DHTPIN, DHTTYPE);
// Deklarasi variable h dan t secara global
float h = 0;
float t = 0;
#define TUNGGU_WIFI 250// Deklarasi konstanta Nilai Delay
#define TUNGGU_SETELAH_BACA_DATA 250// Deklarasi konstanta Nilai Delay
#define TUNGGU_SETELAH_KIRIM_DATA 250// Deklarasi konstanta Nilai Delay
// Fungsi untu baca Suhu
void bacaSuhudanKelembapan() {
t = dht.readTemperature();
h = dht.readHumidity();
}
// Fungsi untuk mengirim Data ke Server
void kirimData() {
bacaSuhudanKelembapan();
delay(TUNGGU_SETELAH_BACA_DATA);
if (client.connect(host, 10013)) {
//Kirim Data ke Terminal Server
if (isnan(t) || isnan(h) <= -1) {
client.println(“Gagal membaca DHT sensor!”);
}
else {
client.print(h);
client.println(t);
}
delay(TUNGGU_SETELAH_KIRIM_DATA);
}
}
void setup() {
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(TUNGGU_WIFI);
}
}
void loop() {
kirimData();
}

Library yang digunakan untuk menjalankan fungsi WiFi dan DHT pada ESP32.

#include “WiFi.h”
#include “DHT.h”

Informasi tentang koneksi WiFi yang akan digunakan, yaitu nama SSID dan sandi WiFi.

const char* ssid = “nama_ssid”;
const char* password = “passwordnya”;

Alamat IP host atau server yang digunakan

const char* host = “192.168.0.0”;

Deklarasi peran sebagai klien WiFi dan membuat objeknya dengan nama client. Objek ini digunakan untuk menginisialisasi fungsi yang digunakan oleh WiFi pada ESP32. Seperti untuk mengirim data, membaca data, dan banyak lagi.

WiFiClient client;

Menentukan atau mendefinisikan letak pin DHT22 yang terkoneksi pada ESP32.

#define DHTPIN 4

Memilih tipe sensor DHT yang digunakan. Tipe yang digunakan pada rangkaian ini adalah DHT22.

#define DHTTYPE DHT22

Membuat objek DHT dari pin dan tipe yang ditentukan sebelumnya

DHT dht(DHTPIN, DHTTYPE);

Deklarasi variabel h dan t dengan tipe data float

float h = 0;
float t = 0;

Deklarasi konstanta yang akan digunakan sebagai delay setelah membaca data dari sensor dan setelah mengirim data ke server.

#define TUNGGU_WIFI 250
#define TUNGGU_SETELAH_BACA_DATA 250
#define TUNGGU_SETELAH_KIRIM_DATA 250

Fungsi bacaSuhudanKelembapan() untuk baca suhu dan kelembapan udara. Data suhu disimpan dalam variabel t dan data kelembapan udara disimpan dalam variabel h.

void bacaSuhudanKelembapan() {
t = dht.readTemperature();
h = dht.readHumidity();
}

Fungsi kirimData() digunakan untuk mengirim data. Pada fungsi ini dipanggil fungsi bacaSuhudanKelembapan() untuk dieksekusi.

void kirimData() {
bacaSuhudanKelembapan();

Tunggu setelah membaca data.

delay(TUNGGU_SETELAH_BACA_DATA);

Percabangan if (client.connect(host, 10013)) digunakan untuk mengecek apakah client terkoneksi dengan host atau server pada port 10013.

if (client.connect(host, 10013)) {

Jika yang dibaca bukan berupa angka dan kecil atau sama dengan -1 maka pembacaan sensor dianggap gagal dan pesan error akan dikirim ke server.

if (isnan(t) || isnan(h) <= -1) {
client.println(“Gagal membaca DHT sensor!”);
}

Selain dari persyaratan diatas maka nilai kelembapan akan dikirim melalui perintah client.print(h). Sedangkan nilai suhu akan dikirim dengan perintah client.println(t).

else {
client.print(h);
client.println(t);
}

Tunggu setelah kirim data

delay(TUNGGU_SETELAH_KIRIM_DATA);

Pada fungsi setup, sensor DHT diinisialisasikan.

void setup() {
dht.begin();

Kemudian, gunakan WiFi.begin() untuk terhubung ke jaringan. Parameter yang digunakan adalah nama SSID jaringan WiFi yang akan digunakan dan sandinya.

WiFi.begin(ssid, password);

Proses menghubungkan ke jaringan Wi-Fi dapat memakan waktu cukup lama, sehingga ditambahkan perulangan untuk terus memeriksa apakah koneksi sudah dibuat dengan menggunakan WiFi.status(). Ketika koneksi berhasil dibuat, ia mengembalikan WL_CONNECTED.

while (WiFi.status() != WL_CONNECTED)
{
delay(TUNGGU_WIFI);
}
}

Pada fungsi loop(), isinya akan terus dieksekusi. Fungsi kirimData() akan terus dipanggil dan diulang pada loop.

void loop() {
kirimData();
}

--

--