Thank you very much, everyone, for your help.
In the end, I managed to solve the problem by adding a "charBitmap" in the LiquidCrystal_I2C library, and the code now looks like this:
#include <Wire.h> // needed for LCD with PCF8574 port expander
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
// Creat a set of new characters
const uint8_t charBitmap[][8] = {
{0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0},
{0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0},
{0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0},
{0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0},
{0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0},
{0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0},
{0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0},
{0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0}
};
void setup()
{
int charBitmapSize = (sizeof(charBitmap) / sizeof(charBitmap[0]));
Wire.begin(6, 7);
for (int i = 0; i < charBitmapSize; i++)
{
lcd.createChar(i, (uint8_t *)charBitmap[i]);
}
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Hello, world !");
lcd.setCursor(2, 1);
lcd.print("ESP32-C3 I2C");
}
void loop()
{
}
Anyway, I will try the hd44780 library to expand my knowledge with LCDs.
I just have to implement the "level shifter," and that will address all my concerns up to now.
Thanks again to all of you for your help and for providing links and additional information about the problem.
Best regards.