Cách thêm màn hình E-Ink vào dự án của bạn: 12 bước (có hình ảnh)
Cách thêm màn hình E-Ink vào dự án của bạn: 12 bước (có hình ảnh)
Anonim
Cách thêm màn hình E-Ink vào dự án của bạn
Cách thêm màn hình E-Ink vào dự án của bạn
Cách thêm màn hình E-Ink vào dự án của bạn
Cách thêm màn hình E-Ink vào dự án của bạn

Rất nhiều dự án liên quan đến việc giám sát một số loại dữ liệu, chẳng hạn như dữ liệu môi trường, thường sử dụng Arduino để kiểm soát. Trong trường hợp của tôi, tôi muốn theo dõi mức muối trong chất làm mềm nước của mình. Bạn có thể muốn truy cập dữ liệu qua mạng gia đình của mình, nhưng bạn cũng có thể muốn hiển thị dữ liệu ở nơi nó đang được đo. Hoặc bạn có thể có một màn hình luôn bật được kết nối từ xa ở một vị trí thuận tiện hơn.

Hiện tại có một số loại màn hình bạn có thể sử dụng, tất cả đều khá rẻ, nhưng có những ưu và nhược điểm khác nhau:

  • Màn hình LCD chữ và số là loại rẻ nhất nhưng cũng có nhiều hạn chế nhất.
  • Màn hình OLED có thể hiển thị đồ họa nhưng loại rẻ tiền rất nhỏ. Bức ảnh thứ hai cho thấy màn hình OLED 128x64 pixel bên cạnh màn hình E-Ink.
  • Màn hình E-Ink (hoặc E-Paper) lớn hơn một chút và do đó dễ đọc hơn, và có lợi thế là màn hình vẫn được giữ lại ngay cả khi nó đã tắt! Nhưng phải mất vài giây để vẽ lại màn hình.

Màn hình E-Ink có vẻ lý tưởng cho ứng dụng của tôi vì tôi có thể lập trình Arduino để thức dậy chỉ vài giờ một lần, đọc và hiển thị nó trước khi ngủ lại. Sau đó không có hậu quả là phải mất vài giây để vẽ lại màn hình.

Trong một ứng dụng như vậy, mức tiêu thụ dòng điện trung bình có thể được sắp xếp thấp đến mức một pin máy dò khói 9V lithium có thể hoạt động trong 10 năm! Hơn nữa, một số màn hình này sẽ hiển thị ba màu: trắng, đen và đỏ (hoặc vàng). Lý tưởng nếu bạn muốn hiển thị cảnh báo hoặc cảnh báo bằng màu đỏ.

Quân nhu

Màn hình E-Ink rẻ nhất mà tôi tìm thấy được bán bởi BuyDisplay, cũng có sẵn từ nhiều người bán trên eBay. Thật không may, tài liệu còn lại khá nhiều thứ để được mong muốn vì vậy tôi đã tự mình viết một hướng dẫn - hãy đọc tiếp!

Tùy thuộc vào yêu cầu và ngân sách của bạn, bạn có thể lựa chọn các kích thước khác nhau:

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

(Phạm vi đã mở rộng kể từ lần cuối cùng tôi nhìn vào, vì vậy có thể đã mở rộng hơn nữa vào lần bạn đọc nó.)

Chúng có sẵn dưới dạng 2 màu (đen / trắng) hoặc 3 màu (đen / đỏ / trắng hoặc đen / vàng / trắng). Có thể hướng dẫn này giả định rằng bạn đang sử dụng phiên bản màu đỏ, nhưng nếu bạn đã chọn phiên bản màu vàng, chỉ cần đọc "màu vàng" cho "màu đỏ" trong suốt.

Chọn phiên bản SPI (4 dây). Tôi đã sử dụng mô hình 1.54 , đó là một kích thước rất đẹp.

Bước 1: Kết nối màn hình của bạn

Kết nối màn hình của bạn
Kết nối màn hình của bạn

Những màn hình này đi kèm với một tiêu đề pin 2x4. Các số pin được dán nhãn rõ ràng, các chân 7, 5, 3 và 1 (từ trái sang phải) dọc theo hàng trên và 8, 6, 4, 2 dọc theo hàng dưới.

