Wcale nie tak prosto znaleźć działającą bibliotekę, dodatkowym problemem jest nakładanie się przestrzeni nazw C++.

Jedna z bibliotek uruchamiała tylko podświetlanie, inna LiquidCrystal_PCF8574.h działała, ale między poprawnymi znakami wyświetlała błędne (w połowie odczytane kody ASCII)- po zmianie szybkości I2C na 100kHz albo 400kHz zaczynała działać, ale połowa funkcji (typu czyszczenie) nie działała.

Ta biblioteka ruszyła:

Tu jest instruktaż

UWAGA! Jest ona skonfliktowana z bilioteką New-LiquidCrystal-master, którą należy usunąć z katalogu documents\Arduino\libraries. Inaczej funkcje się pokryją

Hardware

LCD1602 STM32

Podłączamy LCD przez konwerter I2C do pinów B6 i B7 (zegar i dane wg pinout), zasilanie VCC do 5V, a GND do uziemienia. To wszystko. PINY PB6 i 7 (I2C1) są odporne na 5v (tolerant), więc nie musicie się martwić. Co prawda to wyświetlacz i głównie do niego wysyłamy, ale może on zrobić pull-up (tak wynika z dokumentacji) 5v też. Nie tylko odbiera więc na RPi bym z tym uważał bardziej.

ADRES I2C u mnie to 0x27, może się różnić (są skanery I2C). 16×2 to rozmiar wyświetlacza. Po kompilacji jest ostrzeżenie, że ta biblioteka użyta nie jest przeznaczona do architektury STM32F1 ale działa bez zarzutu.

Działający przykład kodu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16, 2); //TU ADRES I2C 0x27
 
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.clear();
}

void loop() {
  lcd.setCursor(0, 0);
  lcd.print(" Hello World:)");
  lcd.setCursor(2, 1);
  lcd.print(" Hd44780 i2c");
  delay(1000);
  lcd.setCursor(2, 2);
  lcd.print("16x2 and 20x4 ");
    delay(1000);
  lcd.setCursor(1, 3);
  lcd.print(" ForbiddenBit.com ");
    delay(1000);
}
C, STM32