Получить 3-дюймовую электронную бумагу, работающую на Nano

Пожалуйста, помогите!

Я приобрел 3-дюймовый дисплей для электронной бумаги у Waveshare, который, похоже, хорошо подходит для моего проекта. Примерный небольшой код для отображения изображения легко настроить и продемонстрировать функциональность:

#include <SPI.h>
#include "epd3in0g.h"
#include "imagedata.h"

Epd epd;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.print("e-Paper init ");
  if (epd.Init() != 0) {
      Serial.print("e-Paper init failed");
      return;
  }

  Serial.print("White \r\n");
  epd.Clear(white);
  delay(2000);

  epd.Init();
  Serial.print("Image \r\n");
  epd.Display(IMAGE_DATA);
  delay(2000);

  epd.Init();
  Serial.print("Small Image \r\n");
  epd.Display_part(IMAGE_DATA, 0 ,0, 168, 400);
  delay(2000);

  epd.Init();
  Serial.print("Clear...\r\n");
  epd.Clear(white);
  delay(2000);

  Serial.print("Goto Sleep...\r\n");
  epd.Sleep();
}

void loop() {

}

Я буду не просто отображать изображения, я стремлюсь к строкам с текстом и цифрами, которые частично обновляются. Дикие догадки, если

epd.Display_Text('''Hello World''');

Может сработать, бессмысленно. Таким образом, существование и использование возможных команд для epd. мне кажется недостаточно документированным (или я не смог что-то найти даже после тщательного поиска).

Я рассмотрел другие примеры использования библиотек GxEPD, и это показалось мне хорошей отправной точкой.

В Библиотеке GxEPD2 кажется, что класс для 3-дюймового EPD отсутствует, поскольку он нигде не объявлен (я предполагаю, что должен быть быть чем-то вроде GxEPD_300 для установки размеров дисплея и т. д.).

Итак, я считаю, что мне нужно что-то сделать, чтобы оно соответствовало спецификациям дисплея с разрешением 400x168 пикселей, но я не знаю, с чего начать.

Я пробовал использовать GxEPD_MinimumExample.ino, например

  • замена библиотеки конкретного дисплея на epd3in0g.h из примера
  • скорректированы правые контакты в соответствии с Waveshare Wiki
// GxEPD_MinimumExample Жан-Марка Зингга

#include <GxEPD.h>

// выбираем класс отображения, только один, копируем из GxEPD_Example
//#include <GxGDEH0154D67/GxGDEH0154D67.h> // 1,54quot; ч/б -> из орг. пример.
#include "epd3in0g.h" //мой 3-дюймовый дисплей

#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>

// конструктор для AVR Arduino, копируем из GxEPD_Example else
GxIO_Class io(SPI, /*CS=*/ 10, /*DC=*/ 9, /*RST=*/ 8); // произвольный выбор 8, 9 выбрано по умолчанию для GxEPD_Class
GxEPD_Class display(io, /*RST=*/ 8, /*BUSY=*/ 7); // выбор по умолчанию (9), 7

void setup()
{
  display.init();
  display.eraseDisplay();
  // закомментируйте следующую строку, чтобы код Adafruit_GFX отсутствовал или был минимальным
  display.drawPaged(drawHelloWorld); // версия для AVR с использованием постраничного рисования, работает и на других процессорах
}

void drawHelloWorld()
{
  display.setTextColor(GxEPD_BLACK);
  display.print("Hello World!");
}

void loop() {};

Во время проверки перед загрузкой я получаю ошибки, указывающие на библиотеки:

error: 'GxEPD_Class' does not name a type; did you mean 'GxIO_Class'?*

Я предполагаю, что это связано с тем, что вызов для инициации отображения не работает.

Спасибо за любой совет!

, 👍1

Обсуждение

вы запускали пример HelloWorld?, @jsotola

Спасибо @jsotola за ответ. Я отредактировал свой вопрос в надежде прояснить ситуацию. Теперь показано, в какой момент *пример HelloWorld* застрял (вероятно, из-за моих модификаций)., @nick


1 ответ


0

Примеры Waveshare, по большому счету, отстой. Обычно это набор недокументированных операций записи в регистр. Однажды мне пришлось написать библиотеку для EPD — OEM-версию, которая позже появилась на веб-сайте Waveshare как собственную — и OEM-версию. документация и код были достаточно хороши (просто...) для создания функциональной библиотеки.

Глядя на пример вашего конкретного экрана, я вижу, что это действительно обычная чушь SendCommand(). Хотя он кажется немного более развитым, с классом Epd. Но все равно бесполезно.

Код EPD СЛОЖЕН и требует от производителя большого количества информации. И создать библиотеку, которая обрабатывает текст, тоже немного сложнее.

Я не думаю, что попытка пересадить их дрянной код в существующую библиотеку сработает. Я полагаю, у вас есть два решения:

  • Переписать библиотеку для этого электронного документа с нуля.
  • Наполовину что-то сделать, добавив обработку текста в свой код путем преобразования текста в пиксели в буфере, и протолкнуть это.

В обоих случаях болезненно.

,

Спасибо @dda за ваш ответ. Я боялся именно этих обстоятельств. Однако я не могу написать новую библиотеку, потому что это было бы далеко за пределами моих знаний и навыков (пока). Третий вариант для меня — купить разные дисплеи для моего проекта и на этот раз позаботиться о доступных библиотеках и хороших примерах, чего я по наивности сделал не для них., @nick

https://www.waveshare.com/3.52inch-e-paper.htm Если вы хотите придерживаться Waveshare (и сдать на переработку базовую пластину), приобретите эту. Это только черно-белый вариант, но работает хорошо., @dda

Спасибо за предложение, рассмотрю модуль 3,52 дюйма., @nick