ESP32 WITH EKSTERNAL SENSOR USE DIFFERENT I2C PINS (BMP180)

   Pada percobaan kali ini, dijelaskan mengenai ESP32 yang menggunakan  terhubung ke 2 devais atau lebih dengan menggunakan komunikasi serial dan menggunakan pin berbeda dalam menggunakan komunikasi serial. ESP32 akan menggunakan sensor eksternal berupa BMP180 dan OLED sebagai display nya. Project pertama, ESP32 akan menggunakan BMP180 dengan pin yang berbeda bukan default. Project kedua, penggunaan BMP180 dan hasilnya akan ditampilkan menggunakan OLED. 

Pada percobaan ini, komponen dan perangkat yang dibutuhkan sebagai berikut.

1. ESP32 DEVKIT V1 Board (yang saya gunakan 30 pin)





4. PC / Laptop
5. OLED Display
6. Jumper wires (yang saya gunakan female to female) sebanyak 4 buah
7. BMP180
Langkah-langkah pengerjaan 

1. Penggunaan pin I2C yang berbeda dengan default

Pada percobaan ini menggunakan GPIO32 dan GPIO33 pada ESP32.
Pertama, merangkai ESP32 dengan BMP180 sesuai skema berikut




Keterangan jumper wires ESP32 ke BMP180:
1. GPIO 3V3 menuju VCC
2. GPIO GND menuju GND
3. GPIO 33 menuju SDA
4. GPIO 32 menuju SCL

Kemudian instal library pada Arduino dengan cara sketch > include library > manage libraries. Library yang dibutuhkan untuk BMP180 adalah  Adafruit BMP085 library.

Kode program yang digunakan pada Arduino IDE adalah

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085.h>

#define I2C_SDA 33
#define I2C_SCL 32


Adafruit_BMP085 bmp;

unsigned long delayTime;

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));
  Wire.begin(I2C_SDA, I2C_SCL);

  bool status;

  // default settings
  // (you can also pass in a Wire library object like &Wire2)
  status = bmp.begin(0x77, &Wire);  
  if (!status) {
    Serial.println("Could not find a valid BMP180 sensor, check wiring!");
    while (1);
  }

  Serial.println("-- Default Test --");
  delayTime = 1000;

  Serial.println();
}

void loop() { 
  Serial.print("Temperature = ");
  Serial.print(bmp.readTemperature());
  Serial.println(" *C");
    
  Serial.print("Pressure = ");
  Serial.print(bmp.readPressure());
  Serial.println(" Pa");
    
  // Calculate altitude assuming 'standard' barometric
  // pressure of 1013.25 millibar = 101325 Pascal
  Serial.print("Altitude = ");
  Serial.print(bmp.readAltitude());
  Serial.println(" meters");

  Serial.print("Pressure at sealevel (calculated) = ");
  Serial.print(bmp.readSealevelPressure());
  Serial.println(" Pa");

  // you can get a more precise measurement of altitude
  // if you know the current sea level pressure which will
  // vary with weather and such. If it is 1015 millibars
  // that is equal to 101500 Pascals.
  Serial.print("Real altitude = ");
  Serial.print(bmp.readAltitude());
  Serial.println(" meters");
    
  Serial.println();
  delay(500);
}

Berikut hasil percobaan yang dilakukan



2. ESP32 dengan beberapa perangkat I2C

Pada percobaan ini menggunakan BMP180 dan OLED.
Pertama, merangkai ESP32 dengan BMP180 dan OLED sesuai skema berikut




Keterangan jumper wires ESP32 ke BMP180:
1. GPIO 3V3 menuju VCC
2. GPIO GND menuju GND
3. GPIO 21 menuju SDA
4. GPIO 22 menuju SCL

Keterangan jumper wires BMP180 ke OLED:
1. VCC menuju VCC
2. GND menuju GND
3. SDA menuju SDA
4. SCL menuju SCL

Kemudian instal library pada Arduino dengan cara sketch > include library > manage libraries. Library yang dibutuhkan untuk BMP180 adalah  Adafruit BMP085 library. Library yang dibutuhkan untuk OLED adalah  Adafruit SSD1306 library,  Adafruit GFX library, dan Adafruit BusIO.

Kode program yang digunakan pada Arduino IDE adalah

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_BMP085.h>
#define I2C_SDA 33
#define I2C_SCL 32
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

#define NUMFLAKES 10

#define LOGO_HEIGHT 16
#define LOGO_WIDTH  16

Adafruit_BMP085 bmp;

void setup(){
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)){
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  display.display();
  delay(2000);
  display.clearDisplay();
  Serial.begin(9600);
  if(!bmp.begin(0x77, I2C_SDA, I2C_SCL)){
    Serial.println("Could not find a valid BMP085/BMP180 sensor, check wiring!");
    
    display.clearDisplay();
    Serial.begin(9600);
    if(!bmp.begin(0x77, I2C_SDA, I2C_SCL)){
      Serial.println("Could not find a valid BMP085/BMP180 sensor, check wiring!");
      while (1) {}
    }
  }
}

void loop(){
  printValues();
}
void printValues() {
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.print(F("Temperature = "));
  display.print(bmp.readTemperature());
  display.println(F(" *C"));
  display.setTextSize(1);
  display.setTextColor(WHITE);  
  display.print(F("Pressure = "));
  display.print(bmp.readPressure());
  display.println(F(" Pa"));
  display.setTextSize(1);
  display.setTextColor(WHITE); 
  // Calculate altitude assuming 'standard' barometric
  // pressure of 1013.25 millibar = 101325 Pascal
  Serial.print(F("Altitude = "));
  Serial.print(bmp.readAltitude());
  Serial.println(F(" meters"));
  delay(1000);
  display.display();
}

Berikut hasil percobaan yang dilakukan 





Komentar

Postingan populer dari blog ini

LED Blinking ESP32

ESP32 WITH DATA VISUALIZATION

ESP32 WITH WI-FI COMMUNICATION