Spisu treści:

Jak dodać wyświetlacz E-Ink do swojego projektu: 12 kroków (ze zdjęciami)
Jak dodać wyświetlacz E-Ink do swojego projektu: 12 kroków (ze zdjęciami)

Wideo: Jak dodać wyświetlacz E-Ink do swojego projektu: 12 kroków (ze zdjęciami)

Wideo: Jak dodać wyświetlacz E-Ink do swojego projektu: 12 kroków (ze zdjęciami)
Wideo: A Wy na jakim etapie związku jesteście? 😂 #shorts 2024, Listopad
Anonim
Jak dodać wyświetlacz E-Ink do swojego projektu?
Jak dodać wyświetlacz E-Ink do swojego projektu?
Jak dodać wyświetlacz E-Ink do swojego projektu?
Jak dodać wyświetlacz E-Ink do swojego projektu?

Wiele projektów obejmuje monitorowanie pewnego rodzaju danych, takich jak dane środowiskowe, często przy użyciu Arduino do sterowania. W moim przypadku chciałem monitorować poziom soli w moim zmiękczaczu wody. Możesz chcieć uzyskać dostęp do danych przez sieć domową, ale równie dobrze możesz chcieć wyświetlić je tam, gdzie są mierzone. Możesz też mieć zawsze włączony zdalnie podłączony wyświetlacz w wygodniejszej lokalizacji.

Obecnie istnieje kilka rodzajów wyświetlaczy, z których można korzystać, wszystkie dość tanie, ale mające różne zalety i wady:

  • Wyświetlacz alfanumeryczny LCD jest najtańszy, ale też najbardziej ograniczony.
  • Wyświetlacz OLED może wyświetlać grafikę, ale te tanie są bardzo małe. Drugie zdjęcie pokazuje wyświetlacz OLED 128x64 piksele obok E-Ink.
  • Wyświetlacz E-Ink (lub E-Paper) jest nieco większy, a przez to łatwiejszy do odczytania, i ma tę zaletę, że wyświetlacz jest zachowywany nawet po wyłączeniu! Ale przerysowanie wyświetlacza zajmuje kilka sekund.

Wyświetlacz E-Ink wydawał się idealny do mojej aplikacji, ponieważ mogłem zaprogramować Arduino tak, aby budził się tylko co kilka godzin, odczytywał i wyświetlał go przed ponownym zaśnięciem. Nie ma wówczas znaczenia, że przerysowanie wyświetlacza zajmuje kilka sekund.

W takim zastosowaniu średni pobór prądu może być tak niski, że bateria litowa 9V do czujki dymu może wystarczyć na 10 lat! Co więcej, niektóre z tych wyświetlaczy będą wyświetlać trzy kolory: biały, czarny i czerwony (lub żółty). Idealny, jeśli chcesz wyświetlać ostrzeżenie lub alert na czerwono.

Kieszonkowe dzieci

Najtańsze wyświetlacze E-Ink, jakie znalazłem, są sprzedawane przez BuyDisplay, który jest również dostępny u wielu sprzedawców eBay. Niestety dokumentacja pozostawia sporo do życzenia, więc sam postanowiłem napisać tutorial - czytaj dalej!

W zależności od wymagań i budżetu masz do wyboru różne rozmiary:

  • 1,54" (152x152 = 23, 104 piksele)
  • 2,13" (212x104 = 22 048 pikseli)
  • 2,6" (296x152 = 44, 992 piksele)
  • 2,7" (176x264 = 46, 464 piksele)
  • 2,9" (296x128 = 37, 888 pikseli)
  • 4,2" (400x300 = 120 000 pikseli)
  • 5,83" (640x480 = 307, 200 pikseli)
  • 7,5" (880x528 = 464, 640 pikseli)

(Zakres powiększył się od czasu, kiedy ostatnio patrzyłem, więc mógł się jeszcze bardziej rozszerzyć do czasu, gdy to przeczytasz.)

