ESP32 Tutorial Part 5 (Display)
Haloo teman-teman, balik lagi di tutorial ESP32 part 5. Kali ini kita akan membahas tentang display!. Display yang kita maksud adalah layar tambahan yang akan kita hubungkan dengan ESP32 kita nanti. Nah gimana caranya? langsung aja kita siapin alat-alat dibawah ini ya!
A. Komponen
Nah untuk memulai percobaannya, kita bisa siapkan alat-alat dibawah ini ya!
1. ESP32 .
2. Jumper wire male to male (4 buah).
3. Breadboard.
4. OLED Display 0.96 inch(Kita bisa pake yang LCD juga).
Nah untuk layarnya aku pake yang bentuknya kaya gini. Posisinya aku beli yang belum di solder ya temen-temen.
Nah OLED ini ukurannya 0.96 inch, aku beli di tokopedia sekitar 40 ribuan. OLED ini punya 4 pin, yaitu VCC, GND, SCL, dan SDA.
5. Laptop
6. Micro USB Cable
7. Arduino IDE
(install library Adafruit SSD1306, Adafruit GFX library, dan Adafruit BusIO). Pergi ke “Sketch -> Include Library -> Manage Libraries”. Lalu install Adafruit SSD1306, Adafruit GFX library, dan Adafruit BusIO seperti gambar dibawah ini.
B. SKEMA
Untuk skema pemasangan komponen, lakukan seperti hal berikut ini ya. Tapi dengan catatan, ESP32-nya dimasukkan ke breadboard lalu menggunakan jumper wire male to male.
Pin VCC kita sambungkan dengan pin 3v3, pin GND kita sambungkan dengan pin GND, pin SDA kita sambungkan dengan pin D21 (GPIO21), dan pin SCL D22 (GPIO22).
Untuk fisiknya, bisa dilihat seperti gambar diatas ya!
C. Source Code
Nah untuk source code di Arduino IDE, kita bisa mengcompile file dibawah ini untuk mencoba percobaan pertama ya!. Nah untuk codenya yang bercetak tebal dan comment-nya yang bercetak miring ya!
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>#define SCREEN_WIDTH 128 //Definisi lebar layar OLED dalam pixel
#define SCREEN_HEIGHT 64 //Definisi tinggi layar OLED dalam pixel#define OLED_RESET 4
#define SCREEN_ADDRESS 0x3C
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);static const unsigned char PROGMEM logo_bmp[] =
{ B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000 };void setup() {
Serial.begin(9600);// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F(“SSD1306 allocation failed”));
for(;;); // Don’t proceed, loop forever
}// library menginisiasi pertama kali layar hidup dengan gambar Adafruit.
display.display();
delay(2000); // Pause for 2 seconds// Membersihkan buffer
display.clearDisplay();// Menampilkan sebuah pixel berwarnaputih
display.drawPixel(10, 10, SSD1306_WHITE);// Menampilkan display buffer pada layar.
// Harus menggunakan display() untuk menampilkan hasilnya ke layardisplay.display();
delay(2000);
// display.display() is NOT necessary after every single drawing command,
// unless that’s what you want…rather, you can batch up a bunch of
// drawing operations and then update the screen all at once by calling
// display.display(). These examples demonstrate both approaches…}
void loop(){
display.clearDisplay();display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 0);
display.println(F(“Akhirnya”));
display.println(F(“Berhasil”));
display.display(); //Menampilkan ke layar tulisan “Akhirnya Berhasil”
delay(100);// Menggerakkan tulisan “Akhirnya Berhasil”
display.startscrollright(0x00, 0x0F);
delay(2000);// Scroll ke kanan selama 2 detik
display.stopscroll();
delay(1000);// Berhenti scroll selama 1 detik
display.startscrollleft(0x00, 0x0F);
delay(2000);// Scroll ke kiri selama 2 detik
display.stopscroll();
delay(1000);// Berhenti scroll selama 1 detik
display.startscrolldiagright(0x00, 0x07);
delay(2000);// Scroll diagonal ke kanan selama 2 detik
display.startscrolldiagleft(0x00, 0x07);
delay(2000);// Scroll diagonal ke kiri selama 2 detik
display.stopscroll();
delay(1000);// Berhenti scroll selama 1 detik
}
Analisis dari code diatas kita akan menampilkan tulisan “Akhirnya berhasil” ke layar. Lalu tulisan ini akan bergerak ke kanan, lalu ke kiri, lalu diagonal ke kanan, dan diagonal ke kiri, sesuai dengan penjelasan code diatas. Tulisan ini akan bergerak terus berulang karena ia menggunakan void loop() yang artinya fungsi berulang.
D. Masalah
Lantas pertanyaannya, apakah penulis langsung berhasil mengimplementasikannya?
Jawabannya TIDAK.
Percobaan pertama dilakukan hari senin, dan baru berhasil..
Hari sabtu :)))
Aku menemui banyak banget masalah yang awalnya aku ngga tau. Ini percobaan yang lumayan sulit buat aku, karena ngga sekali attempt. Kalo kalian menemui masalah yang sama bisa dicoba cara seperti dibawah ini ya!
1. Pertama kali compile berhasil, tapi layar tak menyala
Bisa dilihat pada code yang berwarna merah paling bawah. Disana sudah tercompile 100% dan sudah tertulis “Hard resetting via RTS pin” yang mengartikan bahwa compilenya berhasil, tapi dilayarnya ngga muncul apa-apa. Akhirnya nanya ke temen, coba check address I2C nya.
Solusinya buat kalian yang berhasil compile tapi di layar ngga muncul apa apa, bisa check I2C addressnya ya. untuk permasalahan I2C bisa di check dibawah ini.
2. No I2C devices found
Pas dicoba, ternyata bener. Address dari layarnya ngga ketemu
Untuk checknya bisa pakai code yang diambil dari randomnerdstutorial.com ya!
/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/#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);
}
Makin bingung lah, akhirnya ngecheck kabel-kabelannya. Dikira kabelnya ada ngga berfungsi. Akhirnya aku nyoba ganti semua kabelnya, tapi hasilnya tetep ngga muncul ke layar
Nah solusi buat kalian yang ngga muncul ke layar juga, coba check wiring-nya. Check semua perkabelannya, takutnya kabelnya ada yang putus atau ngga pas, atau salah hubung bisa aja.
3. Ada banyak address
Setelah ganti kabel, tiba-tiba muncul ke layar beberapa address. Akhirnya nanya lah ke temen, terus temen bilang kalo sebenernya yang muncul harusnya cuma satu address. Tapi ini ada 5 wkwk
Makin bingung lah, ini sebenernya yang dipake yang mana. Akhirnya otak-atik lagi, dicobain satu-satu addressnya ke code.
#define SCREEN_ADDRESS 0x76 //Nyoba dari 0x76, 0x77, sampe 0x7B
dicoba semua, tapi tetep aja ngga ada yang nyala. Nah akhirnya udah sedikit menyerah karena bingung mau diapain lagi padahal keliatannya addressnya udah ketemu.
Buat temen-temen yang mempunyai masalah yang sama, coba check solderan dari OLED-nya. Bisa jadi solderannya kurang baik atau gimana.
Nah karena permasalahan ini, udah kesel dikit karena ga nyala-nyala #gasabar. Akhirnya memutuskan buat benerin solderannya dan ya 50:50 alias bisa jadi rusak bisa jadi bener. So lets go solder ulang!
4. Solder pin OLED
Karena udah greget ga nyala-nyala, akhirnya aku solder sendiri pin dari layar OLEDnya. Hati-hati pake solder ya gais, panas.
akhirnya setelah beberapa kali solder, terus aku ganti semua kabel jumpernya dengan kabel baru. Aku check address I2C nya, dan akhirnya…
NEMU ADDRESSNYA DI 0X3C !
Akhirnya aku ganti address LED nya di code menjadi
#define SCREEN_ADDRESS 0x3C
dan saat di compile..
Akhirnya Berhasil!!!!
Jadi entah berapa kali nyoba sampe pagi ngga ketemu-ketemu juga solusinya, akhirnya ketemu. Disini aku bisa kasih kesimpulan, kalo solderan pertama dari OLED punya ku kurang baik. Karena itu pas aku solder pertama dan hasilnya tidak muncul ke layar dan akhirnya solder ulang sampe akhirnya berhasil . Padahal pertama kali solder aku udah ngerasa solderannya cukup kuat dan bagus, tapi hasil berkata lain :).
Dan juga hati-hati naro barang ya temen, karena komponen kecil ini bisa aja copot atau lepas karena kesalahan kita :)). Misalnya ngga sengaja didudukin, jatoh, atau keinjek :))
Terima kasih kepada orang-orang yang udah bantu aku buat menyalakan screennya :)))
Jadi itulah akhirnya layar LED ku bisa nyala, nah sekian pengalamanku memakai layar OLED untuk ESP32. Untuk demo videonya bisa dilihat pada video dibawah ini ya!
Untuk itu, sekian tutorial ESP32 testing menggunakan OLED Screen. Mohon maaf jika ada kesalahan dari penulis yang masih belajar ini. Terima kasih telah membaca dan sampai jumpa di lain project!! :D
References:
1. www.randomnerdstutorial.com
Best Regards,
Ilham Alvindo Riandova (18219063),
Sistem dan Teknologi Informasi,
Institut Teknologi Bandung.