#4 Kenalan dengan ESP32 : External Sensor
Hallo guys, kembali lagi di blog ini. Sebelum lanjut, kalian masih ingat gak nih sama project sebelumnya? Yap, sensor internal, bener banget. Masih berkaitan dengan project sebelumnya, kali ini kita masih bahas sensor. Bedanya, kali ini kita lebih keren yaitu pakai external sensor.
Di pasaran, external sensor punya banyak jenis sesuai dengan fungsinya. Di bawah ini, beberapa external sensor yang cocok dengan ESP32.
Kak, jadi pakai sensor yang mana?
Sensor yang kali ini kita pakai yaitu BMP280 Barometic Pressure Sensor. Sensor ini yang salah satunya paling banyak dijual di e-commerce dengan harga kurang lebih Rp19.500. Sebagai catatan, kalau kalian membeli sensor ini biasanya sensor masih terpisah dengan kakinya atau belum disolder. Kalau kalian sudah bisa men-solder ya silakan langsung beli seperti itu, tetapi buat yang gak tau cara solder atau takut merusak sensor, lebih baik kalian minta penjualnya untuk sekalian disolderin, mungkin hanya menambah biaya Rp3.000 saja. Nah, kira-kira sensor ini bisa ngapain aja sih? Makanya, stay tuned guys.
Butuh apa aja?
Gak jauh beda sama project kemaren, kita cuma nambah external sensor saja. Nah, berikut ini komponen-komponen yang dibutuhkan:
- ESP32 + Breadboard
- Jumper cable male to male
- Sensor BMP280
- Laptop atau komputer yang sudah ter-install Arduino IDE. Buat kalian yang masih bingung, cek postingan ini yaa!! #1 Kenalan dengan ESP32 : LED Blink
- Micro USB Cable
Rangkaiannya gimana nih?
Eitss, tunggu dulu. Aku tau kalian sudah pada gak sabaran buat langsung ngoprek. Ada pre-project yang harus kita siapkan dulu, yaitu set up library sensor kita. Pertama-tama, kita ke menu Tools (Ctrl + Shift + I) → Manage library → Search keyword “bmp280” → Install Adafriut BMP280 Library . Kira-kira tampilannya akan seperti ini.
Masih ada satu lagi library yang harus kita siapkan, yaitu library universal. Hampir sama kayak cara yang di atas, hanya saja kita ganti search key -nya dengan “Adafruit Unified Sensor”.
Setelah itu, kita bisa langsung gas merangkai skema project nya. Kira-kira begini hasilnya.
Karena di bagian sensor kurang ada penjelasannya, nah ini aku tambahin gambar lain buat penjelas.
Kalau kita perhatiin lagi dua gambar barusan, berarti untuk gambar yang pertama susunan sensornya dari paling ujung kiri ke ujung kanan, yaitu VCC, GND, SDI (GPIO 21), SCK (GPIO 22), CSB, SDO).
Supaya tidak terjadi error, pastikan kalian teliti dalam memasang pin ESP32 ke sensor.
Kodenya gimana nih?
/*********
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);
}
Mungkin dari kalian bertanya, “kak kok gak mau jalan project?”. Nah, emang kode ini bukan untuk program utama kita. Terus buat apa? Jadi, kode ini itu kita jalankan di awal untuk kita tau address dari sensor yang kita gunain. Sebenernya, bisa aja kita gak menjalankan kode ini di awal, soalnya umumnya address sensor yang digunakan bakal sama asalkan sensornya sama juga. Tetapi nih, terkadang I2C devices gak bisa terdeteksi pada saat menjalankan program utama kita. Kalau kalian mengalami hal seperti itu, coba kalian cek ulang lagi rangkaian kalian sudah benar atau belum.
Nah, barulah kita bisa memasukkan kode di bawah ini untuk program utama kita.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
#define BMP_SCK (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS (10)
Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);void setup() {
Serial.begin(9600);
Serial.println(F("BMP280 test"));
if (!bmp.begin(0x76)) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1);
}
/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}void loop() {
Serial.print(F("Temperature = "));
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(bmp.readPressure());
Serial.println(" Pa");
Serial.print(F("Approx altitude = "));
Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */
Serial.println(" m");
Serial.println();
delay(1000);}
Setelah upload kodenya, kalian masuk ke menu Serial Monitor dan langsung lihat hasilnya. Kira-kira seperti ini hasilnya.
*Kalau kalian sentuh sensornya, temperature yang muncul pada serial monitor akan berubah, karena sensor juga sebagai input program kita.
Masih bingung nih
Pertama, kita perlu memanggil beberapa library terlebih dahulu dengan kode berikut.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
Kemudian, ada beberapa fungsi tambahan yang berbeda dari project sebelumnya.
- readTemperature : membaca temperature atau suhu dalam Celsius
- readPressure : membaca pressure atau tekanan dalam Pascal (Pa)
- readAltitude : membaca ketinggian dari permukaan laut dalam satuan meter (m)
Penasaran gak sih gimana hasilnya?
Nah kalau kalian perhatikan, ketika sensor disentuh, temperature mengalami kenaikan. Hal ini wajar, karena kita memberikan sedikit panas tubuh kita ke sensor sehingga suhunya meningkat.
Kurang keren?
Oke, seperti biasa aku bakal sudah nyiapin project tambahan buat kalian. Kira kira begini skemanya.
Kodenya?
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
#define BMP_SCK (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS (10)
Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);const int ledPin = 2 ;
const int ledPin2 = 4;
const int ledPin3 = 16;void setup() {
Serial.begin(9600);
Serial.println(F("BMP280 test"));
pinMode (ledPin, OUTPUT);
pinMode (ledPin2, OUTPUT);
pinMode (ledPin3, OUTPUT);
if (!bmp.begin(0x76)) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1);
}
/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}void loop() {
Serial.print(F("Temperature = "));
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(bmp.readPressure());
Serial.println(" Pa");
Serial.print(F("Approx altitude = "));
Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */
Serial.println(" m");
Serial.println();
delay(1000);if (bmp.readTemperature() <= 28) {
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
}
else if (bmp.readTemperature() > 28 & bmp.readTemperature()< 28.5){
digitalWrite(ledPin, LOW);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, LOW);
}
else{
digitalWrite(ledPin, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, HIGH);
}
}
Inti project ini, ketika kita sentuh sensor, maka akan terjadi hal berikut
- Lampu LED hijau menyala, sisanya mati. Ketika suhu kurang dari sama dengan 28 C
- Lampu LED kuning menyala, sisanya mati. Ketika suhu lebih dari 28 C dan kurang dari 28.5 C.
- Lampu LED merah menyala, sisanya mati. Jika suhu di luar yang disebutkan di atas.
Hasilnya?
Kesimpulan
Jadi, external sensor BMP280 berfungsi untuk membaca suhu, tekanan, dan ketinggian suatu lingkungan. Oke deh, seperti sudah cukup di sini dulu, semoga bisa bermanfaat yaa.
See you guys!!