Mengintegrasikan Sensor DHT 11 dan BME280 dengan LCD I2C

Shafa Amarsya Madyaratri
5 min readFeb 24, 2020

--

Hello readers!

Pada artikel kali ini aku akan berbagi pengalaman dalam mengintegrasikan sensor DHT 11 dan BME 280 dengan layar LCD I2C. Hasil pembacaan dari kedua sensor yang biasanya ditampilkan ke serial monitor dari IDE Arduino, dicoba untuk ditampilkan pada layar LCD.

Sensor DHT11
Sensor BME280 (6 pin)
I2C LCD 16x2

Komponen dan Alat

Berikut adalah komponen dan alat yang digunakan pada projek kali ini:

  1. Board ESP32 DOIT DEVKIT V1
  2. I2C Liquid Crystal Display (LCD) 16×2
  3. Kabel jumper
  4. Breadboard
  5. Kabel micro-USB to USB 2.0/3.0
  6. Sensor DHT11
  7. Sensor BME280
  8. Resistor 4.7 kΩ

Menuliskan Hasil Pembacaan Sensor DHT11 pada LCD

Skema

Untuk dapat menggunakan sensor DHT11 dan LCD I2C, aku merangkai skema seperti gambar berikut:

Skema DHT11 + LCD

DHT11 dihubungkan dengan ESP32 menggunakan salah satu digital pin yang ada pada board ESP32. Pada percobaan ini aku menggunakan digital pin yaitu GPIO4 pada ESP32 untuk dihubungkan ke data pin dari DHT11. Lebih jelasnya dapat dilihat melalui tabel berikut.

Instalasi Library

Sebelum memulai, pastikan sudah melakukan pemasangan (instalasi) library Adafruit Unified Sensor, DHT sensor library, serta LiquidCrystal Library. Berikut langkahnya:

  1. Buka Arduino IDE
  2. Buka Library Manager dengan mengakses menu bar : Sketch > Include Library > Manage Libraries…
  3. Lakukan pencarian pada field Search terhadap Adafruit Unified Sensor, DHT sensor library, dan LiquidCrystal Library
  4. Lakukan instalasi dengan klik tombol install
Adafruit Unified Sensor
DHT sensor library
LiquidCrystal library

Kode Memperoleh Alamat LCD

Sebelum mencoba menuliskan hasil pembacaan sensor pada LCD, terlebih dahulu ada baiknya kita mengecek apakah LCD telah terhubung dengan baik pada ESP32 serta memperoleh alamatnya. Gunakan kode berikut untuk memperoleh alamat LCD:

/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
#include <Wire.h>

void setup() {
Wire.begin();
Serial.begin(115200);
Serial.println("\nI2C Scanner");
}

void loop() {
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
nDevices++;
}
else if (error==4) {
Serial.print("Unknow error at address 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
}
}
if (nDevices == 0) {
Serial.println("No I2C devices found\n");
}
else {
Serial.println("done\n");
}
delay(5000);
}

Kemudian hubungkan ESP32 dengan kabel microUSB ke perangkat, serta lakukan upload kode tersebut. Setelah upload selesai, buka serial monitor IDE Arduino pada 115200 baud untuk melihat alamat LCD:

Scanner I2C Device

Pada gambar serial monitor tersebut kita mengetahui bahwa perangkat I2C ditemukan pada alamat 0x27. Alamat ini kemudian kita gunakan untuk memprogram LCD guna menuliskan hal-hal yang kita inginkan seperti pembacaan data dari sensor DHT11.

Menuliskan Pembacaan Sensor DHT11 pada LCD

Kode berikut digunakan untuk menuliskan hasil pembacaan sensor DHT11 ke layar LCD dengan alamat LCD berada pada 0x27 serta data pin DHT11 terhubung ke digital pin GPIO4 di board ESP32.

#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
unsigned long delayTime;// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);void setup() {
// put your setup code here, to run once:
lcd.init();
lcd.backlight();
dht.begin();

}
void loop() {
// put your main code here, to run repeatedly:

delay(1000);
// Check if any reads failed and exit early (to try again).

printValues();
}
void printValues() {
lcd.setCursor(0,0);
lcd.print(F("Hum: "));
lcd.print(dht.readHumidity());
lcd.print(F(" %"));

lcd.setCursor(0,1);
lcd.print(F("Temp: "));
lcd.print(dht.readTemperature());
lcd.print(F(" *C "));
delay(2000);
lcd.clear();}
Hasil Pembacaan Sensor DHT11

Menuliskan Hasil Pembacaan Sensor BME280 pada LCD

Skema

Untuk dapat menggunakan sensor BME280 dan LCD I2C, aku merangkai skema seperti gambar berikut:

Skema BME280 + LCD

BME280 dihubungkan dengan ESP32 menggunakan serial komunikasi I2C (sama seperti LCD). Sehingga diperlukan penggunaan breadboard dalam percobaan ini. Untuk skema yang lebih jelas dapat dilihat melalui tabel berikut:

Instalasi Library

Sebelum memulai, pastikan sudah melakukan pemasangan (instalasi) library Adafruit BME280 serta LiquidCrystal Library yang telah kita pasang melalui langkah sebelumnya. Berikut langkahnya:

  1. Buka Arduino IDE
  2. Buka Library Manager dengan mengakses menu bar : Sketch > Include Library > Manage Libraries…
  3. Lakukan pencarian pada field Search terhadap Adafruit BME280 Library
  4. Lakukan instalasi dengan klik tombol install
Adafruit BME280 Library

Menuliskan Pembacaan Sensor BME280 pada LCD

Sebelum menuliskan pembacaan sensor BME280 pada LCD, terlebih dahulu lakukan scanning device I2C untuk memperoleh alamat LCD dan BME280. Alamat LCD diperoleh 0x27, sedangkan alamat BME280 yang aku peroleh adalah 0x76. Kemudian setelah memperoleh alamat kedua device gunakan kode berikut untuk menampilkan hasil pembacaan sensor BME280 pada LCD:

/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
unsigned long delayTime;
// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;
// set LCD address, number of columns and rows
// if you don't know your display address, run an I2C scanner sketch
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
void setup(){
// initialize LCD
lcd.init();
// turn on LCD backlight
lcd.backlight();
Serial.begin(9600);
Serial.println(F("BME280 test"));

bool status;
// default settings
// (you can also pass in a Wire library object like &Wire2)
status = bme.begin(0x76);
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
Serial.println("-- Default Test --");
delayTime = 1000;
Serial.println();
}
void loop(){
printValues();
delay(delayTime);
}
void printValues() {
lcd.setCursor(0,0);
lcd.print("Temp= ");
lcd.print(bme.readTemperature());
lcd.print(" *C");

lcd.setCursor(0,1);
lcd.print("Press= ");
lcd.print(bme.readPressure() / 100.0F);
lcd.print(" hPa");
delay(4000);

lcd.clear();

lcd.setCursor(0,0);
lcd.print("Alt= ");
lcd.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
lcd.print(" m");

lcd.setCursor(0,1);
lcd.print("Hum= ");
lcd.print(bme.readHumidity());
lcd.print(" %");
delay(4000);

lcd.clear();
}
Rangkaian LCD, BME280, dan ESP32
Hasil Pembacaan Sensor
Hasil Pembacaan Sensor

Sekian pengalamanku dalam projek kali ini, semoga bermanfaat! Sampai jumpa di kesempatan berikutnya!

--

--

Shafa Amarsya Madyaratri

Information System & Technology Student at Institut Teknologi Bandung