[II2260 — Embedded System, 6th Project] ESP32 Serial Communication

— Pengantar

Hafidz Shidqi
4 min readMar 19, 2023

Setelah membuat project kelima (ESP32 Display & PWM), selanjutnya kita akan membahas tentang serial communication. Alangkah baiknya jika Kalian mencoba terlebih dahulu project keempat dan project kelima terlebih dahulu karena pada project kali ini menggunakan konsep dari kedua project tersebut. Jika sudah, langsung saja kita mulai!

— Komponen

Sebenarnya komponen yang digunakan itu sama seperti komponen yang digunakan pada project sebelum-sebelumnya. yaitu :

  1. ESP32 + Breadboard
  2. Kabel Micro USB
  3. Kabel Jumper Male-to-Male
  4. Display OLED
  5. BMP280
  6. Switch Button

— Hands-On

Untuk langkah pengerjaannya yaitu :

  1. Sambungkan pin GPIO21 pada ESP32 ke pin SDA pada BMP280 lalu sambungkan pin SDA pada OLED ke pin SDA pada BMP280.
  2. Sambungkan pin GPIO22 pada ESP32 ke pin SCL pada BMP280 lalu sambungkan pin SCK pada OLED ke pin SCL pada BMP280.
  3. Sambungkan pin GND pada ESP32 ke pin GND pada BMP280 lalu sambungkan pin GND pada OLED ke pin GND pada BMP280.
  4. Sambungkan pin 3.3V pada ESP32 ke pin VCC pada BMP280 lalu sambungkan pin VDD pada OLED ke pin VCC pada BMP280.
Tampilan rangkaian serial communication menggunakan BMP280 dan OLED

5. Setelah itu buka Arduino IDE kalian lalu silahkan upload code berikut

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
/*#include <SPI.h>
#define BMP_SCK 18
#define BMP_MISO 19
#define BMP_MOSI 23
#define BMP_CS 5*/

#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BMP280 BMP; // I2C
//Adafruit_BMP280 BMP(BMP_CS); // hardware SPI
//Adafruit_BMP280 BMP(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); // software SPI

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire);
unsigned long delayTime;
int button_state; // the current state of button

void setup() {
Serial.begin(9600);
Serial.println(F("BMP280 test"));
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x64)
// init done
display.display();
delay(100);
display.clearDisplay();
display.display();
display.setTextSize(1.2);
display.setTextColor(WHITE);

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

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

Serial.println();
}


void loop() {
display.setCursor(0,0);
display.clearDisplay();
display.setTextSize(1);
Serial.print("Temperature = ");
Serial.print(BMP.readTemperature()); Serial.println(" *C");
display.print("Temperature: ");
display.print(BMP.readTemperature()); display.println(" *C");

Serial.print("Pressure = ");
Serial.print(BMP.readPressure() / 100.0F);
Serial.println(" hPa");
display.print("Pressure: ");
display.print(BMP.readPressure() / 100.0F);
display.println(" hPa");

Serial.println();
display.display();
delay(1000);
}

6. Setelah berhasil upload codenya, maka OLED akan melakukan pembacaan suhu dan tekanan di lokasi Kalian perdetiknya.

Tampilan pembacaan suhu dan temperatur pada OLED
Tampilan pembacaan suhu dan temperatur pada OLED tiap detiknya

— Extra Project

Setelah berhasil menampilkan pembacaan suhu dan temperatur pada OLED menggunakan sensor BMP280, selanjutnya kita akan mencoba variasi dengan menambahkan switch button pada rangkaian yang telah kita buat. Konsepnya ialah ketika menekan tombol switch button, maka akan menampilkan pembacaan suhu serta temperatur pada OLED.

Adapun langkah-langkahnya sama seperti sebelumnya dengan menambahkan switch button pada rangkaian, yaitu :

  1. Sambungkan pin GPIO21 pada ESP32 ke pin SDA pada BMP280 lalu sambungkan pin SDA pada OLED ke pin SDA pada BMP280.
  2. Sambungkan pin GPIO22 pada ESP32 ke pin SCL pada BMP280 lalu sambungkan pin SCK pada OLED ke pin SCL pada BMP280.
  3. Sambungkan pin GND pada ESP32 ke pin GND pada BMP280 lalu sambungkan pin GND pada OLED ke pin GND pada BMP280.
  4. Sambungkan pin 3.3V pada ESP32 ke pin VCC pada BMP280 lalu sambungkan pin VDD pada OLED ke pin VCC pada BMP280.
  5. Sambungkan pin GPIO05 pada ESP32 ke salah satu pin switch button.
  6. Sambungkan pin GND pada OLED ke salah satu pin switch button, tepatnya di sebelah pada langkah nomor 5.
Tampilan rangkaian extra project

7. Setelah itu buka Arduino IDE kalian lalu silahkan upload code berikut

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
/*#include <SPI.h>
#define BMP_SCK 18
#define BMP_MISO 19
#define BMP_MOSI 23
#define BMP_CS 5*/

#define SEALEVELPRESSURE_HPA (1013.25)
#define BUTTON_PIN 5
Adafruit_BMP280 BMP; // I2C
//Adafruit_BMP280 BMP(BMP_CS); // hardware SPI
//Adafruit_BMP280 BMP(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); // software SPI

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire);
unsigned long delayTime;
int button_state; // the current state of button

void setup() {
Serial.begin(9600);
Serial.println(F("BMP280 test"));
button_state = digitalRead(BUTTON_PIN);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x64)
// init done
display.display();
delay(100);
display.clearDisplay();
display.display();
display.setTextSize(1.2);
display.setTextColor(WHITE);

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

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

Serial.println();
}


void loop() {
button_state = digitalRead(BUTTON_PIN);
if (button_state == HIGH) {
display.setCursor(0,0);
display.clearDisplay();
display.setTextSize(1);
Serial.print("Temperature = "); Serial.print(BMP.readTemperature()); Serial.println(" *C");
display.print("Temperature: "); display.print(BMP.readTemperature()); display.println(" *C");

Serial.print("Pressure = "); Serial.print(BMP.readPressure() / 100.0F); Serial.println(" hPa");
display.print("Pressure: "); display.print(BMP.readPressure() / 100.0F); display.println(" hPa");



Serial.println();
display.display();
delay(1000);
}
else{
display.clearDisplay();

display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 10);
// Display static text
display.println("\nPRESS TO TURN ON ");
display.display();
}
}

8. Setelah berhasil diupload, maka hasilnya seperti berikut

Dengan berhasilnya extra project merupakan akhir dari project keenam ini. Jika ada pertanyaan atau masalah, silahkan tulis di kolom komentar. Sekian dan terima kasih!

--

--