Wemos i OLED

Wemos i wyświetlacz OLED – to całkiem ciekawa kombinacja. Co więcej – okazało się, że podłączenie go i oprogramowanie wcale nie jest specjalnie trudne.  Całą procedurę opisano na instructables (stąd wziąłem podłączenie i modyfikacje kodu) a biblioteki dostarczyła Adafruit.  Mój model ma 0.96 cala, rozdzielczość 128×64, interfejs SPI i sterownik SSD1306.

Podłączenie i modyfikacje kodu wziąłem z tekstu na  instructables – część tego postu jest tłumaczeniem tego tekstu.  Biblioteki dostarczyła Adafruit.

Podłączenie

Mój OLED zasilany jest z 3.3v. Połączcie go z Wemos następująco:

OLED Wemos
Vcc 3.3v
GND GND
D0 D5
D1 D7
RES D3
DC D1
CS D8

Oprogramowanie

Dla OLED 128×64, interfejs SPI:

  1. Pobierzcie biblioteki Adafruit SSD1306 i GFX ze strony: Arduino Library, rozpakujcie je do katalogu ./libraries,
  2. W pliku Adafruit_SSD1306.h zmieńcie linijki od 73 tak, żeby było (zob. instructables):

    Po zmianie nie zapomnijcie zapisać pliku.
  3. Do nowego szkicu dodajcie bibliotekę: Adafruit SSD1306 Library,
  4. Dodajcie bibliotekę: Adafruit GFX Library,
  5. Zainicjalizujcie obiekt wyświetlacza; dla powyższego podłączenia
  6. W funkcji setup():

Kilka przydatnych funkcji biblioteki Adafruit GFX:

  • wyczyść ekran:  display.clearDisplay();
  • wyświetl bufor na ekranie (musicie wywołać, żeby grafika pojawiła się na ekranie): display.display();
  • Rysowanie kwadratu: display.drawRect(x,y,szeokosc,wysokosc,WHITE|BLACK);
  • Rysowanie okręgu: display.drawCircle(x,y,r,WHITE|BLACK);
  • Rysowanie koła: display.fillCircle(x,y,r,WHITE|BLACK);

Przykłady

Wyświetla obwódkę ekranu:

Zwróćcie uwagę, że:

  • width() – zwraca szerokość ekranu,
  • height() – zwraca wysokość ekranu.

Wyświetlanie napisów na ekranie:

W kolejnych krokach:

  • setTextSize: ustawiam wielkość liter,
  • setCursor: ustawiam kursor na pozycji, (0,0) oznacza lewy górny róg ekranu.
  • println: wyświetlam napis na ekranie,
  • display(): odświeżam ekran.

Gdy chcę wyświetlić tekst na środku ekranu (max 20 znaków):

Powyższa funkcja zwraca przesunięcie na osi x, od którego należy wyświetlić tekst, żeby znalazł się na środku ekranu. Do obliczenia szerokości  (i nie tylko) napisu służy funkcja „getTextBounds()”. Użyję ją:

W ten sposób napis _txt wyświetli się na środku ekranu.

Małe demo:

Powyższa funkcja:

  • wywołujemy z pozycją „y” na ekranie, ilością kropek zaznaczonych „dotsNow” i maksymalną ilością kropek „dotsMax”,
  • promień kropki „_r” ustalony jest na 3 piksele (średnica 6mm),
  • odstęp między kropkami ustala zmienna „_xDistance” – tutaj 20 pixeli,
  • stare kropki wygaszane są za pomocą czarnego prostokąta (display.fillRect(…, BLACK) – a później zapalane ponownie.

Teraz, w „loop()”:

Dzięki temu:

  • na ekranie pojawi się 5 okręgów w rzędzie,
  • co jedną sekundę kolejny okrąg będzie zamieniał się w wypełnione kółko,
  • po wypełnieniu wszystkich okręgów, z powrotem pojawią się kółka – które będą po kolei wypełniane.

Źródła

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *