我目前正在做一个基于硬件的项目,因此我需要
我使用的硬件是Waveshare电子纸帽控制器和Waveshare 7.5英寸电子纸帽显示器。我还使用了一个称为ESP32的arduino控制器,但Sparkfun具有2个内核。
不确定这是否相关,但是显示更新方法与在ESP32的两个内核上处理的LED闪烁方法一起运行。
在显示方法中,屏幕将自动更新,然后进入深度睡眠,并在12小时后唤醒。我已将持续时间从12小时缩短为1分钟。但是,我遇到了一个奇怪的问题,即电子纸帽控制器能够休眠和初始化一个周期,然后又无法执行此操作。 (在这种情况下,我只是将显示屏上的单词更新为随机数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 */
}
下面的代码是update Display方法,该方法应定期运行并在每次更新后进入深度睡眠状态
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);
任何帮助将不胜感激!因为这是我第一次涉足硬件,所以如果你们都简化了它会有所帮助。欢呼声