ESP32 — External Sensor
Setelah sebelumnya kita menggunakan built-in sensor pada ESP32, kali ini kita akan menggunakan sensor eksternal, yaitu sensor BMP280. Sama seperti projek sebelumnya, di sini kita juga akan memodifikasi rangkaian dengan menggunakan sensor BMP280 tersebut.
Alat dan bahan yang dibutuhkan untuk percobaan pertama adalah:
1. ESP32
2. Breadboard
3. Kabel jumper
4. Sensor BMP280
5. Kabel USB
Pertama, kita harus menginstall beberapa library, yaitu BMP280 library dan Adafruit_Sensor library.
Untuk menginstall BMP280 library, tekan Sketch > Include Library > Manage Libraries lalu ketik “adafruit bmp280” dan tekan install.
Untuk menginstall Adafruit_Sensor library, tekan Sketch > Include Library > Manage Libraries lalu ketik “adafruit unified sensor” dan tekan install.
Kedua, letakkan ESP32 di atas breadboard dengan rangkaian sebagai berikut:
Program yang digunakan untuk percobaan ini adalah:
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.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);
}/* 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);
}
Ketiga, tekan icon verify untuk mengcompile program. Saat proses compiling selesai, selanjutnya tekan icon upload untuk menguploadnya ke board ESP32.
Setelah program berhasil diupload ke board ESP32, kita dapat langsung mencoba menekan EN pada ESP32 dan membuka serial monitor dengan cara menuju Tools > Serial Monitor, lalu ubah menjadi 9600 baud, dengan begitu tampilan pada serial monitor akan menunjukkan hasil sebagai berikut:
Setelah percobaan pertama berhasil, kita akan mencoba untuk memodifikasi rangkaian dengan menggunakan OLED. Pada percobaan kali ini kita akan menampilkan hasil pembacaan oleh sensor pada OLED display.
Alat dan bahan yang dibutuhkan untuk percobaan kedua adalah:
1. ESP32
2. Breadboard
3. Kabel jumper
4. Sensor BMP280
5. Kabel USB
7. OLED Display
Pertama, letakkan ESP32 di atas breadboard dengan rangkaian sebagai berikut:
Kedua, sambungkan ke laptop dengan menggunakan kabel USB.
Program yang digunakan untuk percobaan ini adalah:
#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;void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
bool status = bmp.begin(0x76);
if (!status) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring"));
while(1);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop() {
delay(5000);
float t = bmp.readTemperature();
float h = bmp.readPressure();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from bmp sensor!");
}
display.clearDisplay(); // clear display
// display temperature
display.setTextSize(1);
display.setCursor(0,0);
display.print("Temperature: ");
display.setTextSize(2);
display.setCursor(0,12);
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(0, 47);
display.print(h/1000);
display.print("kPa");
display.display();
}
Ketiga, tekan icon verify untuk mengcompile program. Saat proses compiling selesai, selanjutnya tekan icon upload untuk menguploadnya ke board ESP32.
Setelah program berhasil diupload ke board ESP32, kita dapat langsung mencoba melihat tampilan pada OLED display.
Jika tampilan pada OLED display sudah seperti di atas, maka percobaan kita telah berhasil.
Masalah yang saya temui saat mengerjakan kedua percobaan ini adalah ketidaktelitian saat menghubungkan kabel pada percobaan pertama sehingga program tidak dapat dijalankan.