Project 4: Sensor Eksternal
Hai, massa internet! Welcome back to my medium :D Pada kesempatan kali ini, saya akan menceritakan project ESP32 saya yang dirangkai dengan Sensor Eksternal BMP280. Sensor ini berfungsi untuk mengukur tekanan udara dan suhu di sekitarnya.
Sebelum memulai project, tentu saja kita perlu menyiapkan alat dan bahan. Alat dan bahan yang diperlukan, antara lain:
1. ESP32
2. Breadboard
3. Kabel USB
4. Jumper wire male-to-male
5. Resistor 330 ohm
6. Sensor BMP280
7. OLED
Setelah mempersiapkan alat dan bahan yang dibutuhkan, saatnya kita menginstall library Adafruit 280 Library. Klik Tools -> Manage Libraries dan cari “Adafruit 280 Library” dan install all libraries yang ditawarkan. Setelah menginstall library, saya merangkai kabel jumper, ESP32, dan sensor BMP280 berdasarkan skematik berikut.
Setelah merangkai skematik sedemikian rupa, saya menghubungkan ESP32 ke laptop melalui kabel USB.
Sebelum menjalankan fungsi-fungsi dari sensor BMP280, kita perlu mengecek ketersediaan I2C Address pada sensor dengan cara mengerun kode berikut.
/*********
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);
}
Buka Tools>Serial Monitor lalu ubah menjadi 115200 baud. Apabila pada layar terdapat output “I2C device found at address 0x76” seperti pada gambar di bawah, maka sensor BMP280 siap untuk dijalankan fungsi-fungsinya.
Untuk mencoba menjalankan fungsi-fungsi pada BMP280, buka sketch bmp280test yang terletak pada File>Example>Adafruit Circuit Playground.
Berikut adalah tampilan bmp280test
Setelah sketchbook berhasil di-verify dan di-upload, berikut adalah tampilan serial monitor saya.
Yey, begitulah, teman-teman, cara menggunakan sensor BMP280 :-)
Perjalanan saya di project ini tidak berhenti di sini. Pada project ini, saya juga mengkreasikan BMP280 dengan Display OLED agar output yang dijalankan oleh BMP280 bisa dilihat melalui layar display.
Dengan menggunakan skematik yang awal tadi, saya menambahkan 4 jumper untuk menjadi penghubung antara sensor dan display. Kabel jumper yang ditancapkan pada GND display, ditancapkan pulang secara searah dengan GND sensor. Begitupula dengan SCL, SDA, dan VCC. Dalam pemasangan bahan-bahan yang ditambahkan tadi, jangan lupa untuk melepas kabel USB dari laptop, ya, teman-teman :-) Hal ini berfungsi untuk menghindari potensi kecacatan alat dikarenakan aliran listrik yang masih mengalir.
Setelah OLED, sensor BMP280, dan ESP32 saling terhubung, sambungkan lagi ESP32 dengan laptop melalui kabel USB. Jalankan program berikut untuk bisa menampilkan temperature dan pressure pada display.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.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_BMP280 bmp; // I2Cvoid setup() {
Serial.begin(115200);// inisialisasi alamat bme280
bmp.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 = bmp.readTemperature();
float h = bmp.readPressure();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from bmp sensor!");
}
// clear display
display.clearDisplay();
// display temperature
display.setTextSize(1);
display.setCursor(0,0);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(30,10);
display.print(t);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
// display pressure
display.setTextSize(1);
display.setCursor(0, 35);
display.print("Pressure: ");
display.setTextSize(2);
display.setCursor(30, 45);
display.print(h/1000);
display.print("kPa");
display.display();
}
Saya menemukan source code ini dari blog berikut . Setelah berhasil me-verify dan me-compile kode di atas, berikut adalah tampilan sirkuit dengan display yang menunjukkan temperature dan pressure lingkungan di sekitar saya.
Project kali ini berakhir di sini dulu, ya, teman-teman. Terima kasih telah memperhatikan :-)