Pertemuan 4
Pertemuan 4
Hardware Overview
Layar LCD I2C tipikal terdiri dari layar LCD karakter berbasis HD44780 dan
adaptor LCD I2C. Mari belajar lebih banyak tentang mereka.
Seperti namanya, LCD ini ideal untuk menampilkan karakter saja. LCD karakter
16×2, misalnya, dapat menampilkan 32 karakter ASCII dalam dua baris.
Jika Anda melihat lebih dekat, Anda dapat melihat persegi panjang kecil untuk
setiap karakter di layar serta piksel yang membentuk sebuah karakter. Masing-
masing persegi panjang ini adalah kisi berukuran 5×8 piksel.
Inti dari adaptor ini adalah chip expander I/O 8-bit – PCF8574. Chip ini
mengubah data I2C dari Arduino menjadi data paralel yang diperlukan untuk
layar LCD.
Papan juga menyertakan trimpot kecil untuk membuat penyesuaian yang
tepat pada kontras tampilan.
Untuk tujuan ini, adaptor dilengkapi dengan tiga jumper/bantalan solder (A0,
A1, dan A2). Alamat disetel saat jumper disingkat dengan gumpalan solder.
Poin penting untuk diperhatikan di sini adalah bahwa beberapa perusahaan,
termasuk Texas Instruments dan NXP Semiconductors, memproduksi chip
PCF8574 yang sama. Dan alamat I2C LCD Anda tergantung pada pabrikan
chip.
Menurut lembar data Texas Instruments , tiga bit pemilihan alamat (A0, A1,
dan A2) terletak di ujung register alamat I2C 7-bit.
Karena ada tiga input alamat yang dapat menggunakan dua status, baik
TINGGI atau RENDAH, delapan (2^3) kombinasi (alamat) yang berbeda
dimungkinkan.
Saat Anda menyingkat jumper solder, Anda menarik input alamat itu
RENDAH. Jika Anda menyingkat ketiga jumper, alamatnya adalah 0x20. Jadi
rentang semua kemungkinan alamat berkisar dari 0x20 hingga 0x27.
Anda dapat mengatur alamat I2C yang berbeda, sesuai dengan tabel di bawah
ini.
Jika LCD Anda memiliki chip PCF8574 NXP:
Menurut lembar data Semikonduktor NXP , tiga bit pemilihan alamat (A0, A1,
dan A2) terletak di ujung register alamat I2C 7-bit. Namun, bit yang tersisa di
register alamat berbeda.
Karena ada tiga input alamat yang dapat menggunakan dua status, baik
TINGGI atau RENDAH, delapan (2^3) kombinasi (alamat) yang berbeda
dimungkinkan.
Saat Anda menyingkat jumper solder, Anda menarik input alamat itu
RENDAH. Jika Anda mempersingkat ketiga jumper, alamatnya adalah
0x38. Jadi rentang semua kemungkinan alamat berkisar dari 0x38 hingga 0x3F.
Anda dapat mengatur alamat I2C yang berbeda, sesuai dengan tabel di bawah
ini.
Jadi alamat I2C LCD Anda kemungkinan besar 0x27 atau 0x3F. Jika Anda tidak
yakin apa alamat I2C LCD Anda, ada cara mudah untuk mengetahuinya. Anda
akan mempelajarinya nanti di tutorial ini.
I2C LCD Display Pinout
Layar LCD I2C hanya memiliki empat pin. berikut pinoutnya :
ESP32 22 21
Arduino Uno A5 A4
Arduino nano A5 A4
Arduino Mega 21 20
Leonardo/
3 2
Mikro
lcd.home() fungsi
memposisikan kursor di kiri atas LCD tanpa
mengosongkan layar.
lcd.blink() fungsi
menampilkan blok berkedip berukuran 5x8 piksel pada
posisi di mana karakter berikutnya akan ditulis.
lcd.cursor() fungsi
menampilkan garis bawah (garis) pada posisi di mana
karakter berikutnya akan ditulis.
lcd.scrollDisplayRight() fungsi
menggulir konten tampilan satu ruang ke
kanan. Jika Anda ingin teks bergulir terus menerus, Anda harus
menggunakan fungsi ini di dalam satu for lingkaran.
Latihan :
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
void loop() {
int nDevices = 0;
Serial.println("Scanning...");
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address < 16) {
Serial.print("0");
}
Serial.print(address, HEX);
Serial.println(" !");
++nDevices;
} else if (error == 4) {
Serial.print("Unknown 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); // Wait 5 seconds for next scan
}
'Hello World!
Sketsa pengujian di bawah ini akan mencetak 'Hello World!' di baris pertama
LCD dan 'Tutorial LCD' di baris kedua.
// enter the I2C address and the dimensions of your LCD here
LiquidCrystal_I2C lcd(0x3F, 16, 2);
void setup() {
lcd.init();
lcd.clear();
lcd.backlight(); // Make sure backlight is on
void loop() {
}
Antarmuka OLED
Layar OLED ESP32
Panduan ini menunjukkan cara menggunakan layar OLED SSD1306 0,96
inci dengan ESP32 menggunakan Arduino IDE. Kami akan menunjukkan
kepada Anda cara menulis teks, mengatur font yang berbeda,
menggambar bentuk, dan menampilkan gambar bitmap.
Vin 3.3V
GND GND
SCL GPIO 22
SDA GPIO 21
FreeMono12pt7b.h FreeSansBoldOblique12pt7b.h
FreeMono18pt7b.h FreeSansBoldOblique18pt7b.h
FreeMono24pt7b.h FreeSansBoldOblique24pt7b.h
FreeMono9pt7b.h FreeSansBoldOblique9pt7b.h
FreeMonoBold12pt7b.h FreeSansOblique12pt7b.h
FreeMonoBold18pt7b.h FreeSansOblique18pt7b.h
FreeMonoBold24pt7b.h FreeSansOblique24pt7b.h
FreeMonoBold9pt7b.h FreeSansOblique9pt7b.h
FreeMonoBoldOblique12pt7b.h FreeSerif12pt7b.h
FreeMonoBoldOblique18pt7b.h FreeSerif18pt7b.h
FreeMonoBoldOblique24pt7b.h FreeSerif24pt7b.h
FreeMonoBoldOblique9pt7b.h FreeSerif9pt7b.h
FreeMonoOblique12pt7b.h FreeSerifBold12pt7b.h
FreeMonoOblique18pt7b.h FreeSerifBold18pt7b.h
FreeMonoOblique24pt7b.h FreeSerifBold24pt7b.h
FreeMonoOblique9pt7b.h FreeSerifBold9pt7b.h
FreeSans12pt7b.h FreeSerifBoldItalic12pt7b.h
FreeSans18pt7b.h FreeSerifBoldItalic18pt7b.h
FreeSans24pt7b.h FreeSerifBoldItalic24pt7b.h
FreeSans9pt7b.h FreeSerifBoldItalic9pt7b.h
FreeSansBold12pt7b.h FreeSerifItalic12pt7b.h
FreeSansBold18pt7b.h FreeSerifItalic18pt7b.h
FreeSansBold24pt7b.h FreeSerifItalic24pt7b.h
FreeSansBold9pt7b.h FreeSerifItalic9pt7b.h
Font yang berfungsi lebih baik dengan tampilan OLED berukuran 9 dan 12
poin.
Untuk menggunakan salah satu font tersebut, pertama-tama Anda harus
memasukkannya ke dalam sketsa Anda, misalnya:
#include <Fonts/FreeSerif12pt7b.h>
Selanjutnya, Anda hanya perlu menggunakansetFont()metode dan
berikan sebagai argumen, font yang ditentukan:
display.setFont(&FreeSerif12pt7b);
Setelah menentukan font, semua metode untuk menulis teks akan
menggunakan font tersebut. Untuk kembali menggunakan font asli, Anda
hanya perlu memanggilsetFont()metode tanpa argumen:
display.setFont();
Latihan
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(20, 10);
// Display static text
display.println("Hello, world!");
display.display();
}
void loop() {
}
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
void setup() {
Serial.begin(115200);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
// Display static text
display.println("Scrolling Hello");
display.display();
delay(100);
}
void loop() {
// Scroll in various directions, pausing in-between:
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrolldiagright(0x00, 0x07);
delay(2000);
display.startscrolldiagleft(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
}