Proyek 4 Pengembangan Sistem Embedded, ESP32 Sensor : External Sensor

Carissa Tabina Rianda
8 min readFeb 25, 2023

--

Halo! Kembali bersama proyek keempat Pengembangan Sistem Embedded, kali ini kita akan melakukan proyek berdasarkan topik sensor eksternal

Sensor adalah perangkat yang memiliki kemampuan untuk mendeteksi perubahan lingkungan sekitarnya dan memberikan keluaran berupa sinyal analog atau digital, yang kemudian ditampilkan atau dapat digunakan oleh sistem loop tertutup untuk kontrol proses. Untuk pemahaman yang lebih baik, kita dapat mengatakan bahwa sensor adalah perangkat yang dapat melihat, mendengar, merasakan, mencium, dan merasakan sekelilingnya Sensor biasanya dihubungkan ke pemancar karena keluaran dari sensor perlu dikondisikan atau diperkuat, karena keluarannya sangat kecil. Oleh karena itu, sebuah sensor membutuhkan peralatan lain agar kita dapat menggunakan data, dan paling sering kita menyebut seluruh paket sebagai sensor.

Sensor yang digunakan pada mikrokontroler ESP32

Pada proyek sebelumnya, kita telah membahas tentang sensor internal. Pada proyek kali ini kita akan membahas sensor eksternal menggunakan komponen tertentu untuk mengukur temperatur, tekanan, dan kelembapan. Kita dapat menggunakan komponen di antara BME-280, BMP-280, BMP-180, DHT11, atau DHT22. Pada proyek kali ini, kita akan menggunakan sensor bertipe BMP-280. Sebelum masuk ke pengerjaan proyek, mari kita bahas sensor berikut beserta kegunaannya!

BMP-280

BMP280 adalah sensor suhu, tekanan, dan kelembaban digital yang dikembangkan oleh Bosch Sensortec. Sensor ini dapat mengukur suhu, tekanan udara, dan kelembaban relatif dalam lingkungan sekitar dengan presisi tinggi dan menggunakan antarmuka digital seperti I2C dan SPI untuk mentransfer data. Sensor ini sering digunakan dalam berbagai aplikasi seperti peralatan cuaca, pemetaan cuaca, penginderaan udara, dan berbagai jenis aplikasi industri dan konsumen lainnya.

Perbedaan utama antara BMP280 dan BMP180 adalah sebagai berikut:

  1. Akurasi pengukuran: BMP280 memiliki akurasi pengukuran yang lebih tinggi daripada BMP180, dengan toleransi suhu ± 0,5°C dan toleransi tekanan ±1 hPa, sedangkan BMP180 memiliki toleransi suhu ± 2°C dan toleransi tekanan ± 2 hPa.
  2. Rentang pengukuran: BMP280 memiliki rentang pengukuran suhu yang lebih luas (-40°C hingga +85°C) dan rentang pengukuran tekanan yang lebih tinggi (300 hPa hingga 1100 hPa) daripada BMP180 (0°C hingga +65°C dan 300 hPa hingga 1100 hPa).
  3. Konsumsi daya: BMP280 memiliki konsumsi daya yang lebih rendah daripada BMP180. BMP280 dapat beroperasi pada 0,1 mikroampere dalam mode stand-by, sedangkan BMP180 memiliki konsumsi daya sekitar 0,5 mikroampere dalam mode stand-by.
  4. Ukuran: BMP280 sedikit lebih besar dari BMP180, dengan ukuran 2,5 x 2,5 x 0,93 mm, sedangkan BMP180 memiliki ukuran 2,5 x 2,5 x 0,55 mm.

Sementara keduanya adalah sensor suhu dan tekanan digital yang dirancang oleh Bosch Sensortec dan memiliki kemampuan yang mirip, namun perbedaan-perbedaan di atas menunjukkan bahwa BMP280 memiliki kinerja yang lebih baik daripada BMP180 dalam beberapa aspek.

Nah, sekarang apa perbedaan BMP280 dan BME280?

  1. Fungsi: BMP280 dirancang untuk mengukur suhu dan tekanan atmosfer, sedangkan BME280 dirancang untuk mengukur suhu, tekanan atmosfer, dan kelembaban relatif.
  2. Akurasi: Karena BME280 memiliki lebih banyak fungsi, maka sensor ini lebih akurat daripada BMP280 dalam mengukur suhu, tekanan atmosfer, dan kelembaban relatif.
  3. Rentang pengukuran: BME280 memiliki rentang pengukuran yang lebih lebar daripada BMP280 dalam hal suhu, tekanan atmosfer, dan kelembaban relatif.
  4. Konsumsi daya: Karena BME280 memiliki lebih banyak fungsi, maka sensor ini mengonsumsi lebih banyak daya daripada BMP280.
  5. Ukuran: BME280 lebih besar dari BMP280 karena sensor ini memiliki fungsi tambahan.

Secara umum, BME280 adalah versi yang lebih canggih dari BMP280, dengan kemampuan untuk mengukur kelembaban relatif yang membuatnya cocok untuk digunakan dalam aplikasi di mana pengukuran kelembaban diperlukan. Namun, jika hanya pengukuran suhu dan tekanan atmosfer yang dibutuhkan, maka BMP280 dapat menjadi pilihan yang lebih hemat biaya dengan ukuran yang lebih kecil dan konsumsi daya yang lebih rendah.

Preparation

