В настоящее время я делаю аппаратный проект, в соответствии с которым мне необходимо
- Проснись дисплей электронной бумаги
- Обновить
- Установите контроллер E-paper на глубокий сон
Аппаратное обеспечение, которое я использовал, это контроллер Waveshare e-Paper Hat и дисплей Waveshare e-Paper Hat с диагональю 7,5 дюйма. Я также использую контроллер Arduino под названием ESP32, но Sparkfun, который имеет 2 ядра.
Не уверен, что это актуально, но метод обновления дисплея запускается вместе с методом мигания светодиода, который обрабатывается на двух ядрах в ESP32.
При способе отображения экран обновляется, а затем переходит в режим глубокого сна и активируется через 12 часов. Я сократил продолжительность с 12 часов до 1 минуты. Однако я сталкиваюсь с этой странной проблемой, когда контроллер e-Paper Hat может спать и инициализироваться в течение одного цикла, а затем не может сделать это снова. (В этом случае я просто обновил слова на дисплее, чтобы они стали случайными числами 1 и 3)
Приведенный ниже фрагмент кода представляет собой метод настройки, который загружается на контроллер ESP32.
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(LED, OUTPUT); //set the LED PIN as at output
pinMode(BUTTON, INPUT); //set the BUTTON as an input
// pinMode(RST, INPUT); //set the RST as an input
// epd.setFastRefresh(true);
gfx.init();
gfx.setRotation(1);
ledcSetup(channel, freq, resolution);
ledcAttachPin(PIEZO, channel);
Serial.println("Finished Setup");
delay(500);
xTaskCreatePinnedToCore(
displayMethod, /* pvTaskCode */
"Display Update", /* pcName */
1000, /* usStackDepth */
NULL, /* pvParameters */
1, /* uxPriority */
&TaskA, /* pxCreatedTask */
0); /* xCoreID */
xTaskCreatePinnedToCore(
alarmMethod, /* pvTaskCode */
"Alarm", /* pcName */
1000, /* usStackDepth */
NULL, /* pvParameters */
1, /* uxPriority */
&TaskB, /* pxCreatedTask */
1); /* xCoreID */
}
Приведенный ниже код представляет собой метод отображения обновлений, который должен периодически запускаться и переходить в глубокий сон после каждого обновления
void displayMethod(void * parameter ) {
Serial.println("Display Thread");
for (;;) {
unsigned long start = millis();
int randNum = rand()%(3-0 + 1) + 0;
String randString(randNum);
gfx.fillBuffer(0);
gfx.setColor(1);
gfx.setFont(ArialMT_Plain_24);
gfx.drawString(10, 10, "HsKA Smart Door Display" + randString);
gfx.drawHorizontalLine(10 , 45 , gfx.getWidth());
gfx.setFont(ArialMT_Plain_16);
gfx.drawString(10, 50, "Everything works!");
gfx.commit();
Serial.println("Commited buffer");
workLoad();
Serial << "Task 1 complete running on Core " << (xPortGetCoreID()) << " Time = " << (millis() - start)<< " mS" << endl;
unsigned long waiting = millis();
while(millis() - waiting < 1000)
{
epd.Sleep(); // Makes the display go to sleep
Serial << "Waited for a total of " << millis() - waiting << " milliseconds " << endl;
}
epd.init();
}
}
epd.Sleep () - это то, что я предположил, чтобы перевести контроллер в режим сна, а epd.init () - это то, что я предположил, инициализирует контроллер.
Это моя инициализация, если она нужна
//Display
#define BUSY 27
#define RST 4
#define DC 17
#define CS 16
#define CLK 18
#define DIN 23
#define BITS_PER_PIXEL 2 // 2^2 = 4 colors
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 384
uint16_t palette[] = {0,3,4};
uint8_t rotation = 1;
//Declaration for PIN mapping
const int LED = 5;
const int BUTTON = 0;
//Initialization
EPD_WaveShare75 epd(CS, RST, DC, BUSY);
MiniGrafx gfx= MiniGrafx(&epd, BITS_PER_PIXEL, palette);
Любая помощь будет принята с благодарностью! Так как это мой первый опыт работы с оборудованием, было бы полезно, если бы вы все упростили его. Ура