ESP32 OLED with BMP180
Haiii hai haii guysss, gimana kabarnya seminggu ini, sudah lama ya kita tidak berjumpa? Aku kembali lagi nih, tentunya kita ‘kan membahas mengenai sensor BMP180 yang hasil dari pembacaannya akan ditampilkan di OLED. Bagaimana kisahnya? Yuk ikuti ceritanya!
Seperti biasa, kita akan menyiapkan terlebih dahulu nih alat dan bahannya.
- Breadboard
- ESP32
- Beberapa buah kabel jumper
- Sensor BMP180
- OLED
- Kabel USB dan Laptop
Setelah semuanya sudah siap, kita akan merangkai dulu nih rangkaiannya.
Pertama-tama, letakkan terlebih dahulu ESP32, sensor, dan OLED pada Breadboard.
Lalu kita akan menghubungkan terlebih dahulu pin dari ESP32 ke pin sensor.
Hubungkan VIN BMP180 ke VIN ESP32 (3.3V).
Hubungkan GND BMP180 ke GND ESP32.
Hubungkan SCL BMP180 ke SCL ESP32 (GPIO 22).
Hubungkan SDA BMP180 ke SDA ESP32 (GPIO 21).
Setelah itu kita hubungkan pin dari sensor ke pin OLED.
Hubungkan GND BMP180 ke GND OLED.
Hubungkan VIN BMP180 ke VCC OLED.
Hubungkan SCL BMP180 ke SCL OLED.
Hubungkan SDA BMP180 ke SDA OLED.
Nah, kalau sudah, mari kita mulai coding.
Buka aplikasi Arduino, dan pertama-tama kita harus mencari tahu terlebih dahulu address dari serial komunikasi sensor dan OLED. Aku menggunakan code ini untuk mencari tahu apa alamatnya.
#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);
}
Lalu, kamu klik Tools > Serial Monitor, dan cek apa addressnya.
Kalau aku, address untuk OLED ada di 0x3C, dan sensor di 0x77. Mungkin punya kita bisa sama, mungkin juga bisa beda. Silakan di cek di tempat masing-masing yaa.
Sedikit intermezzo ajaa, aku agak lama disini, karena awalnya tuh enggak ketemu-temu I2C not found, ternyata pin masangnya itu kebalik. Jadi, pin dari ESP32 ke BMP180 itu kebalik di sensornya, jadinya ga ketemu. So, pastikan pin-nya kalian colok di tempat yang pas ya teman-teman.
Temperature
Setelah itu, kita akan menampilkan suhu di layar OLED menggunakan ESP32. Aku menggunakan code ini. Silakan diganti sesuai dengan yang kalian miliki (sensornya apa, menggunakan OLED atau LCD, dan addressnya disesuaikan).
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085.h>#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixelsAdafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);Adafruit_BMP085 bmp;void setup() {
Serial.begin(115200);if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address OLED
Serial.println(F(“SSD1306 allocation failed”));
for(;;);
}
bool status = bmp.begin(0x77); // Address BMP180
if (!status) {
Serial.println(“Could not find a valid BMP180 sensor, check wiring!”);
while (1);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
}void loop() {
display.clearDisplay();
// display temperature
display.setTextSize(1);
display.setCursor(0,0);
display.print(“Temperature: “);
display.setTextSize(2);
display.setCursor(0,10);
display.print(String(bmp.readTemperature()));
display.print(“ “);
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print(“C”);
delay(1000);
}
Lalu, kira-kira hasilnya akan seperti ini.
Di punyaku, sensor menghasilkan suhu sekitar 29.5 derajat celcius. Bagaimana hasilnya di tempat kalian? Apakah sama??
Altitude
Setelah itu, kita akan mencoba menggunakan sensor untuk menampilkan ketinggian (altitude) di layar OLED. Aku menggunakan code ini.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085.h>#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixelsAdafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);Adafruit_BMP085 bmp;void setup() {
Serial.begin(115200);if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address OLED
Serial.println(F(“SSD1306 allocation failed”));
for(;;);
}
bool status = bmp.begin(0x77); // Address BMP180
if (!status) {
Serial.println(“Could not find a valid BMP180 sensor, check wiring!”);
while (1);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
}void loop() {
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0,0);
display.print(“Altitude: “);
display.setTextSize(2);
display.setCursor(0,10);
display.print(String(bmp.readAltitude()));
display.print(“ “);
display.print(“Pa”);
display.display();
delay(1000);
}
Nah, setelah itu kira-kira hasilnya seperti ini.
Aku mendapatkan angka sekitar 40.7 ~ 41.6 m. Kalau kamu?
Pressure
Terakhir, kita akan mencoba menggunakan sensor untuk menampilkan tekanan (pressure) di layar OLED. Aku menggunakan code ini.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085.h>#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixelsAdafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);Adafruit_BMP085 bmp;void setup() {
Serial.begin(115200);if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address OLED
Serial.println(F(“SSD1306 allocation failed”));
for(;;);
}
bool status = bmp.begin(0x77); // Address BMP180
if (!status) {
Serial.println(“Could not find a valid BMP180 sensor, check wiring!”);
while (1);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
}void loop() {
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0,0);
display.print(“Pressure: “);
display.setTextSize(2);
display.setCursor(0,10);
display.print(String(bmp.readPressure()));
display.print(“ “);
display.print(“Pa”);
display.display();
delay(1000);
}
Jangan lupa upload dan aku mendapat hasil seperti ini.
Selama pengerjaan aku sebenarnya ada masalah tapi ga begitu fatal, aku ada masalah di bagian wiring, dimana aku kebalik mencolokkan antar pin dari ESP32 ke Sensor, sehingga saat dilakukan pengecekan address tidak menghasilkan apa-apa. Nah, kalau kamu tidak berhasil saat pengecekan address coba perhatikan wiring nya ya, siapa tahu ada yang terbalik memasangkan kabelnya.
OKEI, sekian dulu tulisan pada kesempatan ini. Thankyouu semuanyaa!
Referensi : www.randomnerdtutorials.com