Setelah mengenal sensor yang akan kita gunakan, mari kita beralih ke pengerjaan proyek. Siapkanlah bahan sebagai berikut yang akan kita gunakan ketika merangkai proyek.

  1. ESP32 DOIT DEVKIT V1
  2. Kabel USB Type A to micro USB
  3. Kabel Jumper Male to Male
  4. Breadboard jenis 830 Point Solderless
  5. 1 pc sensor BMP-280 (6 kaki) yang sudah disolder
  6. Software Arduino IDE yang sudah kita install dan setting seperti pada postingan sebelumnya Proyek 1 Pengembangan Sistem Embedded, Memulai dengan ESP32 : LED Blink

Project

Rangkailah ESP32mu seperti gambar berikut

Lalu, akses kode pada tab File > Examples > BMP 280 library. Jika Anda belum pernah mengakses BMP280, Anda bisa mengunduh dan menginstall Adafruit BMP280 library dengan melakukan tahap sebagai berikut

  1. Akses tab Sketch > Include Library > Manage Libraries…
  2. Cari “Adafruit BMP280 Library”
  3. Klik Install
  4. Jika Anda belum pernah berkerja dengan sensor sebelumnya, klik Install All

Anda bisa mengakses kode pada bagian File > Examples > Adafruit BMP280 Library > bmp280test

Anda akan mendapat kode seperti di bawah ini

/***************************************************************************
This is a library for the BMP280 humidity, temperature & pressure sensor

Designed specifically to work with the Adafruit BMP280 Breakout
----> http://www.adafruit.com/products/2651

These sensors use I2C or SPI to communicate, 2 or 4 pins are required
to interface.

Adafruit invests time and resources providing this open source code,
please support Adafruit andopen-source hardware by purchasing products
from Adafruit!

Written by Limor Fried & Kevin Townsend for Adafruit Industries.
BSD license, all text above must be included in any redistribution
***************************************************************************/

#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);
while ( !Serial ) delay(100); // wait for native usb
Serial.println(F("BMP280 test"));
unsigned status;
//status = bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID);
status = bmp.begin();
if (!status) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "
"try a different address!"));
Serial.print("SensorID was: 0x"); Serial.println(bmp.sensorID(),16);
Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
Serial.print(" ID of 0x60 represents a BME 280.\n");
Serial.print(" ID of 0x61 represents a BME 680.\n");
while (1) delay(10);
}

/* 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(2000);
}

Sebelum kita mengunggah kode tersebut ke ESP32, kita harus mencari alamat I2C dari BMP280 tersebut. Kita harus mengganti status = bmp.begin(); menjadi status = bmp.begin(<I2C address>);. Untuk mendapatkan address dari I2C tersebut, gunakanlah kode di bawah ini.

// I2C address scanner program
#include <Wire.h>

void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("I2C 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.print(address,HEX);
Serial.println(" !");

nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address < 16)
Serial.print("0");

Serial.println(address,HEX);
}
}

if (nDevices == 0)
Serial.println("No I2C devices found");
else
Serial.println("done");

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

Upload kode tersebut dan akses Serial Monitor pada Tab Tools. Jangan lupa untuk mengganti baud rate pada 9600 baud.

Setelah kita mengetahui bahwa address I2C kita berada pada address 0x76, kita dapat mengganti kode kita. Kode akhir yang kita gunakan adalah sebagai berikut

/***************************************************************************
This is a library for the BMP280 humidity, temperature & pressure sensor

Designed specifically to work with the Adafruit BMP280 Breakout
----> http://www.adafruit.com/products/2651

These sensors use I2C or SPI to communicate, 2 or 4 pins are required
to interface.

Adafruit invests time and resources providing this open source code,
please support Adafruit andopen-source hardware by purchasing products
from Adafruit!

Written by Limor Fried & Kevin Townsend for Adafruit Industries.
BSD license, all text above must be included in any redistribution
***************************************************************************/

#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);
while ( !Serial ) delay(100); // wait for native usb
Serial.println(F("BMP280 test"));
unsigned status;
//status = bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID);
status = bmp.begin(0x76);
if (!status) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "
"try a different address!"));
Serial.print("SensorID was: 0x"); Serial.println(bmp.sensorID(),16);
Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
Serial.print(" ID of 0x60 represents a BME 280.\n");
Serial.print(" ID of 0x61 represents a BME 680.\n");
while (1) delay(10);
}

/* 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(2000);
}

Selanjutnya, unggah kode tersebut pada ESP32 Anda, lalu akses Serial Monitor. Anda akan mendapat tampilan sebagai berikut

Tampilan ketika BMP280 ditekan dengan jari. Terdapat perbedaan suhu, tekanan, dan perkiraan ketinggian

Terlihat dari kode tersebut, ketika BMP280 ditekan, terdapat perbedaan suhu dari 26.60 C menjadi 26.95 C dan tekanan dari 101293.78 Pa menjadi 101534 Pa.

Error

Pada saat ingin mengakses alamat I2C, Serial Monitor saya terus error dan mengeluarkan pesan berikut

Saya mengira error tersebut terjadi dikarenakan kesalahan pada kode. Saya mencari kode baru namun tetap stuck pada kesalahan yang sama. Akhirnya saya cek rangkaian yang telah saya buat. Tidak ada kesalahan dalam peletakan kabel. Akhirnya menekan kembali ESP32 saya dan Serial Monitor saya akhirnya mengeluarkan output yang saya inginkan

Penutupan

Setelah melakukan proyek ini, terbukti bahwa BMP280 merupakan sensor yang baik digunakan untuk membaca suhu, tekanan, dan ketinggian. Sekian proyek keempat kali ini, sampai jumpa di proyek-proyek selanjutnya! Dadah!

--

--