inkplate-6-arduino-library/examples/Inkplate_demo/Inkplate_demo.ino

292 lines
11 KiB
C++

//--------------------------------------!!!NOTE!!!---------------------------------------
//For thi exaple, on Arduino IDE You should a few things:
//Tools->Board->ESP32 WROVER Module
//Tools->Partition Scheme->Huge APP (3MB No OTA/1MB SPIFFS)
//Otherwise this example won't compile or won't work properly!
//
// WARNING!!
// Please do not refresh the screen too often at this moment. Library is still in development.
// Do not refresh more often than every 10 seconds.
// If you need to refesh faster, please use partial update.
//
//--------------------------------------------------------------------------------------
#include "Inkplate.h"
#include "image1.h"
#include "image2.h"
#include "picture1.h"
#include "picture2.h" https://www.canva.com/photos/MADGwF-1B54-grayscale-photography-of-concrete-buildings/
#include "picture3.h"
#include "picture4.h"
#include "picture5.h"
#include "picture6.h"
#include "picture7.h"
#include "driver/rtc_io.h"
#define uS_TO_S_FACTOR 1000000 //Conversion factor for micro seconds to seconds
#define TIME_TO_SLEEP 10 //Time ESP32 will go to sleep (in seconds) */
RTC_DATA_ATTR int slide = 0;
Inkplate display(INKPLATE_1BIT); //Set library to be in 1 Bit display mode by default
/*To convert image to bitmap (Array like this one) use LCD image converter program set to 4 bit grayscale. You can use 4 bit bitmap and display library will scale it to 3 bit bitmap and display it.
Converting image to bitmap:
Open lcd-image-converter.exe, when it opens click on New Image, than click OK. Go to Image -> Import... and browse image.
Click on Options -> Conversion... than select next: Preset: Grayscale 4, on Prepare tab select Type: Grayscale, Main Scan Direction: Top to Bottom, Line Scan Direction: Forward
On Image tab select Block Size: 8 Bits, Byte Order: Little-Endian
At the end click on Show Preview and copy all HEX data.
Paste it inside array (beetwen curly brackets) with type: static const uint8_t picture_name[] PROGMEM = {};, where "picture_name" is name of your array that represents picture.
*/
static const uint8_t smile[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x3f,
0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x3f,
0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x3f,
0x00, 0x07, 0xf8, 0x07, 0xf8, 0x00, 0x3f,
0x00, 0x0f, 0xc0, 0x00, 0xfc, 0x00, 0x3f,
0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x3f,
0x00, 0x7c, 0x00, 0x00, 0x0f, 0x80, 0x3f,
0x00, 0x78, 0x00, 0x00, 0x07, 0x80, 0x3f,
0x00, 0xf0, 0x00, 0x00, 0x03, 0xc0, 0x3f,
0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x3f,
0x03, 0xc0, 0x70, 0x01, 0xc0, 0xf0, 0x3f,
0x03, 0x80, 0xf8, 0x03, 0xe0, 0x70, 0x3f,
0x07, 0x80, 0xf8, 0x03, 0xe0, 0x78, 0x3f,
0x07, 0x00, 0xf8, 0x03, 0xe0, 0x38, 0x3f,
0x0f, 0x00, 0xf8, 0x03, 0xe0, 0x3c, 0x3f,
0x0e, 0x00, 0x70, 0x01, 0xc0, 0x1c, 0x3f,
0x0e, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x3f,
0x0e, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x3f,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x3f,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x3f,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x3f,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x3f,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x3f,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x3f,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x3f,
0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x3f,
0x0e, 0x18, 0x00, 0x00, 0x06, 0x1e, 0x3f,
0x0e, 0x3c, 0x00, 0x00, 0x0f, 0x1c, 0x3f,
0x0e, 0x1f, 0x00, 0x00, 0x3f, 0x1c, 0x3f,
0x0f, 0x0f, 0xc0, 0x00, 0xfc, 0x3c, 0x3f,
0x07, 0x03, 0xf0, 0x03, 0xf0, 0x38, 0x3f,
0x07, 0x81, 0xfe, 0x3f, 0xe0, 0x78, 0x3f,
0x03, 0x80, 0x7f, 0xff, 0x80, 0x70, 0x3f,
0x03, 0xc0, 0x1f, 0xfc, 0x00, 0xf0, 0x3f,
0x01, 0xe0, 0x01, 0xc0, 0x01, 0xe0, 0x3f,
0x00, 0xf0, 0x00, 0x00, 0x03, 0xc0, 0x3f,
0x00, 0x78, 0x00, 0x00, 0x07, 0xc0, 0x3f,
0x00, 0x7c, 0x00, 0x00, 0x0f, 0x80, 0x3f,
0x00, 0x1f, 0x00, 0x00, 0x3f, 0x00, 0x3f,
0x00, 0x0f, 0xc0, 0x00, 0xfc, 0x00, 0x3f,
0x00, 0x07, 0xf8, 0x07, 0xf8, 0x00, 0x3f,
0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x3f,
0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x3f,
0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
};
void setup() {
display.begin();
switch (slide) {
//Display 1 bit per pixel image using Adafruit GFX Library
case 0:
//First we have to choose 1 Bit mode
display.selectDisplayMode(INKPLATE_1BIT);
//Now we write something to buffer
display.setTextColor(BLACK, WHITE);
display.setTextSize(2);
display.setCursor(0, 0);
display.print(F("Display some Adafruit GFX Graphics! :)\nEach of this graphics can be easly made with just one line of \nArduino code!"));
display.setCursor(0, 60);
display.print("Pixels");
display.setCursor(160, 60);
display.print("Text");
display.setCursor(320, 60);
display.print("Lines");
display.setCursor(480, 60);
display.print("Rectangles");
display.setCursor(640, 60);
display.print("Circles");
display.setCursor(0, 300);
display.print("Triangles");
display.setCursor(160, 300);
display.print("Fill Rects");
display.setCursor(320, 300);
display.print("Fill circle");
display.setCursor(480, 300);
display.print("Fill triang");
display.setCursor(640, 300);
display.print("Bitmaps");
for (int i = 0; i < 5; i++) {
display.setTextSize(i + i);
display.setCursor(120, 80 + (i * 8 * i));
display.print("Hello");
}
for (int i = 0; i < 20; i++) {
esp_random();
display.drawPixel(random(0, 100), random(80, 200), BLACK);
display.drawLine(random(300, 450), random(80, 200), random(300, 450), random(80, 200), BLACK);
display.drawRect(random(460, 550), random(80, 200), random(10, 50), random(10, 100), BLACK);
display.drawCircle(random(650, 750), random(80, 200), random(3, 25), BLACK);
}
for (int i = 0; i < 7; i++) {
esp_random();
display.drawTriangle(random(0, 100), random(330, 470), random(0, 100), random(330, 470), random(0, 100), random(330, 470), BLACK);
display.fillRect(random(150, 250), random(330, 450), random(10, 50), random(10, 100), BLACK);
display.fillCircle(random(330, 480), random(330, 550), random(3, 25), BLACK);
display.fillTriangle(random(500, 620), random(330, 600), random(500, 620), random(330, 600), random(500, 620), random(330, 600), BLACK);
display.drawBitmap((int)random(620, 750), (int)random(330, 500), smile, 50, 50, BLACK);
}
break;
case 1:
//Now we switch to 3 Bit mode
display.selectDisplayMode(INKPLATE_3BIT);
//Now we write something to buffer
display.setTextColor(0, 15);
display.setTextSize(2);
display.setCursor(0, 10);
display.print(F("Display some Adafruit GFX Graphics! :) Each of this graphics can\nbe easly made with just one line of \nArduino code! BUT now in GRAYSCALE!"));
display.setCursor(0, 60);
display.print("Pixels");
display.setCursor(160, 60);
display.print("Text");
display.setCursor(320, 60);
display.print("Lines");
display.setCursor(480, 60);
display.print("Rectangles");
display.setCursor(640, 60);
display.print("Circles");
display.setCursor(0, 300);
display.print("Triangles");
display.setCursor(160, 300);
display.print("Fill Rects");
display.setCursor(320, 300);
display.print("Fill circle");
display.setCursor(480, 300);
display.print("Fill triang");
display.setCursor(640, 300);
display.print("Bitmaps");
for (int i = 0; i < 5; i++) {
display.setTextSize(i + i);
display.setCursor(120, 80 + (i * 8 * i));
display.setTextColor(6 - i, i + 1);
display.print("Hello");
}
for (int i = 0; i < 20; i++) {
esp_random();
display.drawPixel(random(0, 100), random(80, 200), random(0, 10));
display.drawLine(random(300, 450), random(80, 200), random(300, 450), random(80, 200), random(1, 7));
display.drawRect(random(460, 550), random(80, 200), random(10, 50), random(10, 100), random(1, 7));
display.drawCircle(random(650, 750), random(80, 200), random(3, 25), random(1, 7));
}
for (int i = 0; i < 7; i++) {
esp_random();
display.drawTriangle(random(0, 100), random(330, 470), random(0, 100), random(330, 470), random(0, 100), random(330, 470), random(1, 7));
display.fillRect(random(150, 250), random(330, 450), random(10, 50), random(10, 100), random(1, 7));
display.fillCircle(random(330, 480), random(330, 550), random(3, 25), random(1, 7));
display.fillTriangle(random(500, 620), random(330, 600), random(500, 620), random(330, 600), random(500, 620), random(330, 600), random(1, 7));
display.drawBitmap((int)random(620, 750), (int)random(330, 500), smile, 50, 50, random(1, 7));
}
display.setCursor(0, 580);
display.setTextSize(2);
display.setTextColor(0, 7);
display.print("You can even display grayscale pictures!!!");
break;
case 2:
display.selectDisplayMode(INKPLATE_3BIT);
display.setTextSize(2);
display.setCursor(5, 5);
display.setTextColor(0, 15);
display.print("Display simple 3 bit color images with just one line of code\nanywhere on epaper display");
display.drawBitmap3Bit(random(20, 150), random(20, 150), img1, 207, 204);
display.drawBitmap3Bit(random(300, 500), random(250, 350), img2, 148, 158);
display.setCursor(0, 580);
display.print("Even a full size image like this one...");
break;
case 3:
display.selectDisplayMode(INKPLATE_3BIT);
display.drawBitmap3Bit(0, 0, pic1, 800, 600);
break;
case 4:
display.selectDisplayMode(INKPLATE_3BIT);
display.drawBitmap3Bit(0, 0, pic2, 800, 600);
break;
case 5:
display.selectDisplayMode(INKPLATE_3BIT);
display.drawBitmap3Bit(0, 0, pic3, 800, 600);
break;
case 6:
display.selectDisplayMode(INKPLATE_3BIT);
display.drawBitmap3Bit(0, 0, pic4, 800, 600);
break;
case 7:
display.selectDisplayMode(INKPLATE_3BIT);
display.drawBitmap3Bit(0, 0, pic5, 800, 600);
break;
case 8:
display.selectDisplayMode(INKPLATE_3BIT);
display.drawBitmap3Bit(0, 0, pic6, 800, 600);
break;
case 9:
display.selectDisplayMode(INKPLATE_3BIT);
display.drawBitmap3Bit(0, 0, pic7, 800, 600);
break;
}
//Display content from buffer to panel
display.display();
//Activate wake-up timer
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
//Increment variable that determines what is going to be on screen
slide++;
if (slide > 9) slide = 0;
//Isolate/disable GPIO12 on ESP32 (to reduce power consumption in sleep)
rtc_gpio_isolate(GPIO_NUM_12);
//Wait for one seconds
delay(1000);
//Set new text size and position
display.setTextSize(3);
display.setCursor(0, 550);
//Write some text
display.print("Going to sleeep....");
//Partialy update screen
//NOTE!!! Works only for 1 bit mode (monochrome)
display.partialUpdate();
//Put ESP32 into deep sleep
esp_deep_sleep_start();
}
void loop() {
//Nothing
}