Dostępne są w wersji 2-kolorowej (czarno-białej) lub 3-kolorowej (czarno-czerwono-białej lub czarno-żółto-białej). Ta instrukcja zakłada, że używasz czerwonej, ale jeśli wybrałeś żółtą wersję, po prostu przeczytaj „żółty” dla „czerwonego”.

Wybierz wersję SPI (4-przewodową). Użyłem modelu 1,54 , który jest bardzo fajnym rozmiarem.

Krok 1: Podłączanie wyświetlacza

Podłączanie wyświetlacza
Podłączanie wyświetlacza

Wyświetlacze te są dostarczane z listwą stykową 2x4. Numery pinów są wyraźnie oznaczone, piny 7, 5, 3 i 1 (od lewej do prawej) wzdłuż górnego rzędu i 8, 6, 4, 2 wzdłuż dolnego.

Twój wyświetlacz może być wyposażony w 8-żyłowy kabel połączeniowy, który ułatwia połączenie. (Mój kabel krosowy ma 2 czerwone przewody i 2 brązowe. Nie są one wymienne!

Poniższa tabela przedstawia połączenia, które dotyczą większości typów Arduino (w tym Uno, Pro Mini, Pro Micro i Nano).

Moduł E-ink Arduino
Szpilka Nazwa Szpilka Nazwa
1 VDD Vcc 3,3/5V
2 VSS Gnd Gnd
3 Wejście danych szeregowych 11 MOSI
4 Wejście zegara szeregowego 13 SCK
5 /Wybierz chip 10
6 Dane/Instrukcja 9
7 Resetowanie 8
8 Urządzenie zajęte 7

Krok 2: Pobierz dostarczone oprogramowanie

Możesz użyć dostarczonego oprogramowania, jak opisano w tym kroku, lub możesz użyć mojej rozszerzonej biblioteki w następnym kroku, przedostatnim.

Znajdź swoje urządzenie na BuyDisplay.com. Na dole strony znajdziesz pobrany plik ZIP „Arduino Library and Example for 4-wire SPI”. Kliknij to, aby pobrać i otworzyć w Eksploratorze Windows.

Eksplorator Windows pokaże to jako zawierające jeden folder najwyższego poziomu „Libraries-Examples_ER-EPM0154-1R”. (Nazwa będzie nieco inna, jeśli Twój model nie jest modelem 1,54 cala).

Skopiuj ten folder najwyższego poziomu do folderu bibliotek Arduino. Kliknij prawym przyciskiem myszy, aby zmienić nazwę folderu i usuń „Biblioteki-Przykłady_” z nazwy.

(Aby znaleźć folder bibliotek Arduino, w środowisku Arduino IDE kliknij Plik… Preferencje i zanotuj lokalizację szkicownika. Przejdź do tego, a wśród folderów szkiców znajdziesz folder „biblioteki” Arduino.)

Otwórz ten folder i otwórz w nim folder „Biblioteki”. Przeciągnij i upuść wszystkie pliki z tego folderu do folderu nadrzędnego o jeden poziom wyżej („ER-EPM0154-1R”). Usuń (teraz pusty) folder „Biblioteki”.

Zainstalowałeś teraz pliki i przykładowy szkic jako bibliotekę Arduino. Zauważ, że jeśli twój wyświetlacz nie jest wyświetlaczem 1,54 , jedyną różnicą wydają się być dwie linie w ER-ERM*-1.h definiujące SZEROKOŚĆ i WYSOKOŚĆ.

W Arduino IDE kliknij Plik… Przykłady i przewiń w dół do ER-EPM0154-1R, aby uzyskać szkic demonstracyjny, który powinieneś być w stanie skompilować i uruchomić zaraz po podłączeniu wyświetlacza do Arduino.

Krok 3: Uruchamianie wersji demonstracyjnej

Uruchamianie demonstracji
Uruchamianie demonstracji
Uruchamianie demonstracji
Uruchamianie demonstracji

W środowisku Arduino IDE kliknij Plik… Przykłady… ER-EPM0154-1R.

Podłącz Arduino do komputera za pomocą kabla USB lub w inny sposób.

W menu Narzędzia ustaw płytę, procesor i port.

W sekcji Szkic kliknij Prześlij.

Po zakończeniu przesyłania nastąpi niewielkie opóźnienie, a dziesięć opóźnienie będzie migać kilka razy podczas malowania pierwszego obrazu. Zobacz, jak przechodzi przez demo.

Krok 4: Korzystanie z rozszerzonej biblioteki

Możesz pobrać moją ulepszoną bibliotekę z github pod adresem

Uwaga Mam dużą pewność, że moja biblioteka będzie działać z wyświetlaczem o dowolnym rozmiarze, ale w rzeczywistości przetestowałem ją tylko z modelem 1,54 . Jeśli używasz innego, daj mi znać w komentarzach na końcu tego Instruktażu, aby potwierdzić, że działa. Ale jeśli nie, zrobię co w mojej mocy, abyś mógł zacząć.

Pobierz i zapisz plik zip. W środowisku Arduino IDE kliknij Szkic… Dołącz bibliotekę… Dodaj bibliotekę. ZIP i wybierz zapisany plik zip.

Moja biblioteka zawiera kilka drobnych ulepszeń:

  • Pozwala na użycie różnych numerów pinów Arduino (z wyjątkiem MOSI).
  • Ta sama biblioteka może być używana do urządzenia o dowolnej wielkości.
  • Dostępne jest nowe wypełnienie cieniowane w 50% i wypełnienie nakrapiane (zestaw losowych pikseli).

Biblioteka jest dostarczana jako standardowy plik skompresowany (zip) Arduino. Pobierz go do folderu Pobrane (lub gdziekolwiek wolisz), a w środowisku Arduino IDE kliknij Szkic… Dołącz bibliotekę… Dodaj bibliotekę ZIP.

W sekcji Przykłady znajdziesz teraz E-ink_ER-EPM. Istnieją 3 przykładowe szkice:

  • ER_EPM154-1R-Test: Oryginalna demonstracja dostarczona przez dostawcę
  • E-ink_demo: Szkic opracowany w kolejnych krokach
  • E-ink_rotate: Demonstracja obracania obrazu.

Krok 5: Samodzielne programowanie

Niestety nie ma dokumentacji z kodem dostarczonym przez dostawcę, ani przykładowy kod nie jest odpowiednio skomentowany. To sprawia, że korzystanie z niego jest trudniejsze niż powinno, a głównym celem tego Instruktażu jest naprawienie tego.

Podstawowe koncepcje

Ponieważ Arduino ma ograniczoną ilość dostępnej pamięci RAM, biblioteka pozwala na rysowanie lub pisanie na małych fragmentach ekranu jednocześnie, przesyłając je indywidualnie do wewnętrznej pamięci urządzenia. Dopiero po załadowaniu wszystkich potrzebnych porcji każesz mu wyświetlić to, co ma w pamięci.

Te sekcje ekranu są znane jako obiekty „Paint”. Potrzebujesz tylko jednego, a dla każdej sekcji ekranu określasz jej wysokość, szerokość i obrót. Po zakończeniu przesyłasz go, określając pozycję na ekranie, w której chcesz go załadować i czy ma być czarno-biały, czy czerwono-biały.

Lewy górny róg ekranu ma współrzędne poziome (x) i pionowe (y) (0, 0), lewy dolny to (0, 151), a prawy górny to (151, 0).

Inicjalizacja

Otwórz szkic E-ink_demo w Arduino IDE i postępuj zgodnie z nim, gdy opisuję, jak korzystać z biblioteki.

W górnej części szkicu zobaczysz następujące linie, które są zawsze potrzebne:

#include <SPI.h #include "ER-ERM0154-1.h" #include "imagedata.h" #include "epdpaint.h" #define COLORED 0 #define UNCOLORED 1 Epd epd;

Linie #include wciągają wymagane biblioteki. SPI.h to standardowa biblioteka Arduino, ale pozostałe stanowią część biblioteki e-ink.

Definiujemy nazwy dla NIEKOLOROWYCH (białych) pikseli i KOLOROWYCH (czarnych lub czerwonych). (Uwaga dla moich kolegów Europejczyków: używana jest amerykańska pisownia COLOR.)

Epd epd; line tworzy obiekt elektronicznego urządzenia papierniczego, na którym będziemy wyświetlać. Musi to być tutaj na początku szkicu, aby było dostępne dla funkcji setup() i loop().

Jeśli masz wyświetlacz o innym rozmiarze, możesz zastąpić linię EPD:

epd epd(SZEROKOŚĆ, WYSOKOŚĆ);

(po wcześniejszym zdefiniowaniu WIDTH i HEIGHT w instrukcjach #define.)

W ten sam sposób możesz określić niestandardowe numery PIN za pomocą:

Epd epd (SZEROKOŚĆ, WYSOKOŚĆ, ZAJĘTY_PIN, RESET_PIN, DC_PIN, CS_PIN);

W ramach setup() musimy zainicjować urządzenie w następujący sposób:

Serial.początek(9600)

if (epd. Init() != 0) { Serial.print("Init e-Paper nie powiódł się"); powrót; }

(W rzeczywistości epd. Init() nigdy nie zwraca błędu, ale przyszłe ulepszenie może wykryć brak lub niedziałający ekran).

Krok 6: Pisanie tekstu

Pisanie tekstu
Pisanie tekstu

W E-ink_demo zwróć uwagę na loop(). Najpierw wyczyśćmy wyświetlacz:

epd. WyczyśćRamkę()

(W rzeczywistości nie jest to konieczne, jeśli masz zamiar wyświetlić własny obraz).

Zanim będziemy mogli narysować cokolwiek (czy to tekst, czy grafikę), musimy utworzyć obiekt Paint, na którym będziemy rysować:

niepodpisany obraz znaku[1024]

Farba do malowania(obraz, 152, 18); //szerokość powinna być wielokrotnością 8

To rezerwuje trochę miejsca (1024 bajty) i przydziela je obiektowi Paint, umieszczonemu w drugiej linii. Jest to wstępnie skonfigurowane jako 152 piksele szerokości i 18 pikseli głębokości. W razie potrzeby możemy go później przekonfigurować do ponownego użycia, ale pamiętaj: szerokość musi być wielokrotnością 8, ponieważ 8 pikseli jest przechowywanych na bajt i nie możemy podzielić bajtów. (W razie potrzeby zaokrągli go, ale może być zagadkowy, gdy wyświetlacz nie wygląda tak, jak powinien.

Teraz musimy wyczyścić malowany obiekt na UNCOLORED (biały), następnie na pozycji (x, y) = (22, 2) piszemy „e-ink Demo” używając czcionki o wysokiej 16 pikseli i COLORED (aby pokazać na tle NIEKOLOROWANE tło.

farba. Przezroczysta(NIEKOLOROWANE)

paint. DrawStringAt(12, 2, "demonstracja e-papieru", &Font16, KOLOROWE);

Zwróć uwagę, że współrzędne (22, 2) to lewy górny róg pierwszego znaku ciągu i są o 22 piksele i 2 piksele w dół względem lewego górnego rogu malowanego obiektu, a nie całego wyświetlacza. Tekst wygląda najlepiej co najmniej jeden piksel w dół od górnej części malowanego obiektu.

Dostępne są następujące czcionki:

Czcionka8 - 5x8 pikseliCzcionka12 - 7x12 pikseliCzcionka16 - 11x16 pikseliCzcionka20 - 14x20 pikseliCzcionka24 - 17x24 pikseli

Teraz musimy tylko wysłać obiekt malowania ("paint") do urządzenia ("epd"):

epd. SetPartialWindowBlack(paint. GetImage(), 0, 3, paint. GetWidth(), paint. GetHeight());

SetPartialWindowBlack to metoda, którą stosujemy do obiektu epd, używając obrazu oraz jego właściwości szerokości i głębokości obiektu paint. Każemy mu zapisać ten obraz na urządzeniu w (x, y) = (0, 3). A my mówimy, że KOLOROWE piksele mają być czarne.

To nie było zbyt trudne, prawda? Spróbujmy jeszcze jednego.

farba. Przezroczysty(KOLOROWY);

paint. DrawStringAt(20, 2, "(Biały na kolorze)", &Font12, UNCOLORED); epd. SetPartialWindowRed(paint. GetImage(), 0, 24, paint. GetWidth(), paint. GetHeight());

Ponownie używamy tego samego obiektu z farbą, o tej samej szerokości i wysokości, ale tym razem wyczyśćmy go na COLORED i napiszmy do niego ciąg UNCOLORED. Dla odmiany ustawimy KOLOROWE piksele na czerwono i zapiszemy je na urządzeniu w punkcie (0, 24), tuż pod pierwszym.

Zapisaliśmy dwa obiekty do malowania w pamięci urządzenia, ale jeszcze nie powiedzieliśmy, aby je wyświetlał. Robimy to za pomocą następującego oświadczenia:

epd. Wyświetlana ramka();

(W szkicu E-ink_demo zostawiamy to do końca, po narysowaniu więcej rzeczy, ale możesz wstawić je tutaj, jeśli chcesz, mybe, a następnie delay(10000); aby dać ci czas na podziwianie swojego dzieła.

Krok 7: Rysowanie linii i prostokątów

Rysowanie linii i prostokątów
Rysowanie linii i prostokątów

Zobaczmy, jak rysować linie i prostokąty. Zamierzamy użyć tego samego obiektu do malowania, ale musimy go przekonfigurować na 40 pikseli szerokości i 36 pikseli wysokości. Zmienimy je na UNCOLORED.

farba. Szerokość zestawu(40);

farba. Wysokość(36); farba. Przezroczysta (NIEKOLOROWA);

Jak zwykle narysujemy prostokąt (KOLOROWY) z lewym górnym rogiem (5, 3) i prawym dolnym (35, 33) względem malowanego obiektu. Narysujemy również jego przekątne jako linie od (5, 3) do (35, 33) i od (35, 3) do (5, 33). Na koniec napiszemy cały obiekt pomalowany (czerwony) na ekranie w (32, 42).

//GÓRNY RZĄD:

// Farba prostokątna. Clear(UNCOLORED); paint. DrawRectangle(5, 3, 35, 33, KOLOROWE;) paint. DrawLine(5, 3, 35, 33, KOLOROWE); paint. DrawLine(35, 3, 5, 33, KOLOROWE); epd. SetPartialWindowRed(paint. GetImage(), 32, 42, paint. GetWidth(), paint. GetHeight());

Biblioteka, tak jak się pojawiła, również zawierała wypełniony prostokąt, ale hej, chciałem zacieniować, więc dodałem nową metodę. Zrobimy jeszcze dwa prostokąty, jeden zacieniony, a drugi wypełniony, i umieścimy je na prawo od pierwszego, naprzemiennie czarne i czerwone.

// Cieniowana farba prostokątna. Clear(UNCOLORED); paint. DrawShadedRectangle(5, 3, 35, 33); epd. SetPartialWindowBlack(paint. GetImage(), 72, 42, paint. GetWidth(), paint. GetHeight()); // Wypełniona farba prostokątna. Clear(UNCOLORED); paint. DrawFilledRectangle(5, 3, 35, 33, KOLOROWE); epd. SetPartialWindowRed(paint. GetImage(), 112, 42, paint. GetWidth(), paint. GetHeight());

Krok 8: Rysowanie kół

Rysowanie okręgów
Rysowanie okręgów

Koła są równie łatwe do narysowania. Zamiast współrzędnych dwóch rogów musimy podać współrzędne środka i promień. Wyczyścimy obiekt pomalowany, a następnie umieścimy okrąg w punkcie (20, 15) (względem obiektu pomalowanego) i promieniu 15. I powtórz dla zacieniowanego i wypełnionego koła.

//DRUGI RZĄD

// Okrągła farba. Clear(UNCOLORED); farba. DrawCircle(20, 18, 15, KOLOROWE); epd. SetPartialWindowBlack(paint. GetImage(), 32, 78, paint. GetWidth(), paint. GetHeight()); // Farba cieniowanego koła. Clear(UNCOLORED); farba. DrawShadedCircle(20, 18, 15); epd. SetPartialWindowRed(paint. GetImage(), 72, 78, paint. GetWidth(), paint. GetHeight()); //Wypełnione koło farby. Clear(UNCOLORED); paint. DrawFilledCircle(20, 18, 15, COLORED); epd. SetPartialWindowBlack(paint. GetImage(), 112, 78, paint. GetWidth(), paint. GetHeight());

Krok 9: BEZ KOLORU na kolorowym tle

NIEKOLOROWANE na kolorowym tle
NIEKOLOROWANE na kolorowym tle

Świetnie nam się tu dogaduje! Tak więc, gdy jesteśmy w ruchu, zróbmy jeszcze 3 okręgi w rzędzie poniżej, tym razem BEZ KOLORU na obiekcie z kolorową farbą, tak jak zrobiliśmy to z drugim wierszem tekstu.

//TRZECI RZĄD

// Okrągła farba. Clear(COLORED); farba. DrawCircle(20, 18, 15, BEZ KOLORU); epd. SetPartialWindowRed(paint. GetImage(), 32, 114, paint. GetWidth(), paint. GetHeight()); // Farba Shaded Circle. Lakier Clear(COLORED). DrawShadedCircle(20, 18, 15); epd. SetPartialWindowBlack(paint. GetImage(), 72, 114, paint. GetWidth(), paint. GetHeight()); //Wypełnione koło farby. Clear(COLORED); farba. DrawFilledCircle(20, 18, 15, UNCOLORED); epd. SetPartialWindowRed(paint. GetImage(), 112, 114, paint. GetWidth(), paint. GetHeight());

Oprócz wypełnienia cieniowanego istnieje również wypełnienie nakrapiane, które koloruje losowe piksele. Więc zamiast zacienionego koła powyżej moglibyśmy umieścić

farba. Narysuj Nakrapiany Okrąg(20, 18, 15, 25);

Ostatnim parametrem (25) jest gęstość, czyli procent pikseli do pokolorowania. W przypadku pominięcia zakłada się 50%.

Istnieje również DrawSpeckledRectangle z opcjonalnym dodatkowym parametrem określającym gęstość.

Krok 10: Obrót

Obrót
Obrót
Obrót
Obrót

Wszystko, co możemy narysować, możemy obracać o 90, 180 lub 270 stopni. (Obrót liczymy zgodnie z ruchem wskazówek zegara.)

Możemy zastosować właściwość ROTATE do obiektu malowania, ale ważne jest, aby zrozumieć, że to nie obiekt malowania jest obracany, ale wszystko, co do niego piszesz. Więc jeśli chcesz tekst w pionie, musisz skonfigurować swój obiekt do malowania jako długi i cienki w kierunku pionowym, a nie poziomym.

Więc jeśli chcesz, aby tekst był obrócony zgodnie z ruchem wskazówek zegara o 90 stopni, tak aby czytał od góry do dołu (zamiast od lewej do prawej), prawy górny róg obiektu malowania będzie (0, 0) na potrzeby wszystkiego, co piszesz lub narysuj, z x mierzonym od tego rogu w dół, a y od tego rogu w lewo.

Zapewne zauważyłeś, że zostawiliśmy spację po lewej stronie wyświetlacza. Napiszmy więc tam jakiś tekst obrócony o 270 stopni, czyli czytanie od dołu do góry. Spowoduje to umieszczenie (0, 0) w lewym dolnym rogu.

Zwróć uwagę, że niezależnie od tego, jak obracasz malowany obiekt, obrót ma zastosowanie tylko wtedy, gdy rysujesz na nim piksele. Kiedy przychodzisz, aby zapisać go na urządzeniu, nadal są to współrzędne lewego górnego rogu, które musisz podać SetPartialWindow.

Podsumowując, skonfigurujmy nasz obiekt do malowania tak, aby miał szerokość 32 i wysokość 110, a my damy mu właściwość ROTATE_270. Nie, że musimy to wszystko zrobić, zanim coś do tego napiszemy lub narysujemy.

farba. Szerokość zestawu(32);

farba. Wysokość(110); farba. UstawObrót(OBRÓĆ_270);

Wyczyścimy go do COLORED i napiszemy do niego ciąg UNCOLORED, a następnie umieścimy go na (0, 42). (Pamiętaj, że to lewy górny róg. Zapomnij o jakimkolwiek obrocie znajdujących się w nim pikseli.)

farba. Przezroczysty(KOLOROWY); paint. DrawStringAt(8, 8, "W bok!", &Font16, UNCOLORED); epd. SetPartialWindowBlack(paint. GetImage(), 0, 42, paint. GetWidth(), paint. GetHeight());

Na koniec musimy powiedzieć urządzeniu, aby wyświetlało wszystkie piksele, które mu daliśmy. A jeśli nie zamierzamy go przez jakiś czas zmieniać i chcemy oszczędzać energię baterii, możemy go uśpić, a także uśpić Arduino, aby zostać obudzonym, gdy nadejdzie czas na wzięcie i wyświetlenie innego pomiar.

epd. Wyświetlana ramka();

epd. Sen();

Drugi przykładowy szkic pokazuje obrót o 90, 180 i 270 stopni. Do tej pory powinieneś być w stanie sam go śledzić.

Krok 11: Rysowanie bitmap

Rysowanie bitmap
Rysowanie bitmap

Demo dostawcy obejmuje wyświetlanie kilku obrazów bitmapowych. Można je łatwo utworzyć za pomocą narzędzia, które można pobrać z

www.buydisplay.com/image2lcd

Jest dostarczany jako plik zip zawierający plik instalacyjny.exe i plik tekstowy zawierający klucz licencyjny. Rozwiń go, a następnie kliknij dwukrotnie plik.exe, aby go zainstalować.

Oczywiście istnieją dość surowe ograniczenia dotyczące tego, co można wyświetlić, ponieważ piksele E-ink mogą być tylko włączone lub wyłączone, a więc nie mogą reprezentować poziomów szarości. Możliwe jest jednak nałożenie na obraz prostokątnego obiektu z farbą. Możesz chcieć wyświetlić logo, symbole lub stały tekst w fantazyjnej czcionce, na który można nałożyć zmienny tekst lub grafikę, taką jak wykres słupkowy lub kołowy, być może wskazując coś w rodzaju poziomu cieczy.

Możesz utworzyć swój obraz za pomocą dowolnego oprogramowania do rysowania, które znasz, lub skanować w szkicu lub rysunku, ale w obu przypadkach musisz być w stanie zredukować go do zaledwie 2 poziomów. Zapisz go jako.gif,-j.webp

Uruchom Image2Lcd. Na dole zobaczysz zakładkę Zarejestruj się. Kliknij na to i wprowadź kod rejestracyjny, który znalazł się w pliku tekstowym w pobranym pliku zip. Spowoduje to usunięcie nakładki na obrazie.

W Image2Lcd otwórz plik obrazu. W lewym okienku upewnij się, że masz

  • Typ pliku wyjściowego: tablica C
  • Tryb skanowania: Skanowanie poziome
  • BitsPixel: Monochromatyczny
  • Maksymalna szerokość i wysokość: rozmiar wyświetlacza i
  • Uwzględnij dane głowy musi być odznaczone.

Kliknij przycisk obok Maks. szerokość i wysokość do przetworzenia. Zostanie wyświetlony wynik przetwarzania. Być może trzeba będzie dostosować suwaki Jasność i Kontrast, aby uzyskać najlepsze wyniki.

Kliknij pole wyboru Odwróć kolor nad suwakiem Jasność, dzięki czemu jest to obraz negatywowy, co z jakiegoś powodu jest konieczne, a następnie kliknij Zapisz, aby zapisać go jako imagedata.cpp w folderze zawierającym szkic Arduino. Następnym razem, gdy otworzysz szkic za pomocą Arduino IDE, powinieneś zobaczyć go jako nową kartę.

Krok 12: Wyświetlanie mapy bitowej

Wyświetlanie mapy bitowej
Wyświetlanie mapy bitowej

W głównym pliku szkicu Arduino, zaraz za liniami #include u góry, wstaw:

#include "imagedata.h"

Utwórz nową kartę (kliknij strzałkę w dół na końcu wiersza kart) i nazwij ją imagedata.h. Wstaw w nim następujące 2 wiersze:

extern const unsigned char IMAGE_BLACK;

extern const unsigned char IMAGE_RED;

W pliku imagedata.cpp pierwsza linia zaczyna się od

const unsigned char gImage_image[2888] = {

(Liczba w nawiasach kwadratowych będzie inna, jeśli nie używasz wyświetlacza 1,54”.) Zastąp to przez

const unsigned char IMAGE_BLACK PROGMEM = {

To jest dla obrazu czarno-białego. Jeśli chcesz, aby był czerwony i biały, zmień go na

const unsigned char IMAGE_RED PROGMEM = {

Tuż przed tą linią dodaj

#włączać

#include "imagedata.h"

Jesteś teraz gotowy do wyświetlenia swojego obrazu. W loop() w twoim głównym pliku dodaj

epd. WyczyśćRamkę();

epd. DisplayFrame(IMAGE_BLACK, NULL);

Lub, jeśli był to czerwony obraz, który utworzyłeś, druga linia powinna być

epd. DisplayFrame (NULL, IMAGE_RED);

W rzeczywistości możesz utworzyć połączony obraz czerwony i czarny, konwertując osobno czerwone i czarne części za pomocą Image2Lcd i wyświetlając je za pomocą

epd. DisplayFrame (IMAGE_BLACK, IMAGE_RED);

Jednak wszystkie piksele, które są określone zarówno jako czarne na obrazie czarno-białym, jak i czerwone na obrazie czerwono-białym, wyjdą na czerwono.

Na koniec możesz nałożyć na swój obraz dowolną z funkcji tekstowych lub graficznych, o których dowiedzieliśmy się wcześniej. Chciałem dodać uchwyt na Twittera, więc dodałem

Farba do malowania(obraz, 20, 152); //szerokość powinna być wielokrotnością 8

farba. UstawObrót(OBRÓĆ_270); farba. Przezroczysta (NIEKOLOROWA); paint. DrawStringAt(20, 2, "@pleriche", &Font16, KOLOROWE); epd. SetPartialWindowRed(paint. GetImage(), 0, 0, paint. GetWidth(), paint. GetHeight()); epd. SetPartialWindowRed(paint. GetImage(), 0, 0, paint. GetWidth(), paint. GetHeight()); epd. Wyświetlana ramka();

Zalecana: