ESP32 WITH EKSTERNAL SENSOR (BME280)

    Pada percobaan kali ini, dijelaskan mengenai ESP32 yang menggunakan sensor eksternal berupa BME280. BME280 akan melakukan pembacaan suhu, tekanan dan kelembapan. Pembacaan sensor kali ini akan ditampilkan di layar monitor Arduino IDE dan OLED Display.

Pada percobaan ini, komponen dan perangkat yang dibutuhkan sebagai berikut.






4. PC / Laptop
5. Breadboard ( yang saya gunakan 830 point)

6. Jumper Wires (yang saya gunakan Male to Male) sebanyak 8 buah

7. BME280



8. OLED Display

Langkah - langkah pengerjaan :

Pertama, merangkai ESP32 dengan sensor sesuai skema berikut




Keterangan jumper wires di ESP32 ke BME280
1. GPIO 3V3 menuju VCC
2. GPIO GND menuju GND
3. GPIO 21 menuju SDA
4. GPIO 22 menuju SCL

Keterangan jumper wires di BME280 ke OLED
1. VCC menuju VCC
2. GND menuju GND
3. SDA menuju SDA
4. SCLmenuju SCL

Kemudian, instal library pada Arduino IDE dengan cara sketch > include library > manage libraries. Library yang dibutuhkan untuk BME280 adalah Adafruit BME280 library dan Adafruit Unified Sensor. Library yang dibutuhkan untuk OLED adalah  Adafruit SSD1306 library dan Adafruit GFX library.

Kode program yang digunakan pada aplikasi Arduino IDE untuk BME280 dan OLED sebagai berikut 

 
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_BME280 bme; // I2C
void setup() {
Serial.begin(115200);
// inisialisasi alamat bme280
bme.begin(0x76);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed or couldn't find a valid BME280"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop() {
delay(5000);
//read temperature and humidity
float t = bme.readTemperature();
float h = bme.readHumidity();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from BME280 sensor!");
}
// clear display
display.clearDisplay();
// display temperature
display.setTextSize(1);
display.setCursor(0,0);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(0,10);
display.print(t);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
// display humidity
display.setTextSize(1);
display.setCursor(0, 35);
display.print("Humidity: ");
display.setTextSize(2);
display.setCursor(0, 45);
display.print(h);
display.print(" %");
display.display();
}

Pada percobaan kali ini saya mengalami kegagalan, hal ini karena BME280 milik saya tidak berfungsi. Apabila membeli baru ongkos kirim dan waktu yang dibutuhkan selama pengiriman tidak cukup. Sehingga saya hanya memberi prototype pembuatan. Saya melakukan pengecekan address pada BME280 dengan code berikut

#include <Wire.h> //include Wire.h library

void setup()
{
Wire.begin(); // Wire communication begin
Serial.begin(9600); // The baudrate of Serial monitor is set in 9600
while (!Serial); // Waiting for Serial Monitor
Serial.println("\nI2C address Scanner CircuitSchools.com");
}

void loop()
{
byte error, address; //variable for error and I2C address
int devicecount;

Serial.println("Scanning...");

devicecount = 0;
for (address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the 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.print(address, HEX);
Serial.println(" !");
devicecount++;
}
else if (error == 4)
{
Serial.print("Unknown error at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if (devicecount == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");

delay(5000); // wait 5 seconds for the next I2C scan
}

Lalu menampilkan output di monitor "No I2C devices found". 
 
Berikut hasil percobaan kali ini









Komentar

Postingan populer dari blog ini

LED Blinking ESP32

ESP32 WITH DATA VISUALIZATION

ESP32 WITH WI-FI COMMUNICATION