Получить 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'?*
Я предполагаю, что это связано с тем, что вызов для инициации отображения не работает.
Спасибо за любой совет!
@nick, 👍1
Обсуждение1 ответ
Примеры Waveshare, по большому счету, отстой. Обычно это набор недокументированных операций записи в регистр. Однажды мне пришлось написать библиотеку для EPD — OEM-версию, которая позже появилась на веб-сайте Waveshare как собственную — и OEM-версию. документация и код были достаточно хороши (просто...) для создания функциональной библиотеки.
Глядя на пример вашего конкретного экрана, я вижу, что это действительно обычная чушь SendCommand()
. Хотя он кажется немного более развитым, с классом Epd
. Но все равно бесполезно.
Код EPD СЛОЖЕН и требует от производителя большого количества информации. И создать библиотеку, которая обрабатывает текст, тоже немного сложнее.
Я не думаю, что попытка пересадить их дрянной код в существующую библиотеку сработает. Я полагаю, у вас есть два решения:
- Переписать библиотеку для этого электронного документа с нуля.
- Наполовину что-то сделать, добавив обработку текста в свой код путем преобразования текста в пиксели в буфере, и протолкнуть это.
В обоих случаях болезненно.
Спасибо @dda за ваш ответ. Я боялся именно этих обстоятельств. Однако я не могу написать новую библиотеку, потому что это было бы далеко за пределами моих знаний и навыков (пока). Третий вариант для меня — купить разные дисплеи для моего проекта и на этот раз позаботиться о доступных библиотеках и хороших примерах, чего я по наивности сделал не для них., @nick
https://www.waveshare.com/3.52inch-e-paper.htm Если вы хотите придерживаться Waveshare (и сдать на переработку базовую пластину), приобретите эту. Это только черно-белый вариант, но работает хорошо., @dda
Спасибо за предложение, рассмотрю модуль 3,52 дюйма., @nick
- Как получить исходные файлы для библиотек Arduino?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Существуют ли библиотеки сглаживания сигналов для Arduino?
- Wire.h не найден!
- Библиотека FastLED: Как настроить яркость одного пикселя в абсолютном масштабе?
- Как эта строка кода определяет, подключен ли последовательный интерфейс?
- Ошибка Specified folder/zip file does not contain a valid library
вы запускали пример HelloWorld?, @jsotola
Спасибо @jsotola за ответ. Я отредактировал свой вопрос в надежде прояснить ситуацию. Теперь показано, в какой момент *пример HelloWorld* застрял (вероятно, из-за моих модификаций)., @nick