Màn hình của bạn có thể đi kèm với cáp vá 8 chiều, giúp kết nối dễ dàng. (Cáp vá của tôi có 2 dây màu đỏ và 2 dây màu nâu. Chúng không thể hoán đổi cho nhau!

Bảng sau đây cung cấp các kết nối, áp dụng cho hầu hết các loại Arduino (bao gồm Uno, Pro Mini, Pro Micro và Nano).

Mô-đun mực điện tử Arduino
Ghim Tên Ghim Tên
1 VDD Vcc 3.3 / 5V
2 VSS Gnd Gnd
3 Dữ liệu nối tiếp trong 11 MOSI
4 Đồng hồ nối tiếp trong 13 SCK
5 / Chọn chip 10
6 Dữ liệu / Hướng dẫn 9
7 Cài lại 8
8 Thiết bị bận 7

Bước 2: Tải xuống phần mềm được cung cấp

Bạn có thể sử dụng phần mềm được cung cấp như được mô tả trong bước này hoặc bạn có thể sử dụng thư viện nâng cao của tôi trong bước tiếp theo nhưng một.

Tìm thiết bị của bạn tại BuyDisplay.com. Ở cuối trang, bạn sẽ tìm thấy tệp ZIP tải xuống "Thư viện Arduino và ví dụ cho SPI 4 dây". Nhấp vào đây để tải xuống và mở trong Windows Explorer.

Windows Explorer sẽ hiển thị điều này khi chứa một thư mục cấp cao nhất "Libraries-Examples_ER-EPM0154-1R". (Tên sẽ hơi khác nếu của bạn không phải là kiểu máy 1.54 ".)

Sao chép thư mục cấp cao nhất này vào thư mục thư viện Arduino của bạn. Nhấp chuột phải để đổi tên thư mục và xóa "Libraries-Examples_" khỏi tên.

(Để tìm thư mục thư viện Arduino của bạn, trong Arduino IDE, nhấp vào Tệp… Tùy chọn và lưu ý Vị trí sổ phác thảo. Điều hướng đến mục này và bạn sẽ tìm thấy thư mục "thư viện" Arduino trong số các thư mục phác thảo của mình.)

Mở thư mục này và mở thư mục "Thư viện" bên trong nó. Kéo và thả tất cả các tệp trong thư mục này vào thư mục mẹ lên một cấp ("ER-EPM0154-1R"). Xóa thư mục "Libraries" (bây giờ trống).

Bây giờ bạn đã cài đặt các tệp và bản phác thảo kiểm tra dưới dạng thư viện Arduino. Lưu ý rằng nếu màn hình của bạn không phải là màn hình 1,54 , thì sự khác biệt duy nhất dường như là hai dòng trong ER-ERM * -1.h xác định WIDTH và HEIGHT.

Trong Arduino IDE, nhấp vào File… Exampes và cuộn xuống ER-EPM0154-1R để xem bản phác thảo demo, bạn sẽ có thể biên dịch và chạy ngay sau khi kết nối màn hình với Arduino.

Bước 3: Chạy Demo

Chạy Demo
Chạy Demo
Chạy Demo
Chạy Demo

Trong IDE Arduino, nhấp vào Tệp… Ví dụ… ER-EPM0154-1R.

Kết nối Arduino với máy tính của bạn bằng cáp USB hoặc theo cách bạn thường làm.

Trong Công cụ, đặt Bo mạch, Bộ xử lý và Cổng.

Trong Phác thảo, nhấp vào Tải lên.

Sẽ có một chút chậm trễ sau khi tải lên hoàn tất và mười độ trễ sẽ nhấp nháy một số lần khi nó vẽ hình ảnh đầu tiên. Xem trong khi nó đi qua bản demo.

Bước 4: Sử dụng Thư viện nâng cao

Bạn có thể tải xuống thư viện nâng cao của tôi từ github tại

N. B. Tôi rất tin tưởng rằng thư viện của mình sẽ hoạt động với bất kỳ màn hình tương thích với kích thước nào, nhưng trên thực tế, tôi chỉ thử nghiệm nó với kiểu 1,54 . Nếu bạn sử dụng một cái khác, vui lòng cho tôi biết trong phần nhận xét ở cuối của Có thể hướng dẫn này, để xác nhận rằng nó hoạt động. Nhưng nếu không, tôi sẽ cố gắng hết sức để giúp bạn tiếp tục.

Tải xuống và lưu tệp zip. Trong Arduino IDE, nhấp vào Phác thảo… Bao gồm Thư viện… Thêm Thư viện. ZIP và chọn tệp zip đã lưu.

Thư viện của tôi có một số cải tiến nhỏ:

  • Nó cho phép các số pin Arduino khác nhau được sử dụng (ngoại trừ MOSI).
  • Cùng một thư viện có thể được sử dụng thiết bị kích thước forany.
  • Màu tô bóng mờ 50% mới và tô màu có đốm (tập hợp pixel ngẫu nhiên) được cung cấp.

Thư viện đi kèm dưới dạng tệp nén (zip) Arduino tiêu chuẩn. Tải xuống thư mục Tải xuống của bạn (hoặc nơi bạn muốn) và trong Arduino IDE, nhấp vào Phác thảo… Bao gồm Thư viện… Thêm Thư viện ZIP.

Trong Ví dụ, bây giờ bạn sẽ tìm thấy E-ink_ER-EPM. Có 3 bản phác thảo ví dụ:

  • ER_EPM154-1R-Test: Bản trình diễn ban đầu do nhà cung cấp cung cấp
  • E-ink_demo: Bản phác thảo được phát triển trong các bước tiếp theo
  • E-ink_rotate: Trình diễn khả năng xoay hình ảnh.

Bước 5: Tự lập trình

Rất tiếc, không có tài liệu nào có mã do nhà cung cấp cung cấp, cũng như mã ví dụ không được nhận xét đầy đủ. Điều này làm cho nó khó hơn mức cần thiết để sử dụng và mục đích chính của Sách hướng dẫn này là làm cho điều đó trở nên đúng đắn.

Các khái niệm cơ bản

Vì Arduino bị giới hạn về số lượng RAM có sẵn, nên thư viện cho phép bạn vẽ hoặc ghi vào các phần nhỏ của màn hình tại một thời điểm, tải từng phần một vào bộ nhớ trong của thiết bị. Chỉ khi bạn đã tải lên tất cả các phần bạn cần, bạn mới yêu cầu nó hiển thị những gì nó có trong bộ nhớ.

Các phần này của màn hình được gọi là các đối tượng "Sơn". Bạn chỉ cần một và đối với mỗi phần của màn hình, bạn xác định chiều cao, chiều rộng và xoay của nó. Khi hoàn tất, bạn tải nó lên, xác định vị trí trên màn hình để tải nó và nó phải là đen trắng hay đỏ trắng.

Góc trên bên trái của màn hình có tọa độ ngang (x) và dọc (y) (0, 0), góc dưới bên trái là (0, 151) và trên cùng bên phải là (151, 0).

Khởi tạo

Mở bản phác thảo E-ink_demo trong Arduino IDE và làm theo nó khi tôi mô tả cách sử dụng thư viện.

Ở trên cùng của bản phác thảo, bạn sẽ thấy những dòng sau, những dòng này luôn cần thiết:

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

Các dòng #include kéo các thư viện bắt buộc. SPI.h là một thư viện Arduino tiêu chuẩn nhưng các thư viện khác tạo thành một phần của thư viện e-ink.

Chúng tôi xác định tên cho các pixel KHÔNG CÓ MÀU SẮC (màu trắng) và CÓ MÀU SẮC (màu đen hoặc màu đỏ). (Lưu ý với những người châu Âu của tôi: cách viết của người Mỹ là COLOR được sử dụng.)

The Epd epd; dòng tạo đối tượng thiết bị giấy điện tử, trên đó chúng tôi sẽ hiển thị. Điều này phải ở đây khi bắt đầu phác thảo để làm cho nó có sẵn để phân biệt các hàm setup () và loop ().

Nếu bạn có màn hình kích thước khác, bạn có thể thay thế dòng EPD bằng cách:

Epd epd (WIDTH, HEIGHT);

(đã xác định trước đó WIDTH và HEIGHT trong câu lệnh #define.)

Theo cách tương tự, bạn có thể chỉ định số pin không phải mặc định với:

Tập epd (WIDTH, HEIGHT, BUSY_PIN, RESET_PIN, DC_PIN, CS_PIN);

Trong thiết lập (), chúng ta cần khởi tạo thiết bị như sau:

Serial.begin (9600)

if (epd. Init ()! = 0) {Serial.print ("Lỗi e-Paper init"); trở lại; }

(Trên thực tế, epd. Init () không bao giờ trả về lỗi, nhưng một cải tiến trong tương lai có thể phát hiện ra sự thiếu vắng của màn hình hoặc màn hình không hoạt động.)

Bước 6: Viết văn bản

Viết văn bản
Viết văn bản

Trong E-ink_demo, hãy chuyển sự chú ý của bạn đến loop (). Đầu tiên, hãy xóa màn hình:

epd. ClearFrame ()

(Điều này thực sự không cần thiết nếu bạn sắp hiển thị hình ảnh của chính mình.)

Trước khi có thể vẽ bất cứ thứ gì (dù là văn bản hay đồ họa), chúng ta cần tạo một đối tượng Paint để vẽ:

hình ảnh char không dấu [1024]

Sơn sơn (hình, 152, 18); // chiều rộng phải là bội số của 8

Điều này dự trữ một số không gian (1024 byte) và phân bổ nó cho đối tượng Paint, kết thúc bằng dòng thứ hai. Điều này được định cấu hình tạm thời là rộng 152 pixel và sâu 18 pixel. Chúng tôi có thể định cấu hình lại nó sau này để sử dụng lại khi cần thiết, nhưng lưu ý: chiều rộng phải là nhiều của 8 vì 8 pixel được lưu trữ trên mỗi byte và chúng tôi không thể chia byte. (Trên thực tế, nó sẽ làm tròn nó nếu cần thiết, nhưng sau đó có thể gây khó hiểu khi màn hình của bạn không trông như thế nào.

Bây giờ chúng ta phải xóa đối tượng sơn thành KHÔNG CÓ (màu trắng), sau đó tại vị trí (x, y) = (22, 2) chúng ta viết "e-ink Demo" bằng cách sử dụng phông chữ cao 16 pixel và MÀU SẮC (để hiển thị so với Nền chưa được công bố.

sơn. rõ ràng (KHÔNG ĐƯỢC SỬ DỤNG)

paint. DrawStringAt (12, 2, "e-paper Demo", & Font16, COLORED);

Lưu ý rằng tọa độ (22, 2) là góc trên cùng bên trái của ký tự đầu tiên của chuỗi và là 22 pixel trong và 2 pixel xuống so với góc trên cùng bên trái của đối tượng sơn, không phải toàn bộ màn hình. Văn bản trông đẹp nhất ít nhất một pixel xuống từ trên cùng của đối tượng sơn.

Các phông chữ sau có sẵn:

Font 8 - 5x8 pixelFont12 - 7x12 pixelFont16 - 11x16 pixelFont20 - 14x20 pixelFont24 - 17x24 pixel

Bây giờ chúng ta chỉ cần gửi đối tượng paint ("paint") đến thiết bị ("epd"):

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

SetPartialWindowBlack là một phương thức mà chúng tôi áp dụng cho đối tượng epd, sử dụng hình ảnh và các thuộc tính chiều rộng và chiều sâu của đối tượng paint. Chúng tôi yêu cầu nó ghi hình ảnh này vào thiết bị tại (x, y) = (0, 3). Và chúng tôi đang nói các pixel MÀU SẮC sẽ có màu đen.

Điều đó không quá khó phải không? Hãy thử một cái khác.

sơn. rõ ràng (MÀU SẮC);

paint. DrawStringAt (20, 2, "(Màu trắng trên màu)", & Font12, UNCOLORED); epd. SetPartialWindowRed (paint. GetImage (), 0, 24, paint. GetWidth (), paint. GetHeight ());

Chúng tôi sử dụng lại cùng một đối tượng paint, cùng chiều rộng và chiều cao, nhưng lần này, hãy xóa nó thành COLORED và viết một chuỗi UNCOLORED vào nó. Và để thay đổi, chúng tôi sẽ làm cho các pixel COLORED có màu đỏ và ghi nó vào thiết bị tại (0, 24), ngay bên dưới điểm ảnh đầu tiên.

Chúng tôi đã ghi hai đối tượng sơn vào bộ nhớ của thiết bị nhưng chưa yêu cầu thiết bị hiển thị chúng. Chúng tôi làm điều này với tuyên bố sau:

epd. DisplayFrame ();

(Trong bản phác thảo E-ink_demo, chúng tôi thực sự để điều này cho đến cuối, sau khi vẽ thêm một số thứ, nhưng bạn có thể chèn nó vào đây nếu bạn thích, mybe theo sau là delay (10000); để bạn có thời gian chiêm ngưỡng tác phẩm thủ công của mình).

Bước 7: Vẽ đường thẳng và hình chữ nhật

Vẽ đường thẳng và hình chữ nhật
Vẽ đường thẳng và hình chữ nhật

Chúng ta hãy xem làm thế nào để vẽ các đường thẳng và hình chữ nhật. Chúng ta sẽ sử dụng cùng một đối tượng sơn, nhưng chúng ta cần phải cấu hình lại nó thành chiều rộng 40 pixel và chiều cao 36 pixel. Chúng tôi sẽ xóa nó thành UNCOLORED.

sơn. SetWidth (40);

sơn. SetHeight (36); paint. Clear (KHÔNG ĐƯỢC SỬ DỤNG);

Chúng ta sẽ vẽ một hình chữ nhật (MÀU SẮC) với góc trên bên trái (5, 3) và góc dưới bên phải (35, 33), liên quan đến đối tượng sơn, như bình thường. Chúng tôi cũng sẽ vẽ các đường chéo của nó dưới dạng các đường từ (5, 3) đến (35, 33) và từ (35, 3) đến (5, 33). Cuối cùng, chúng ta sẽ viết toàn bộ đối tượng sơn (màu đỏ) ra màn hình tại (32, 42).

//HÀNG ĐẦU:

// Rectange paint. Clear (UNCOLORED); paint. DrawRectangle (5, 3, 35, 33, COLORED;) paint. DrawLine (5, 3, 35, 33, COLORED); paint. DrawLine (35, 3, 5, 33, COLORED); epd. SetPartialWindowRed (paint. GetImage (), 32, 42, paint. GetWidth (), paint. GetHeight ());

Thư viện, khi nó xuất hiện, cũng cung cấp một hình chữ nhật được tô đầy, nhưng này, tôi muốn có một cái bóng mờ, vì vậy tôi đã thêm một phương thức mới. Chúng tôi sẽ tạo thêm hai hình chữ nhật, một bóng mờ và một tô màu, và đặt chúng ở bên phải của hình đầu tiên, xen kẽ chúng màu đen và đỏ.

// Shaded Rectange paint. Clear (UNCOLORED); paint. DrawShadedRectangle (5, 3, 35, 33); epd. SetPartialWindowBlack (paint. GetImage (), 72, 42, paint. GetWidth (), paint. GetHeight ()); // Đã điền Rectangle paint. Clear (UNCOLORED); paint. DrawFilledRectangle (5, 3, 35, 33, COLORED); epd. SetPartialWindowRed (paint. GetImage (), 112, 42, paint. GetWidth (), paint. GetHeight ());

Bước 8: Vẽ vòng tròn

Vẽ vòng kết nối
Vẽ vòng kết nối

Các vòng tròn cũng dễ vẽ. Thay vì tọa độ của hai góc, chúng ta phải tính tọa độ của tâm và bán kính. Chúng tôi sẽ xóa đối tượng sơn sau đó đặt một vòng tròn ở (20, 15) (so với đối tượng sơn) và bán kính 15. Và lặp lại cho một hình tròn được tô bóng và tô màu.

// ROW THỨ HAI

// Hình tròn paint. Clear (UNCOLORED); paint. DrawCircle (20, 18, 15, COLORED); epd. SetPartialWindowBlack (paint. GetImage (), 32, 78, paint. GetWidth (), paint. GetHeight ()); // Shaded Circle paint. Clear (UNCOLORED); paint. DrawShadedCircle (20, 18, 15); epd. SetPartialWindowRed (paint. GetImage (), 72, 78, paint. GetWidth (), paint. GetHeight ()); // Đã tô đầy vòng tròn paint. Clear (UNCOLORED); sơn. DrawFilledCircle (20, 18, 15, MÀU SẮC); epd. SetPartialWindowBlack (paint. GetImage (), 112, 78, paint. GetWidth (), paint. GetHeight ());

Bước 9: BẤT NGỜ trên nền nền MÀU SẮC

BẤT NGỜ trên nền tảng MÀU SẮC
BẤT NGỜ trên nền tảng MÀU SẮC

Chúng tôi đang trở nên nổi tiếng ở đây! Vì vậy, trong khi chúng ta đang cuộn, chúng ta hãy thực hiện thêm 3 vòng tròn trên một hàng bên dưới, lần này là KHÔNG ĐƯỢC BẮT ĐẦU trên một đối tượng sơn MÀU SẮC, giống như chúng ta đã làm với dòng văn bản thứ hai.

// ROW THỨ BA

// Hình tròn paint. Clear (COLORED); paint. DrawCircle (20, 18, 15, UNCOLORED); epd. SetPartialWindowRed (paint. GetImage (), 32, 114, paint. GetWidth (), paint. GetHeight ()); // Shaded Circle paint. Clear (COLORED) paint. DrawShadedCircle (20, 18, 15); epd. SetPartialWindowBlack (paint. GetImage (), 72, 114, paint. GetWidth (), paint. GetHeight ()); // Đã tô đầy vòng tròn paint. Clear (COLORED); paint. DrawFilledCircle (20, 18, 15, UNCOLORED); epd. SetPartialWindowRed (paint. GetImage (), 112, 114, paint. GetWidth (), paint. GetHeight ());

Ngoài tô bóng mờ, còn có tô tô lốm đốm, tô màu các pixel ngẫu nhiên. Vì vậy, thay vì vòng tròn bóng mờ ở trên, chúng tôi có thể đặt

sơn. DrawSpeckledCircle (20, 18, 15, 25);

Tham số cuối cùng (25) là mật độ, tức là phần trăm pixel được tô màu. Nếu bỏ qua, 50% được giả định.

Ngoài ra còn có DrawSpeckledRectangle, với một tham số bổ sung tùy chọn chỉ định mật độ.

Bước 10: Xoay

Vòng xoay
Vòng xoay
Vòng xoay
Vòng xoay

Bất cứ thứ gì chúng ta có thể vẽ, chúng ta có thể xoay 90, 180 hoặc 270 độ. (Chúng tôi đếm số vòng quay theo chiều kim đồng hồ.)

Chúng ta có thể áp dụng thuộc tính ROTATE cho một đối tượng paint, nhưng điều quan trọng là phải hiểu rằng nó không phải là đối tượng paint được xoay mà là mọi thứ bạn ghi vào nó. Vì vậy, nếu bạn muốn văn bản dọc, bạn cần phải định cấu hình đối tượng sơn của mình dài và mỏng theo hướng dọc thay vì theo chiều ngang.

Vì vậy, nếu bạn muốn xoay văn bản theo chiều kim đồng hồ 90 độ để nó đọc từ trên xuống dưới (thay vì từ trái sang phải), thì góc trên cùng bên phải của đối tượng paint sẽ là (0, 0) cho mục đích của bất kỳ thứ gì bạn viết hoặc vẽ trong đó, với x được chia từ góc đó xuống dưới, và y từ góc đó về phía bên trái.

Bạn có thể nhận thấy rằng chúng tôi đã để lại một khoảng trống ở phía bên trái của màn hình. Vì vậy, hãy viết một số văn bản ở đó xoay 270 độ, tức là đọc từ dưới lên. Điều này sẽ đặt (0, 0) ở góc dưới cùng bên trái.

Lưu ý rằng tuy nhiên bạn xoay một đối tượng sơn, việc xoay chỉ áp dụng khi bạn vẽ các pixel lên nó. Khi bạn ghi nó vào thiết bị, nó vẫn là tọa độ của góc trên cùng bên trái mà bạn phải cung cấp cho SetPartialWindow.

Vì vậy, để tóm tắt lại, hãy cấu hình đối tượng paint của chúng ta có chiều rộng 32 và chiều cao 110, và chúng tôi sẽ cung cấp cho nó thuộc tính ROTATE_270. Không phải chúng ta phải làm tất cả những điều này trước khi viết hoặc vẽ bất cứ thứ gì lên nó.

sơn. SetWidth (32);

sơn. SetHeight (110); paint. SetRotate (ROTATE_270);

Chúng tôi sẽ xóa nó thành COLORED và viết một chuỗi UNCOLORED vào nó, sau đó đặt nó tại (0, 42). (Đó là góc trên cùng bên trái, hãy nhớ. Hãy quên bất kỳ vòng quay nào của các pixel trong đó.)

sơn. rõ ràng (MÀU SẮC); paint. DrawStringAt (8, 8, "Sideways!", & Font16, UNCOLORED); epd. SetPartialWindowBlack (paint. GetImage (), 0, 42, paint. GetWidth (), paint. GetHeight ());

Cuối cùng, chúng ta cần yêu cầu thiết bị hiển thị tất cả các pixel mà chúng ta đã cung cấp cho nó. Và nếu chúng ta không muốn thay đổi nó trong một thời gian và muốn tiết kiệm pin, chúng ta có thể đặt nó ở chế độ ngủ, và tại sao không đặt Arduino ở chế độ ngủ, để được đánh thức khi đến lúc lấy và hiển thị đo đạc.

epd. DisplayFrame ();

epd. Sleep ();

Bản phác thảo ví dụ thứ hai cho thấy xoay 90, 180 và 270 độ. Bây giờ bạn đã có thể tự mình theo dõi nó.

Bước 11: Vẽ Bitmap

Vẽ Bitmap
Vẽ Bitmap

Bản trình diễn của nhà cung cấp bao gồm việc hiển thị một vài hình ảnh bitmap. Chúng dễ dàng tạo ra bằng cách sử dụng một công cụ có thể được tải xuống từ

www.buydisplay.com/image2lcd

Nó có dạng tệp nén chứa tệp cài đặt.exe và tệp văn bản chứa khóa cấp phép. Mở rộng nó sau đó nhấp đúp vào tệp.exe để cài đặt nó.

Rõ ràng, có những hạn chế khá nghiêm trọng đối với những gì bạn có thể hiển thị vì pixel E-ink chỉ có thể bật hoặc tắt và do đó không thể biểu thị mức độ xám. Nhưng có thể phủ một đối tượng sơn hình chữ nhật lên một hình ảnh. Bạn có thể muốn hiển thị logo, biểu tượng hoặc văn bản cố định bằng một phông chữ lạ mắt, lên đó bạn có thể phủ lên văn bản hoặc đồ họa có thể thay đổi như biểu đồ thanh hoặc biểu đồ hình tròn, có thể chỉ ra thứ gì đó giống như mức chất lỏng.

Bạn có thể tạo hình ảnh của mình bằng bất kỳ phần mềm vẽ nào mà bạn quen thuộc hoặc bạn có thể quét trong bản phác thảo hoặc bản vẽ, nhưng trong cả hai trường hợp, bạn cần có thể giảm nó xuống chỉ còn 2 cấp. Lưu nó dưới dạng.gif,-j.webp

Khởi chạy Image2Lcd. Ở phía dưới cùng, bạn sẽ thấy một tab Đăng ký. Nhấp vào đây và nhập mã đăng ký có trong tệp văn bản trong tệp zip bạn đã tải xuống. Thao tác này sẽ xóa lớp phủ trên hình ảnh.

Trong Image2Lcd, mở tệp hình ảnh của bạn. Trong ngăn bên trái, hãy đảm bảo rằng bạn có

  • Loại tệp đầu ra: mảng C
  • Chế độ quét: Quét ngang
  • BitsPixel: Đơn sắc
  • Chiều rộng và Chiều cao tối đa: kích thước màn hình của bạn và
  • Bao gồm dữ liệu đầu phải được bỏ chọn.

Nhấp vào nút bên cạnh Chiều rộng và Chiều cao Tối đa để xử lý. Kết quả xử lý sẽ được hiển thị. Bạn có thể phải điều chỉnh thanh trượt Độ sáng và Độ tương phản để có được kết quả tốt nhất.

Nhấp vào hộp kiểm Đảo ngược màu phía trên thanh trượt Độ sáng, đặt nó thành hình ảnh âm bản, vì một số lý do là cần thiết, sau đó nhấp vào Lưu để lưu nó dưới dạng imagedata.cpp trong thư mục chứa bản phác thảo Arduino của bạn. Lần tới khi bạn mở bản phác thảo bằng Arduino IDE, bạn sẽ thấy nó như một tab mới.

Bước 12: Hiển thị Bitmap của bạn

Hiển thị Bitmap của bạn
Hiển thị Bitmap của bạn

Trong tệp chính của bản phác thảo Arduino của bạn, ngay sau các dòng #include ở trên cùng, hãy chèn:

#include "imagedata.h"

Tạo một tab mới (nhấp vào mũi tên xuống ở cuối dòng tab) và gọi nó là imagedata.h. Chèn 2 dòng sau vào đó:

extern const unsigned char IMAGE_BLACK ;

extern const unsigned char IMAGE_RED ;

Trong tệp imagedata.cpp của bạn, dòng đầu tiên sẽ bắt đầu bằng

const unsigned char gImage_image [2888] = {

(Số trong ngoặc vuông sẽ khác nếu bạn không sử dụng màn hình 1,54”.) Hãy thay thế điều này bằng

const unsigned char IMAGE_BLACK PROGMEM = {

Đây là hình ảnh đen trắng. Nếu bạn muốn nó có màu đỏ và trắng, hãy thay đổi nó thành

const unsigned char IMAGE_RED PROGMEM = {

Ngay trước dòng này, hãy thêm

#bao gồm

#include "imagedata.h"

Bây giờ bạn đã sẵn sàng để hiển thị hình ảnh của mình. Trong vòng lặp () trong tệp chính của bạn, hãy thêm

epd. ClearFrame ();

epd. DisplayFrame (IMAGE_BLACK, NULL);

Hoặc, nếu đó là một hình ảnh màu đỏ mà bạn đã tạo, dòng thứ hai phải là

epd. DisplayFrame (NULL, IMAGE_RED);

Trên thực tế, bạn có thể tạo một hình ảnh đỏ và đen kết hợp bằng cách chuyển đổi các phần đỏ và đen riêng biệt với Image2Lcd và hiển thị cả hai với

epd. DisplayFrame (IMAGE_BLACK, IMAGE_RED);

Tuy nhiên, bất kỳ pixel nào được chỉ định cả màu đen trong hình ảnh đen trắng và màu đỏ trong hình ảnh màu đỏ và trắng, sẽ có màu đỏ.

Cuối cùng, bạn có thể phủ lên hình ảnh của mình bằng bất kỳ chức năng văn bản hoặc đồ họa nào mà chúng ta đã tìm hiểu trước đó. Tôi muốn thêm tay cầm Twitter của mình, vì vậy tôi đã thêm

Sơn sơn (hình ảnh, 20, 152); // chiều rộng phải là bội số của 8

paint. SetRotate (ROTATE_270); paint. Clear (KHÔNG ĐƯỢC SỬ DỤNG); paint. DrawStringAt (20, 2, "@pleriche", & Font16, COLORED); epd. SetPartialWindowRed (paint. GetImage (), 0, 0, paint. GetWidth (), paint. GetHeight ()); epd. SetPartialWindowRed (paint. GetImage (), 0, 0, paint. GetWidth (), paint. GetHeight ()); epd. DisplayFrame ();