Berikut ini percobaan menghubungkan STM32F103C8T dengan display LCD 20×4. Antar muka menggunakan komunikasi serial I2C. LCD 20×4 menggunakan protokol serial, sehingga perlu modul I2C. STM32 menggunakan tegangan 3,3 volt, sedangkan LCD 20×4 menggunakan tegangan 5 volt, sehingga perlu level converter antara I2C di ESP32 dan I2C di modul PCF8752. Pada LCD 20×4 dipasang modul serial to paralel PCF8574 untuk menghubungkan protokol I2C ke paralel input/output pada LCD.
Berikut ini blok diagram sistem
Komunikasi I2C
Pin I2C yang dipakai adalah PB6 (SCL1) dan PB7 (SDA1).
Tegangan I2C dari STM32 adalah 3,3 volt, sedangkan PCF8574 perlu 5 volt. Untuk itu perlu komponen bi directional logic level converter di antara keduanya.
Power Supply
Pada board Blue Pill sudah terdapat output 5 volt, jadi tegangan 5 volt untuk LCD dapat diambil dari situ.
Software
#include <LiquidCrystal_I2C.h>
// https://circuitdigest.com/microcontroller-projects/stm32-stm32f103c8-i2c-communication-tutorial
// Include the libraries:
// LiquidCrystal_I2C.h: https://github.com/johnrickman/LiquidCrystal_I2C
#include <Wire.h> // Library for I2C communication
#include <LiquidCrystal_I2C.h> // Library for LCD
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4);
void setup() {
Wire.begin();
// Initiate the LCD:
lcd.init();
lcd.backlight();
Serial.begin(115200);
Serial.println("\nLCD Test");
pinMode(LED_BUILTIN, OUTPUT);
}
int counter = 0;
void loop() {
lcd.setCursor(0, 0);
lcd.print("Elektrologi");
lcd.setCursor(0, 1);
lcd.print("IPTEK.WEB.ID");
lcd.setCursor(0, 2);
lcd.print("STM32F103C8T BluePill");
lcd.setCursor(0, 3);
lcd.print("31 Januari 2021");
lcd.setCursor(12, 0);
lcd.print(counter);
Serial.print("Send data: ");
Serial.println(counter);
delay(500);
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(500); // wait for a second
digitalWrite(LED_BUILTIN, LOW);
counter++;
}
Referensi
- https://circuitdigest.com/microcontroller-projects/stm32-stm32f103c8-i2c-communication-tutorial