Many fixes.
This commit is contained in:
parent
f012be658b
commit
d5826251bf
2014
Inkplate.cpp
2014
Inkplate.cpp
File diff suppressed because it is too large
Load Diff
16
Inkplate.h
16
Inkplate.h
|
@ -160,19 +160,19 @@ public:
|
||||||
uint8_t *_partial;
|
uint8_t *_partial;
|
||||||
uint8_t *D_memory4Bit;
|
uint8_t *D_memory4Bit;
|
||||||
uint8_t *_pBuffer;
|
uint8_t *_pBuffer;
|
||||||
const uint8_t LUT2[16] = {B10101010, B10101001, B10100110, B10100101, B10011010, B10011001, B10010110, B10010101, B01101010, B01101001, B01100110, B01100101, B01011010, B01011001, B01010110, B01010101};
|
const uint8_t LUT2[16] ={ B10101010, B10101001, B10100110, B10100101, B10011010, B10011001, B10010110, B10010101, B01101010, B01101001, B01100110, B01100101, B01011010, B01011001, B01010110, B01010101 };
|
||||||
const uint8_t LUTW[16] = {B11111111, B11111110, B11111011, B11111010, B11101111, B11101110, B11101011, B11101010, B10111111, B10111110, B10111011, B10111010, B10101111, B10101110, B10101011, B10101010};
|
const uint8_t LUTW[16] ={ B11111111, B11111110, B11111011, B11111010, B11101111, B11101110, B11101011, B11101010, B10111111, B10111110, B10111011, B10111010, B10101111, B10101110, B10101011, B10101010 };
|
||||||
const uint8_t LUTB[16] = {B11111111, B11111101, B11110111, B11110101, B11011111, B11011101, B11010111, B11010101, B01111111, B01111101, B01110111, B01110101, B01011111, B01011101, B01010111, B01010101};
|
const uint8_t LUTB[16] ={ B11111111, B11111101, B11110111, B11110101, B11011111, B11011101, B11010111, B11010101, B01111111, B01111101, B01110111, B01110101, B01011111, B01011101, B01010111, B01010101 };
|
||||||
const uint8_t pixelMaskLUT[8] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000};
|
const uint8_t pixelMaskLUT[8] ={ B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000 };
|
||||||
const uint8_t pixelMaskGLUT[2] = {B00001111, B11110000};
|
const uint8_t pixelMaskGLUT[2] ={ B00001111, B11110000 };
|
||||||
const uint8_t discharge[16] = {B11111111, B11111100, B11110011, B11110000, B11001111, B11001100, B11000011, B11000000, B00111111, B00111100, B00110011, B00110000, B00001111, B00001100, B00000011, B00000000};
|
const uint8_t discharge[16] ={ B11111111, B11111100, B11110011, B11110000, B11001111, B11001100, B11000011, B11000000, B00111111, B00111100, B00110011, B00110000, B00001111, B00001100, B00000011, B00000000 };
|
||||||
//BLACK->WHITE
|
//BLACK->WHITE
|
||||||
//THIS IS OKAYISH WAVEFORM FOR GRAYSCALE. IT CAN BE MUCH BETTER.
|
//THIS IS OKAYISH WAVEFORM FOR GRAYSCALE. IT CAN BE MUCH BETTER.
|
||||||
const uint8_t waveform3Bit[8][7] = {{0, 0, 0, 0, 1, 1, 1}, {0, 0, 1, 1, 1, 2, 1}, {0, 1, 1, 2, 1, 2, 1}, {0, 0, 1, 1, 2, 1, 2}, {1, 1, 1, 2, 2, 1, 2}, {0, 0, 1, 1, 1, 2, 2}, {0, 1, 1, 2, 1, 2, 2}, {0, 0, 0, 0, 0, 0, 2}};
|
const uint8_t waveform3Bit[8][7] ={ { 0, 0, 0, 0, 1, 1, 1 }, { 0, 0, 1, 1, 1, 2, 1 }, { 0, 1, 1, 2, 1, 2, 1 }, { 0, 0, 1, 1, 2, 1, 2 }, { 1, 1, 1, 2, 2, 1, 2 }, { 0, 0, 1, 1, 1, 2, 2 }, { 0, 1, 1, 2, 1, 2, 2 }, { 0, 0, 0, 0, 0, 0, 2 } };
|
||||||
//const uint8_t waveform3Bit[8][12] = {{3,3,3,1,1,1,1,1,1,1,2,0}, {3,3,3,3,1,1,1,1,1,1,2,0}, {3,3,3,3,3,1,1,1,1,1,2,0}, {3,3,3,3,3,3,1,1,1,1,2,0}, {3,3,3,3,3,3,3,1,1,1,2,0}, {3,3,3,3,3,3,3,2,1,1,2,0}, {3,3,3,3,3,3,3,3,3,1,2,0}, {3,3,3,3,3,3,3,3,3,3,2,0}};
|
//const uint8_t waveform3Bit[8][12] = {{3,3,3,1,1,1,1,1,1,1,2,0}, {3,3,3,3,1,1,1,1,1,1,2,0}, {3,3,3,3,3,1,1,1,1,1,2,0}, {3,3,3,3,3,3,1,1,1,1,2,0}, {3,3,3,3,3,3,3,1,1,1,2,0}, {3,3,3,3,3,3,3,2,1,1,2,0}, {3,3,3,3,3,3,3,3,3,1,2,0}, {3,3,3,3,3,3,3,3,3,3,2,0}};
|
||||||
//const uint8_t waveform3Bit[16][12] = {{0,0,0,0,0,0,1,2,1,1,0,3},{0,0,1,1,1,2,2,2,1,1,0,3},{0,0,0,1,1,2,2,2,1,1,0,3}, {0,0,0,1,2,1,2,1,2,1,3}, {0,0,2,1,2,1,2,1,2,1,3}, {0,0,1,2,2,1,1,1,1,2,0,3}, {0,0,0,2,1,1,1,1,0,2,0,3}, {0,0,2,1,2,2,1,1,1,2,0,3}, {0,0,0,2,2,2,1,1,1,2,0,3}, {0,0,0,0,0,0,2,1,1,2,0,3}, {0,0,0,0,0,2,2,1,1,2,0,3}, {0,0,0,0,0,1,1,1,2,2,0,3}, {0,0,0,0,1,2,1,2,1,2,0,3}, {0,0,0,0,1,1,2,2,1,2,0,3},{0,0,0,0,1,1,1,2,2,2,0,3}, {0,0,0,0,0,0,0,0,0,2,0,3}};
|
//const uint8_t waveform3Bit[16][12] = {{0,0,0,0,0,0,1,2,1,1,0,3},{0,0,1,1,1,2,2,2,1,1,0,3},{0,0,0,1,1,2,2,2,1,1,0,3}, {0,0,0,1,2,1,2,1,2,1,3}, {0,0,2,1,2,1,2,1,2,1,3}, {0,0,1,2,2,1,1,1,1,2,0,3}, {0,0,0,2,1,1,1,1,0,2,0,3}, {0,0,2,1,2,2,1,1,1,2,0,3}, {0,0,0,2,2,2,1,1,1,2,0,3}, {0,0,0,0,0,0,2,1,1,2,0,3}, {0,0,0,0,0,2,2,1,1,2,0,3}, {0,0,0,0,0,1,1,1,2,2,0,3}, {0,0,0,0,1,2,1,2,1,2,0,3}, {0,0,0,0,1,1,2,2,1,2,0,3},{0,0,0,0,1,1,1,2,2,2,0,3}, {0,0,0,0,0,0,0,0,0,2,0,3}};
|
||||||
//PVI waveform for cleaning screen, not sure if it is correct, but it cleans screen properly.
|
//PVI waveform for cleaning screen, not sure if it is correct, but it cleans screen properly.
|
||||||
const uint32_t waveform[50] = {0x00000008, 0x00000008, 0x00200408, 0x80281888, 0x60a81898, 0x60a8a8a8, 0x60a8a8a8, 0x6068a868, 0x6868a868, 0x6868a868, 0x68686868, 0x6a686868, 0x5a686868, 0x5a686868, 0x5a586a68, 0x5a5a6a68, 0x5a5a6a68, 0x55566a68, 0x55565a64, 0x55555654, 0x55555556, 0x55555556, 0x55555556, 0x55555516, 0x55555596, 0x15555595, 0x95955595, 0x95959595, 0x95949495, 0x94949495, 0x94949495, 0xa4949494, 0x9494a4a4, 0x84a49494, 0x84948484, 0x84848484, 0x84848484, 0x84848484, 0xa5a48484, 0xa9a4a4a8, 0xa9a8a8a8, 0xa5a9a9a4, 0xa5a5a5a4, 0xa1a5a5a1, 0xa9a9a9a9, 0xa9a9a9a9, 0xa9a9a9a9, 0xa9a9a9a9, 0x15151515, 0x11111111};
|
const uint32_t waveform[50] ={ 0x00000008, 0x00000008, 0x00200408, 0x80281888, 0x60a81898, 0x60a8a8a8, 0x60a8a8a8, 0x6068a868, 0x6868a868, 0x6868a868, 0x68686868, 0x6a686868, 0x5a686868, 0x5a686868, 0x5a586a68, 0x5a5a6a68, 0x5a5a6a68, 0x55566a68, 0x55565a64, 0x55555654, 0x55555556, 0x55555556, 0x55555556, 0x55555516, 0x55555596, 0x15555595, 0x95955595, 0x95959595, 0x95949495, 0x94949495, 0x94949495, 0xa4949494, 0x9494a4a4, 0x84a49494, 0x84948484, 0x84848484, 0x84848484, 0x84848484, 0xa5a48484, 0xa9a4a4a8, 0xa9a8a8a8, 0xa5a9a9a4, 0xa5a5a5a4, 0xa1a5a5a1, 0xa9a9a9a9, 0xa9a9a9a9, 0xa9a9a9a9, 0xa9a9a9a9, 0x15151515, 0x11111111 };
|
||||||
|
|
||||||
struct bitmapHeader
|
struct bitmapHeader
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
2_Basic_grayscale example for e-radionica.com Inkplate 6
|
2_Basic_grayscale example for e-radionica.com Inkplate 6
|
||||||
For this example you will need only USB cable and Inkplate 6
|
For this example you will need only USB cable and Inkplate 6
|
||||||
Select "Inkplate 6(ESP32)" from Tools -> Board menu.
|
Select "Inkplate 6(ESP32)" from Tools -> Board menu.
|
||||||
Don't have "Inkplate 6(ESP32)" option? Follow our tutorial and add it:
|
Don't have "Inkplate 6(ESP32)" option? Follow our tutorial and add it:
|
||||||
https://e-radionica.com/en/blog/add-inkplate-6-to-arduino-ide/
|
https://e-radionica.com/en/blog/add-inkplate-6-to-arduino-ide/
|
||||||
|
|
||||||
This example will show you how you can draw some simple graphics using
|
This example will show you how you can draw some simple graphics using
|
||||||
Adafruit GFX functions. Yes, Inkplate library is 100% compatible with GFX lib!
|
Adafruit GFX functions. Yes, Inkplate library is 100% compatible with GFX lib!
|
||||||
Learn more about Adafruit GFX: https://learn.adafruit.com/adafruit-gfx-graphics-library
|
Learn more about Adafruit GFX: https://learn.adafruit.com/adafruit-gfx-graphics-library
|
||||||
Inkplate will be used in grayscale mode which is 3 bit, so you can have up to 8 different colors (black, 6 gray colors and white)
|
Inkplate will be used in grayscale mode which is 3 bit, so you can have up to 8 different colors (black, 6 gray colors and white)
|
||||||
Color is represented by number, where number 0 means black and number 7 means white, while everything in between are shades of gray.
|
Color is represented by number, where number 0 means black and number 7 means white, while everything in between are shades of gray.
|
||||||
|
|
||||||
Want to learn more about Inkplate? Visit www.inkplate.io
|
Want to learn more about Inkplate? Visit www.inkplate.io
|
||||||
Looking to get support? Write on our forums: http://forum.e-radionica.com/en/
|
Looking to get support? Write on our forums: http://forum.e-radionica.com/en/
|
||||||
|
@ -26,278 +26,278 @@ Inkplate display(INKPLATE_3BIT); //Create object on Inkplate library and set lib
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
display.begin(); //Init library (you should call this function ONLY ONCE)
|
display.begin(); //Init library (you should call this function ONLY ONCE)
|
||||||
display.clearDisplay(); //Clear any data that may have been in (software) frame buffer.
|
display.clearDisplay(); //Clear any data that may have been in (software) frame buffer.
|
||||||
//(NOTE! This does not clean image on screen, it only clears it in the frame buffer inside ESP32).
|
//(NOTE! This does not clean image on screen, it only clears it in the frame buffer inside ESP32).
|
||||||
display.clean(); //Clear everything that has previously been on a screen
|
display.clean(); //Clear everything that has previously been on a screen
|
||||||
display.setTextColor(0, 7);
|
display.setTextColor(0, 7);
|
||||||
display.setCursor(150, 320);
|
display.setCursor(150, 320);
|
||||||
display.setTextSize(4);
|
display.setTextSize(4);
|
||||||
display.print("Welcome to Inkplate 6!");
|
display.print("Welcome to Inkplate 6!");
|
||||||
display.display(); //Write hello message
|
display.display(); //Write hello message
|
||||||
delay(5000); //Wait a little bit
|
delay(5000); //Wait a little bit
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
//Example will demostrate funcionality one by one. You always first set everything in the frame buffer and afterwards you show
|
//Example will demostrate funcionality one by one. You always first set everything in the frame buffer and afterwards you show
|
||||||
//it on the screen using display.display().
|
//it on the screen using display.display().
|
||||||
|
|
||||||
//Let'sstart by drawing pixel at x = 100 and y = 50 location
|
//Let'sstart by drawing pixel at x = 100 and y = 50 location
|
||||||
display.clearDisplay(); //Clear everytning that is inside frame buffer in ESP32
|
display.clearDisplay(); //Clear everytning that is inside frame buffer in ESP32
|
||||||
display.drawPixel(100, 50, 0); //Draw one black pixel at X = 100, Y = 50 position in 0 (BLACK) color
|
display.drawPixel(100, 50, 0); //Draw one black pixel at X = 100, Y = 50 position in 0 (BLACK) color
|
||||||
displayCurrentAction("Drawing a pixel"); //Function which writes small text at bottom left indicating what's currently done
|
displayCurrentAction("Drawing a pixel"); //Function which writes small text at bottom left indicating what's currently done
|
||||||
//NOTE: you do not need displayCurrentAction function to use Inkplate!
|
//NOTE: you do not need displayCurrentAction function to use Inkplate!
|
||||||
display.display(); //Send image to display. You need to call this one each time you want to transfer frame buffer to the screen.
|
display.display(); //Send image to display. You need to call this one each time you want to transfer frame buffer to the screen.
|
||||||
delay(DELAY_MS); //Wait a little bit
|
delay(DELAY_MS); //Wait a little bit
|
||||||
|
|
||||||
//Now, let's draw some random pixels!
|
//Now, let's draw some random pixels!
|
||||||
display.clearDisplay(); //Clear everything that is inside frame buffer in ESP32
|
display.clearDisplay(); //Clear everything that is inside frame buffer in ESP32
|
||||||
for (int i = 0; i < 1000; i++)
|
for (int i = 0; i < 1000; i++)
|
||||||
{ //Write 1000 random colored pixels at random locations
|
{ //Write 1000 random colored pixels at random locations
|
||||||
display.drawPixel(random(0, 799), random(0, 599), random(0, 7)); //We are setting color of the pixels using numbers from 0 to 7,
|
display.drawPixel(random(0, 799), random(0, 599), random(0, 7)); //We are setting color of the pixels using numbers from 0 to 7,
|
||||||
} //where 0 mens black, 7 white and gray is in between
|
} //where 0 mens black, 7 white and gray is in between
|
||||||
displayCurrentAction("Drawing 600 random pixels in random colors");
|
displayCurrentAction("Drawing 600 random pixels in random colors");
|
||||||
display.display(); //Write everything from frame buffer to screen
|
display.display(); //Write everything from frame buffer to screen
|
||||||
delay(DELAY_MS); //Wait
|
delay(DELAY_MS); //Wait
|
||||||
|
|
||||||
//Draw two diagonal lines accros screen
|
//Draw two diagonal lines accros screen
|
||||||
display.clearDisplay();
|
|
||||||
display.drawLine(0, 0, 799, 599, 0); //All of those drawing fuctions originate from Adafruit GFX library, so maybe you are already familiar
|
|
||||||
display.drawLine(799, 0, 0, 599, 0); //with those. Arguments are: start X, start Y, ending X, ending Y, color.
|
|
||||||
displayCurrentAction("Drawing two diagonal lines");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//And again, let's draw some random lines on screen!
|
|
||||||
display.clearDisplay();
|
|
||||||
for (int i = 0; i < 100; i++)
|
|
||||||
{
|
|
||||||
display.drawLine(random(0, 799), random(0, 599), random(0, 799), random(0, 599), random(0, 7));
|
|
||||||
}
|
|
||||||
displayCurrentAction("Drawing 50 random lines in random colors");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Let's draw some random thick lines on screen!
|
|
||||||
display.clearDisplay();
|
|
||||||
for (int i = 0; i < 100; i++)
|
|
||||||
{
|
|
||||||
display.drawThickLine(random(0, 799), random(0, 599), random(0, 799), random(0, 599), random(0, 7), (float)random(1, 20));
|
|
||||||
}
|
|
||||||
displayCurrentAction("Drawing 50 random lines in random colors and thickness");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Let's draw some random gradient thick lines on screen!
|
|
||||||
display.clearDisplay();
|
|
||||||
for (int i = 0; i < 100; i++)
|
|
||||||
{
|
|
||||||
int startColor = random(0, 7);
|
|
||||||
int endColor = random(startColor, 7);
|
|
||||||
display.drawGradientLine(random(0, 799), random(0, 599), random(0, 799), random(0, 599), startColor, endColor, (float)random(1, 20));
|
|
||||||
}
|
|
||||||
displayCurrentAction("Drawing 50 random gradient lines in random colors and thickness");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Now draw one horizontal...
|
|
||||||
display.clearDisplay();
|
|
||||||
display.drawFastHLine(100, 100, 600, 0); //Arguments are: starting X, starting Y, length, color
|
|
||||||
displayCurrentAction("Drawing one horizontal line");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//... and one vertical line
|
|
||||||
display.clearDisplay();
|
|
||||||
display.drawFastVLine(100, 100, 400, 0); //Arguments are: starting X, starting Y, length, color
|
|
||||||
displayCurrentAction("Drawing one vertical line");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Now, let' make a grid using only horizontal and vertical lines in random colors!
|
|
||||||
display.clearDisplay();
|
|
||||||
for (int i = 0; i < 800; i += 8)
|
|
||||||
{
|
|
||||||
display.drawFastVLine(i, 0, 600, (i / 8) & 0x0F);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 600; i += 4)
|
|
||||||
{
|
|
||||||
display.drawFastHLine(0, i, 800, (i / 8) & 0x0F);
|
|
||||||
}
|
|
||||||
displayCurrentAction("Drawing a grid using horizontal and vertical lines in different colors");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw rectangle at X = 200, Y = 200 and size of 400x300 pixels
|
|
||||||
display.clearDisplay();
|
|
||||||
display.drawRect(200, 200, 400, 300, 0); //Arguments are: start X, start Y, size X, size Y, color
|
|
||||||
displayCurrentAction("Drawing rectangle");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw rectangles on random location, size 100x150 pixels in random color
|
|
||||||
display.clearDisplay();
|
|
||||||
for (int i = 0; i < 50; i++)
|
|
||||||
{
|
|
||||||
display.drawRect(random(0, 799), random(0, 599), 100, 150, random(0, 7));
|
|
||||||
}
|
|
||||||
displayCurrentAction("Drawing many rectangles in random colors");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw filled black rectangle at X = 200, Y = 200, size of 400x300 pixels in gray color
|
|
||||||
display.clearDisplay();
|
|
||||||
display.fillRect(200, 200, 400, 300, 4); //Arguments are: start X, start Y, size X, size Y, color
|
|
||||||
displayCurrentAction("Drawing gray rectangle");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw filled random colored rectangles on random location, size of 30x30 pixels in radnom color
|
|
||||||
display.clearDisplay();
|
|
||||||
for (int i = 0; i < 50; i++)
|
|
||||||
{
|
|
||||||
display.fillRect(random(0, 799), random(0, 599), 30, 30, random(0, 7));
|
|
||||||
}
|
|
||||||
displayCurrentAction("Drawing many filled rectangles randomly in random colors");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw circle at center of a screen with radius of 75 pixels
|
|
||||||
display.clearDisplay();
|
|
||||||
display.drawCircle(400, 300, 75, 0); //Arguments are: start X, start Y, radius, color
|
|
||||||
displayCurrentAction("Drawing a circle");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw some random colored circles at random location with radius of 25 pixels in random color
|
|
||||||
display.clearDisplay();
|
|
||||||
for (int i = 0; i < 40; i++)
|
|
||||||
{
|
|
||||||
display.drawCircle(random(0, 799), random(0, 599), 25, random(0, 7));
|
|
||||||
}
|
|
||||||
displayCurrentAction("Drawing many circles randomly in random colors");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw black filled circle at center of a screen with radius of 75 pixels
|
|
||||||
display.clearDisplay();
|
|
||||||
display.fillCircle(400, 300, 75, 0); //Arguments are: start X, start Y, radius, color
|
|
||||||
displayCurrentAction("Drawing black-filled circle");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw some random colored filled circles at random location with radius of 15 pixels
|
|
||||||
display.clearDisplay();
|
|
||||||
for (int i = 0; i < 40; i++)
|
|
||||||
{
|
|
||||||
display.fillCircle(random(0, 799), random(0, 599), 15, random(0, 7));
|
|
||||||
}
|
|
||||||
displayCurrentAction("Drawing many filled circles randomly in random colors");
|
|
||||||
display.display(); //To show stuff on screen, you always need to call display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw rounded rectangle at X = 200, Y = 200 and size of 400x300 pixels and radius of 10 pixels
|
|
||||||
display.clearDisplay();
|
|
||||||
display.drawRoundRect(200, 200, 400, 300, 10, 0); //Arguments are: start X, start Y, size X, size Y, radius, color
|
|
||||||
displayCurrentAction("Drawing rectangle with rounded edges");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw rounded rectangles on random location, size 100x150 pixels, radius of 5 pixels in radnom color
|
|
||||||
display.clearDisplay();
|
|
||||||
for (int i = 0; i < 50; i++)
|
|
||||||
{
|
|
||||||
display.drawRoundRect(random(0, 799), random(0, 599), 100, 150, 5, random(0, 7));
|
|
||||||
}
|
|
||||||
displayCurrentAction("Drawing many rounded edges rectangles");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw filled random colored rectangle at X = 200, Y = 200, size of 400x300 pixels and radius of 10 pixels
|
|
||||||
display.clearDisplay();
|
|
||||||
display.fillRoundRect(200, 200, 400, 300, 10, 0); //Arguments are: start X, start Y, size X, size Y, radius, color
|
|
||||||
displayCurrentAction("Drawing filled rectangle with rounded edges");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw filled random colored rectangle on random location, size of 30x30 pixels, radius of 3 pixels in radnom color
|
|
||||||
display.clearDisplay();
|
|
||||||
for (int i = 0; i < 50; i++)
|
|
||||||
{
|
|
||||||
display.fillRoundRect(random(0, 799), random(0, 599), 30, 30, 3, random(0, 7));
|
|
||||||
}
|
|
||||||
displayCurrentAction("Drawing many filled rectangle with rounded edges in random colors");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw simple triangle
|
|
||||||
display.clearDisplay();
|
|
||||||
display.drawTriangle(250, 400, 550, 400, 400, 100, 0); //Arguments are: X1, Y1, X2, Y2, X3, Y3, color
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Draw filled triangle inside simple triangle (so no display.clearDisplay() this time)
|
|
||||||
display.fillTriangle(300, 350, 500, 350, 400, 150, 0); //Arguments are: X1, Y1, X2, Y2, X3, Y3, color
|
|
||||||
displayCurrentAction("Drawing filled triangle inside exsisting one");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Display some grayscale image on screen. We are going to display e-radionica logo on display at location X = 100, Y = 100
|
|
||||||
//Image size is 500x332 pixels.
|
|
||||||
display.clearDisplay();
|
|
||||||
display.drawBitmap3Bit(100, 100, picture1, 500, 332); //Arguments are: start X, start Y, array variable name, size X, size Y
|
|
||||||
displayCurrentAction("Drawing a bitmap image");
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Write some text on screen with different sizes and color
|
|
||||||
display.clearDisplay();
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
display.setTextColor(i);
|
|
||||||
display.setTextSize(i + 1); //textSize parameter starts at 0 and goes up to 10 (larger won't fit Inkplate 6 screen)
|
|
||||||
display.setCursor(200, (i * i * 8)); //setCursor works as same as on LCD displays - sets "the cursor" at the place you want to write someting next
|
|
||||||
display.print("INKPLATE6!"); //The actual text you want to show on e-paper as String
|
|
||||||
}
|
|
||||||
displayCurrentAction("Text in different sizes and shadings");
|
|
||||||
display.display(); //To show stuff on screen, you always need to call display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Write same text on different location, but now invert colors (text is white, text background is black)
|
|
||||||
display.setTextColor(7, 0); //First argument is text color, while second argument is background color. In greyscale,
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{ //you are able to choose from 8 different colors (0-7)
|
|
||||||
display.setTextSize(i + 1);
|
|
||||||
display.setCursor(200, 300 + (i * i * 8));
|
|
||||||
display.print("INKPLATE6!");
|
|
||||||
}
|
|
||||||
display.display();
|
|
||||||
delay(DELAY_MS);
|
|
||||||
|
|
||||||
//Write text and rotate it by 90 deg. forever
|
|
||||||
int r = 0;
|
|
||||||
display.setTextSize(8);
|
|
||||||
display.setTextColor(7, 0);
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
display.setCursor(100, 100);
|
|
||||||
display.clearDisplay();
|
display.clearDisplay();
|
||||||
display.setRotation(r); //Set rotation will sent rotation for the entire display, so you can use it sideways or upside-down
|
display.drawLine(0, 0, 799, 599, 0); //All of those drawing fuctions originate from Adafruit GFX library, so maybe you are already familiar
|
||||||
display.print("INKPLATE6");
|
display.drawLine(799, 0, 0, 599, 0); //with those. Arguments are: start X, start Y, ending X, ending Y, color.
|
||||||
|
displayCurrentAction("Drawing two diagonal lines");
|
||||||
display.display();
|
display.display();
|
||||||
r++;
|
|
||||||
delay(DELAY_MS);
|
delay(DELAY_MS);
|
||||||
}
|
|
||||||
|
|
||||||
//Did you know that you can change between monochrome and greyscale mode anytime?
|
//And again, let's draw some random lines on screen!
|
||||||
//Just call Inkplate display(INKPLATE_1BIT) or Inkplate display(INKPLATE_3BIT)
|
display.clearDisplay();
|
||||||
|
for (int i = 0; i < 100; i++)
|
||||||
|
{
|
||||||
|
display.drawLine(random(0, 799), random(0, 599), random(0, 799), random(0, 599), random(0, 7));
|
||||||
|
}
|
||||||
|
displayCurrentAction("Drawing 50 random lines in random colors");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Let's draw some random thick lines on screen!
|
||||||
|
display.clearDisplay();
|
||||||
|
for (int i = 0; i < 100; i++)
|
||||||
|
{
|
||||||
|
display.drawThickLine(random(0, 799), random(0, 599), random(0, 799), random(0, 599), random(0, 7), (float)random(1, 20));
|
||||||
|
}
|
||||||
|
displayCurrentAction("Drawing 50 random lines in random colors and thickness");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Let's draw some random gradient thick lines on screen!
|
||||||
|
display.clearDisplay();
|
||||||
|
for (int i = 0; i < 100; i++)
|
||||||
|
{
|
||||||
|
int startColor = random(0, 7);
|
||||||
|
int endColor = random(startColor, 7);
|
||||||
|
display.drawGradientLine(random(0, 799), random(0, 599), random(0, 799), random(0, 599), startColor, endColor, (float)random(1, 20));
|
||||||
|
}
|
||||||
|
displayCurrentAction("Drawing 50 random gradient lines in random colors and thickness");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Now draw one horizontal...
|
||||||
|
display.clearDisplay();
|
||||||
|
display.drawFastHLine(100, 100, 600, 0); //Arguments are: starting X, starting Y, length, color
|
||||||
|
displayCurrentAction("Drawing one horizontal line");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//... and one vertical line
|
||||||
|
display.clearDisplay();
|
||||||
|
display.drawFastVLine(100, 100, 400, 0); //Arguments are: starting X, starting Y, length, color
|
||||||
|
displayCurrentAction("Drawing one vertical line");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Now, let' make a grid using only horizontal and vertical lines in random colors!
|
||||||
|
display.clearDisplay();
|
||||||
|
for (int i = 0; i < 800; i += 8)
|
||||||
|
{
|
||||||
|
display.drawFastVLine(i, 0, 600, (i / 8) & 0x0F);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 600; i += 4)
|
||||||
|
{
|
||||||
|
display.drawFastHLine(0, i, 800, (i / 8) & 0x0F);
|
||||||
|
}
|
||||||
|
displayCurrentAction("Drawing a grid using horizontal and vertical lines in different colors");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw rectangle at X = 200, Y = 200 and size of 400x300 pixels
|
||||||
|
display.clearDisplay();
|
||||||
|
display.drawRect(200, 200, 400, 300, 0); //Arguments are: start X, start Y, size X, size Y, color
|
||||||
|
displayCurrentAction("Drawing rectangle");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw rectangles on random location, size 100x150 pixels in random color
|
||||||
|
display.clearDisplay();
|
||||||
|
for (int i = 0; i < 50; i++)
|
||||||
|
{
|
||||||
|
display.drawRect(random(0, 799), random(0, 599), 100, 150, random(0, 7));
|
||||||
|
}
|
||||||
|
displayCurrentAction("Drawing many rectangles in random colors");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw filled black rectangle at X = 200, Y = 200, size of 400x300 pixels in gray color
|
||||||
|
display.clearDisplay();
|
||||||
|
display.fillRect(200, 200, 400, 300, 4); //Arguments are: start X, start Y, size X, size Y, color
|
||||||
|
displayCurrentAction("Drawing gray rectangle");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw filled random colored rectangles on random location, size of 30x30 pixels in radnom color
|
||||||
|
display.clearDisplay();
|
||||||
|
for (int i = 0; i < 50; i++)
|
||||||
|
{
|
||||||
|
display.fillRect(random(0, 799), random(0, 599), 30, 30, random(0, 7));
|
||||||
|
}
|
||||||
|
displayCurrentAction("Drawing many filled rectangles randomly in random colors");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw circle at center of a screen with radius of 75 pixels
|
||||||
|
display.clearDisplay();
|
||||||
|
display.drawCircle(400, 300, 75, 0); //Arguments are: start X, start Y, radius, color
|
||||||
|
displayCurrentAction("Drawing a circle");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw some random colored circles at random location with radius of 25 pixels in random color
|
||||||
|
display.clearDisplay();
|
||||||
|
for (int i = 0; i < 40; i++)
|
||||||
|
{
|
||||||
|
display.drawCircle(random(0, 799), random(0, 599), 25, random(0, 7));
|
||||||
|
}
|
||||||
|
displayCurrentAction("Drawing many circles randomly in random colors");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw black filled circle at center of a screen with radius of 75 pixels
|
||||||
|
display.clearDisplay();
|
||||||
|
display.fillCircle(400, 300, 75, 0); //Arguments are: start X, start Y, radius, color
|
||||||
|
displayCurrentAction("Drawing black-filled circle");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw some random colored filled circles at random location with radius of 15 pixels
|
||||||
|
display.clearDisplay();
|
||||||
|
for (int i = 0; i < 40; i++)
|
||||||
|
{
|
||||||
|
display.fillCircle(random(0, 799), random(0, 599), 15, random(0, 7));
|
||||||
|
}
|
||||||
|
displayCurrentAction("Drawing many filled circles randomly in random colors");
|
||||||
|
display.display(); //To show stuff on screen, you always need to call display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw rounded rectangle at X = 200, Y = 200 and size of 400x300 pixels and radius of 10 pixels
|
||||||
|
display.clearDisplay();
|
||||||
|
display.drawRoundRect(200, 200, 400, 300, 10, 0); //Arguments are: start X, start Y, size X, size Y, radius, color
|
||||||
|
displayCurrentAction("Drawing rectangle with rounded edges");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw rounded rectangles on random location, size 100x150 pixels, radius of 5 pixels in radnom color
|
||||||
|
display.clearDisplay();
|
||||||
|
for (int i = 0; i < 50; i++)
|
||||||
|
{
|
||||||
|
display.drawRoundRect(random(0, 799), random(0, 599), 100, 150, 5, random(0, 7));
|
||||||
|
}
|
||||||
|
displayCurrentAction("Drawing many rounded edges rectangles");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw filled random colored rectangle at X = 200, Y = 200, size of 400x300 pixels and radius of 10 pixels
|
||||||
|
display.clearDisplay();
|
||||||
|
display.fillRoundRect(200, 200, 400, 300, 10, 0); //Arguments are: start X, start Y, size X, size Y, radius, color
|
||||||
|
displayCurrentAction("Drawing filled rectangle with rounded edges");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw filled random colored rectangle on random location, size of 30x30 pixels, radius of 3 pixels in radnom color
|
||||||
|
display.clearDisplay();
|
||||||
|
for (int i = 0; i < 50; i++)
|
||||||
|
{
|
||||||
|
display.fillRoundRect(random(0, 799), random(0, 599), 30, 30, 3, random(0, 7));
|
||||||
|
}
|
||||||
|
displayCurrentAction("Drawing many filled rectangle with rounded edges in random colors");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw simple triangle
|
||||||
|
display.clearDisplay();
|
||||||
|
display.drawTriangle(250, 400, 550, 400, 400, 100, 0); //Arguments are: X1, Y1, X2, Y2, X3, Y3, color
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Draw filled triangle inside simple triangle (so no display.clearDisplay() this time)
|
||||||
|
display.fillTriangle(300, 350, 500, 350, 400, 150, 0); //Arguments are: X1, Y1, X2, Y2, X3, Y3, color
|
||||||
|
displayCurrentAction("Drawing filled triangle inside exsisting one");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Display some grayscale image on screen. We are going to display e-radionica logo on display at location X = 100, Y = 100
|
||||||
|
//Image size is 500x332 pixels.
|
||||||
|
display.clearDisplay();
|
||||||
|
display.drawBitmap3Bit(100, 100, picture1, 500, 332); //Arguments are: start X, start Y, array variable name, size X, size Y
|
||||||
|
displayCurrentAction("Drawing a bitmap image");
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Write some text on screen with different sizes and color
|
||||||
|
display.clearDisplay();
|
||||||
|
for (int i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
display.setTextColor(i);
|
||||||
|
display.setTextSize(i + 1); //textSize parameter starts at 0 and goes up to 10 (larger won't fit Inkplate 6 screen)
|
||||||
|
display.setCursor(200, (i * i * 8)); //setCursor works as same as on LCD displays - sets "the cursor" at the place you want to write someting next
|
||||||
|
display.print("INKPLATE6!"); //The actual text you want to show on e-paper as String
|
||||||
|
}
|
||||||
|
displayCurrentAction("Text in different sizes and shadings");
|
||||||
|
display.display(); //To show stuff on screen, you always need to call display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Write same text on different location, but now invert colors (text is white, text background is black)
|
||||||
|
display.setTextColor(7, 0); //First argument is text color, while second argument is background color. In greyscale,
|
||||||
|
for (int i = 0; i < 6; i++)
|
||||||
|
{ //you are able to choose from 8 different colors (0-7)
|
||||||
|
display.setTextSize(i + 1);
|
||||||
|
display.setCursor(200, 300 + (i * i * 8));
|
||||||
|
display.print("INKPLATE6!");
|
||||||
|
}
|
||||||
|
display.display();
|
||||||
|
delay(DELAY_MS);
|
||||||
|
|
||||||
|
//Write text and rotate it by 90 deg. forever
|
||||||
|
int r = 0;
|
||||||
|
display.setTextSize(8);
|
||||||
|
display.setTextColor(7, 0);
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
display.setCursor(100, 100);
|
||||||
|
display.clearDisplay();
|
||||||
|
display.setRotation(r); //Set rotation will sent rotation for the entire display, so you can use it sideways or upside-down
|
||||||
|
display.print("INKPLATE6");
|
||||||
|
display.display();
|
||||||
|
r++;
|
||||||
|
delay(DELAY_MS);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Did you know that you can change between monochrome and greyscale mode anytime?
|
||||||
|
//Just call Inkplate display(INKPLATE_1BIT) or Inkplate display(INKPLATE_3BIT)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Small function that will write on the screen what function is currently in demonstration.
|
//Small function that will write on the screen what function is currently in demonstration.
|
||||||
void displayCurrentAction(String text)
|
void displayCurrentAction(String text)
|
||||||
{
|
{
|
||||||
display.setTextSize(2);
|
display.setTextSize(2);
|
||||||
display.setCursor(2, 580);
|
display.setCursor(2, 580);
|
||||||
display.print(text);
|
display.print(text);
|
||||||
}
|
}
|
|
@ -55,11 +55,11 @@ Inkplate display(INKPLATE_1BIT);
|
||||||
Network network;
|
Network network;
|
||||||
|
|
||||||
// Contants used for drawing icons
|
// Contants used for drawing icons
|
||||||
char abbrs[32][16] = {"sn", "sl", "h", "t", "hr", "lr", "s", "hc", "lc", "c"};
|
char abbrs[32][16] ={ "sn", "sl", "h", "t", "hr", "lr", "s", "hc", "lc", "c" };
|
||||||
const uint8_t *logos[16] = {icon_sn, icon_sl, icon_h, icon_t, icon_hr, icon_lr, icon_s, icon_hc, icon_lc, icon_c};
|
const uint8_t *logos[16] ={ icon_sn, icon_sl, icon_h, icon_t, icon_hr, icon_lr, icon_s, icon_hc, icon_lc, icon_c };
|
||||||
|
|
||||||
// Variables for storing temperature
|
// Variables for storing temperature
|
||||||
char temps[8][4] = {
|
char temps[8][4] ={
|
||||||
"0F",
|
"0F",
|
||||||
"0F",
|
"0F",
|
||||||
"0F",
|
"0F",
|
||||||
|
@ -67,7 +67,7 @@ char temps[8][4] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Variables for storing days of the week
|
// Variables for storing days of the week
|
||||||
char days[8][4] = {
|
char days[8][4] ={
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
|
@ -153,6 +153,8 @@ void loop()
|
||||||
else
|
else
|
||||||
display.partialUpdate();
|
display.partialUpdate();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Go to sleep before checking again
|
// Go to sleep before checking again
|
||||||
esp_sleep_enable_timer_wakeup(1000L * DELAY_MS);
|
esp_sleep_enable_timer_wakeup(1000L * DELAY_MS);
|
||||||
(void)esp_light_sleep_start();
|
(void)esp_light_sleep_start();
|
||||||
|
|
|
@ -3,20 +3,15 @@
|
||||||
#include "Network.h"
|
#include "Network.h"
|
||||||
|
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include <WiFiMulti.h>
|
|
||||||
#include <HTTPClient.h>
|
#include <HTTPClient.h>
|
||||||
#include <WiFiClientSecure.h>
|
|
||||||
|
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
// WiFiMulti object declaration
|
|
||||||
WiFiMulti WiFiMulti;
|
|
||||||
|
|
||||||
// Static Json from ArduinoJson library
|
// Static Json from ArduinoJson library
|
||||||
StaticJsonDocument<6000> doc;
|
StaticJsonDocument<6000> doc;
|
||||||
|
|
||||||
// Declared week days
|
// Declared week days
|
||||||
char weekDays[8][8] = {
|
char weekDays[8][8] ={
|
||||||
"Mon",
|
"Mon",
|
||||||
"Tue",
|
"Tue",
|
||||||
"Wed",
|
"Wed",
|
||||||
|
@ -30,25 +25,27 @@ void Network::begin(char *city)
|
||||||
{
|
{
|
||||||
// Initiating wifi, like in BasicHttpClient example
|
// Initiating wifi, like in BasicHttpClient example
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
WiFiMulti.addAP(ssid, pass);
|
WiFi.begin(ssid, pass);
|
||||||
|
|
||||||
Serial.print(F("Waiting for WiFi to connect..."));
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
while ((WiFiMulti.run() != WL_CONNECTED))
|
WiFi.reconnect();
|
||||||
{
|
|
||||||
// Printing a dot to Serial monitor every second while waiting to connect
|
delay(5000);
|
||||||
Serial.print(F("."));
|
|
||||||
delay(1000);
|
Serial.println(F("Waiting for WiFi to reconnect..."));
|
||||||
|
while ((WiFi.status() != WL_CONNECTED))
|
||||||
|
{
|
||||||
|
// Prints a dot every second that wifi isn't connected
|
||||||
|
Serial.print(F("."));
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Serial.println(F(" connected"));
|
|
||||||
|
|
||||||
// Find internet time
|
// Find internet time
|
||||||
setTime();
|
setTime();
|
||||||
|
|
||||||
// Search for given cities woeid
|
// Search for given cities woeid
|
||||||
findCity(city);
|
findCity(city);
|
||||||
|
|
||||||
// reduce power by making WiFi module sleep
|
|
||||||
WiFi.setSleep(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gets time from ntp server
|
// Gets time from ntp server
|
||||||
|
@ -89,9 +86,20 @@ void formatWind(char *str, float wind)
|
||||||
|
|
||||||
void Network::getData(char *city, char *temp1, char *temp2, char *temp3, char *temp4, char *currentTemp, char *currentWind, char *currentTime, char *currentWeather, char *currentWeatherAbbr)
|
void Network::getData(char *city, char *temp1, char *temp2, char *temp3, char *temp4, char *currentTemp, char *currentWind, char *currentTime, char *currentWeather, char *currentWeatherAbbr)
|
||||||
{
|
{
|
||||||
// Return if wifi isn't connected
|
// Reconnect if wifi isn't connected
|
||||||
if (WiFi.status() != WL_CONNECTED)
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
return;
|
WiFi.reconnect();
|
||||||
|
|
||||||
|
delay(5000);
|
||||||
|
|
||||||
|
Serial.println(F("Waiting for WiFi to reconnect..."));
|
||||||
|
while ((WiFi.status() != WL_CONNECTED))
|
||||||
|
{
|
||||||
|
// Prints a dot every second that wifi isn't connected
|
||||||
|
Serial.print(F("."));
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Wake up if sleeping and save inital state
|
// Wake up if sleeping and save inital state
|
||||||
bool sleep = WiFi.getSleep();
|
bool sleep = WiFi.getSleep();
|
||||||
|
@ -201,9 +209,20 @@ void Network::getDays(char *day, char *day1, char *day2, char *day3)
|
||||||
|
|
||||||
void Network::findCity(char *city)
|
void Network::findCity(char *city)
|
||||||
{
|
{
|
||||||
// If not connected to wifi, return
|
// If not connected to wifi reconnect wifi
|
||||||
if (WiFi.status() != WL_CONNECTED)
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
return;
|
WiFi.reconnect();
|
||||||
|
|
||||||
|
delay(5000);
|
||||||
|
|
||||||
|
Serial.println(F("Waiting for WiFi to reconnect..."));
|
||||||
|
while ((WiFi.status() != WL_CONNECTED))
|
||||||
|
{
|
||||||
|
// Prints a dot every second that wifi isn't connected
|
||||||
|
Serial.print(F("."));
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Wake wifi module and save initial state
|
// Wake wifi module and save initial state
|
||||||
bool sleep = WiFi.getSleep();
|
bool sleep = WiFi.getSleep();
|
||||||
|
|
|
@ -63,8 +63,8 @@ Inkplate display(INKPLATE_1BIT);
|
||||||
Network network;
|
Network network;
|
||||||
|
|
||||||
//Contants used for drawing icons
|
//Contants used for drawing icons
|
||||||
char abbrs[32][32] = {"01d", "02d", "03d", "04d", "09d", "10d", "11d", "13d", "50d", "01n", "02n", "03n", "04n", "09n", "10n", "11n", "13n", "50n"};
|
char abbrs[32][32] ={ "01d", "02d", "03d", "04d", "09d", "10d", "11d", "13d", "50d", "01n", "02n", "03n", "04n", "09n", "10n", "11n", "13n", "50n" };
|
||||||
const uint8_t *logos[18] = {
|
const uint8_t *logos[18] ={
|
||||||
icon_01d,
|
icon_01d,
|
||||||
icon_02d,
|
icon_02d,
|
||||||
icon_03d,
|
icon_03d,
|
||||||
|
@ -85,7 +85,7 @@ const uint8_t *logos[18] = {
|
||||||
icon_50n,
|
icon_50n,
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint8_t *s_logos[18] = {
|
const uint8_t *s_logos[18] ={
|
||||||
icon_s_01d,
|
icon_s_01d,
|
||||||
icon_s_02d,
|
icon_s_02d,
|
||||||
icon_s_03d,
|
icon_s_03d,
|
||||||
|
@ -107,7 +107,7 @@ const uint8_t *s_logos[18] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
//Variables for storing temperature
|
//Variables for storing temperature
|
||||||
char temps[8][4] = {
|
char temps[8][4] ={
|
||||||
"0F",
|
"0F",
|
||||||
"0F",
|
"0F",
|
||||||
"0F",
|
"0F",
|
||||||
|
@ -115,7 +115,7 @@ char temps[8][4] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
//Variables for storing hour strings
|
//Variables for storing hour strings
|
||||||
char hours[8][4] = {
|
char hours[8][4] ={
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
|
|
|
@ -3,15 +3,11 @@
|
||||||
#include "Network.h"
|
#include "Network.h"
|
||||||
|
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include <WiFiMulti.h>
|
|
||||||
#include <HTTPClient.h>
|
#include <HTTPClient.h>
|
||||||
#include <WiFiClientSecure.h>
|
#include <WiFiClientSecure.h>
|
||||||
|
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
//WiFiMulti object declaration
|
|
||||||
WiFiMulti WiFiMulti;
|
|
||||||
|
|
||||||
//Static Json from ArduinoJson library
|
//Static Json from ArduinoJson library
|
||||||
StaticJsonDocument<32000> doc;
|
StaticJsonDocument<32000> doc;
|
||||||
|
|
||||||
|
@ -19,10 +15,10 @@ void Network::begin(char *city)
|
||||||
{
|
{
|
||||||
//Initiating wifi, like in BasicHttpClient example
|
//Initiating wifi, like in BasicHttpClient example
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
WiFiMulti.addAP(ssid, pass);
|
WiFi.begin(ssid, pass);
|
||||||
|
|
||||||
Serial.print(F("Waiting for WiFi to connect..."));
|
Serial.print(F("Waiting for WiFi to connect..."));
|
||||||
while ((WiFiMulti.run() != WL_CONNECTED))
|
while ((WiFi.status() != WL_CONNECTED))
|
||||||
{
|
{
|
||||||
//Printing a dot to Serial monitor every second while waiting to connect
|
//Printing a dot to Serial monitor every second while waiting to connect
|
||||||
Serial.print(F("."));
|
Serial.print(F("."));
|
||||||
|
@ -76,10 +72,20 @@ void formatWind(char *str, float wind)
|
||||||
bool Network::getData(char *city, char *temp1, char *temp2, char *temp3, char *temp4, char *currentTemp, char *currentWind, char *currentTime, char *currentWeather, char *currentWeatherAbbr, char *abbr1, char *abbr2, char *abbr3, char *abbr4)
|
bool Network::getData(char *city, char *temp1, char *temp2, char *temp3, char *temp4, char *currentTemp, char *currentWind, char *currentTime, char *currentWeather, char *currentWeatherAbbr, char *abbr1, char *abbr2, char *abbr3, char *abbr4)
|
||||||
{
|
{
|
||||||
bool f = 0;
|
bool f = 0;
|
||||||
|
// If not connected to wifi reconnect wifi
|
||||||
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
|
WiFi.reconnect();
|
||||||
|
|
||||||
//Return if wifi isn't connected
|
delay(5000);
|
||||||
if (WiFi.status() != WL_CONNECTED)
|
|
||||||
return 0;
|
Serial.println(F("Waiting for WiFi to reconnect..."));
|
||||||
|
while ((WiFi.status() != WL_CONNECTED))
|
||||||
|
{
|
||||||
|
// Prints a dot every second that wifi isn't connected
|
||||||
|
Serial.print(F("."));
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Wake up if sleeping and save inital state
|
//Wake up if sleeping and save inital state
|
||||||
bool sleep = WiFi.getSleep();
|
bool sleep = WiFi.getSleep();
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
This example will show you how you can use Inkplate 6 to display API data.
|
This example will show you how you can use Inkplate 6 to display API data.
|
||||||
Here we use Coingecko API to get latest cryptocurrency prices and display
|
Here we use Coingecko API to get latest cryptocurrency prices and display
|
||||||
them on the Inkplate screen. If you wish to change the currecny, you can
|
them on the Inkplate screen. If you wish to change the currecny, you can
|
||||||
edit it below.
|
edit it below.
|
||||||
|
|
||||||
IMPORTANT:
|
IMPORTANT:
|
||||||
Make sure to change your timezone and wifi credentials below
|
Make sure to change your timezone and wifi credentials below
|
||||||
|
@ -92,7 +92,7 @@ char minimum[16];
|
||||||
char maximum[16];
|
char maximum[16];
|
||||||
|
|
||||||
//All months in a year, for finding current date
|
//All months in a year, for finding current date
|
||||||
char *months[] = {
|
char *months[] ={
|
||||||
"Jan"
|
"Jan"
|
||||||
"Feb",
|
"Feb",
|
||||||
"Mar",
|
"Mar",
|
||||||
|
@ -108,27 +108,27 @@ char *months[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
//Out UI elements data
|
//Out UI elements data
|
||||||
textElement elements[] = {
|
textElement elements[] ={
|
||||||
{50, 130, &Roboto_Light_160, currencyAbbr, 0},
|
{ 50, 130, &Roboto_Light_160, currencyAbbr, 0 },
|
||||||
{390, 80, &Roboto_Light_40, date, 0},
|
{ 390, 80, &Roboto_Light_40, date, 0 },
|
||||||
{190, 185, &Roboto_Light_40, fromToDate, 0},
|
{ 190, 185, &Roboto_Light_40, fromToDate, 0 },
|
||||||
{570, 140, &Roboto_Light_40, "Current price:", 0},
|
{ 570, 140, &Roboto_Light_40, "Current price:", 0 },
|
||||||
{790, 190, &Roboto_Light_40, current, 1},
|
{ 790, 190, &Roboto_Light_40, current, 1 },
|
||||||
{630, 275, &Roboto_Light_40, "Minimum:", 0},
|
{ 630, 275, &Roboto_Light_40, "Minimum:", 0 },
|
||||||
{790, 320, &Roboto_Light_40, minimum, 1},
|
{ 790, 320, &Roboto_Light_40, minimum, 1 },
|
||||||
{625, 420, &Roboto_Light_40, "Maximum:", 0},
|
{ 625, 420, &Roboto_Light_40, "Maximum:", 0 },
|
||||||
{790, 466, &Roboto_Light_40, maximum, 1},
|
{ 790, 466, &Roboto_Light_40, maximum, 1 },
|
||||||
|
|
||||||
{18, 570, &Roboto_Light_36, dates, 0},
|
{ 18, 570, &Roboto_Light_36, dates, 0 },
|
||||||
{122, 570, &Roboto_Light_36, dates + 8, 0},
|
{ 122, 570, &Roboto_Light_36, dates + 8, 0 },
|
||||||
{227, 570, &Roboto_Light_36, dates + 16, 0},
|
{ 227, 570, &Roboto_Light_36, dates + 16, 0 },
|
||||||
{342, 570, &Roboto_Light_36, dates + 24, 0},
|
{ 342, 570, &Roboto_Light_36, dates + 24, 0 },
|
||||||
{466, 570, &Roboto_Light_36, dates + 32, 0},
|
{ 466, 570, &Roboto_Light_36, dates + 32, 0 },
|
||||||
|
|
||||||
{450, 240, &Roboto_Light_36, prices, 0},
|
{ 450, 240, &Roboto_Light_36, prices, 0 },
|
||||||
{450, 322, &Roboto_Light_36, prices + 16, 0},
|
{ 450, 322, &Roboto_Light_36, prices + 16, 0 },
|
||||||
{450, 401, &Roboto_Light_36, prices + 32, 0},
|
{ 450, 401, &Roboto_Light_36, prices + 32, 0 },
|
||||||
{450, 483, &Roboto_Light_36, prices + 48, 0},
|
{ 450, 483, &Roboto_Light_36, prices + 48, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
// Our functions declared below setup and loop
|
// Our functions declared below setup and loop
|
||||||
|
@ -270,9 +270,9 @@ void drawGraph()
|
||||||
//Draw a gradient line from every pixel to bottom line in graph line
|
//Draw a gradient line from every pixel to bottom line in graph line
|
||||||
for (int j = 0; j < (x2 - x1 - textMargin) / 31 + 1; ++j)
|
for (int j = 0; j < (x2 - x1 - textMargin) / 31 + 1; ++j)
|
||||||
display.drawGradientLine(prev_x + j,
|
display.drawGradientLine(prev_x + j,
|
||||||
(int)round((double)prev_y + dy * (double)j),
|
(int)round((double)prev_y + dy * (double)j),
|
||||||
prev_x + j,
|
prev_x + j,
|
||||||
y1, 3, 7);
|
y1, 3, 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Set previous x and y
|
//Set previous x and y
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#include "Network.h"
|
#include "Network.h"
|
||||||
|
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include <WiFiMulti.h>
|
|
||||||
#include <HTTPClient.h>
|
#include <HTTPClient.h>
|
||||||
#include <WiFiClientSecure.h>
|
#include <WiFiClientSecure.h>
|
||||||
|
|
||||||
|
@ -18,9 +17,6 @@ extern char *currency;
|
||||||
//Get our Inkplate object from main file to draw debug info on
|
//Get our Inkplate object from main file to draw debug info on
|
||||||
extern Inkplate display;
|
extern Inkplate display;
|
||||||
|
|
||||||
//WiFiMulti object declaration
|
|
||||||
WiFiMulti WiFiMulti;
|
|
||||||
|
|
||||||
//Static Json from ArduinoJson library
|
//Static Json from ArduinoJson library
|
||||||
StaticJsonDocument<30000> doc;
|
StaticJsonDocument<30000> doc;
|
||||||
|
|
||||||
|
@ -28,10 +24,10 @@ void Network::begin()
|
||||||
{
|
{
|
||||||
//Initiating wifi, like in BasicHttpClient example
|
//Initiating wifi, like in BasicHttpClient example
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
WiFiMulti.addAP(ssid, pass);
|
WiFi.begin(ssid, pass);
|
||||||
|
|
||||||
Serial.print(F("Waiting for WiFi to connect..."));
|
Serial.print(F("Waiting for WiFi to connect..."));
|
||||||
while ((WiFiMulti.run() != WL_CONNECTED))
|
while ((WiFi.status() != WL_CONNECTED))
|
||||||
{
|
{
|
||||||
Serial.print(F("."));
|
Serial.print(F("."));
|
||||||
delay(1000);
|
delay(1000);
|
||||||
|
@ -70,9 +66,20 @@ bool Network::getData(double *data)
|
||||||
{
|
{
|
||||||
bool f = 0;
|
bool f = 0;
|
||||||
|
|
||||||
//Return if wifi isn't connected
|
// If not connected to wifi reconnect wifi
|
||||||
if (WiFi.status() != WL_CONNECTED)
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
return 0;
|
WiFi.reconnect();
|
||||||
|
|
||||||
|
delay(5000);
|
||||||
|
|
||||||
|
Serial.println(F("Waiting for WiFi to reconnect..."));
|
||||||
|
while ((WiFi.status() != WL_CONNECTED))
|
||||||
|
{
|
||||||
|
// Prints a dot every second that wifi isn't connected
|
||||||
|
Serial.print(F("."));
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Wake up if sleeping and save inital state
|
//Wake up if sleeping and save inital state
|
||||||
bool sleep = WiFi.getSleep();
|
bool sleep = WiFi.getSleep();
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
Don't have "Inkplate 6(ESP32)" option? Follow our tutorial and add it:
|
Don't have "Inkplate 6(ESP32)" option? Follow our tutorial and add it:
|
||||||
https://e-radionica.com/en/blog/add-inkplate-6-to-arduino-ide/
|
https://e-radionica.com/en/blog/add-inkplate-6-to-arduino-ide/
|
||||||
|
|
||||||
This project shows you how Inkplate 6 can be used to display
|
This project shows you how Inkplate 6 can be used to display
|
||||||
events in your Google Calendar using their provided API
|
events in your Google Calendar using their provided API
|
||||||
|
|
||||||
For this to work you need to change your timezone, wifi credentials and your private calendar url
|
For this to work you need to change your timezone, wifi credentials and your private calendar url
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
3. Click 'Settings and sharing'
|
3. Click 'Settings and sharing'
|
||||||
4. Navigate to 'Integrate Calendar'
|
4. Navigate to 'Integrate Calendar'
|
||||||
5. Take the 'Secret address in iCal format'
|
5. Take the 'Secret address in iCal format'
|
||||||
|
|
||||||
(https://support.google.com/calendar/thread/2408874?hl=en)
|
(https://support.google.com/calendar/thread/2408874?hl=en)
|
||||||
|
|
||||||
Want to learn more about Inkplate? Visit www.inkplate.io
|
Want to learn more about Inkplate? Visit www.inkplate.io
|
||||||
|
@ -111,8 +111,6 @@ void setup()
|
||||||
|
|
||||||
delay(5000);
|
delay(5000);
|
||||||
network.begin();
|
network.begin();
|
||||||
//Our begin function
|
|
||||||
network.begin();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
|
@ -238,7 +236,7 @@ void drawGrid()
|
||||||
void getToFrom(char *dst, char *from, char *to, int *day, int *timeStamp)
|
void getToFrom(char *dst, char *from, char *to, int *day, int *timeStamp)
|
||||||
{
|
{
|
||||||
//ANSI C time struct
|
//ANSI C time struct
|
||||||
struct tm ltm = {0}, ltm2 = {0};
|
struct tm ltm ={ 0 }, ltm2 ={ 0 };
|
||||||
char temp[128], temp2[128];
|
char temp[128], temp2[128];
|
||||||
strncpy(temp, from, 16);
|
strncpy(temp, from, 16);
|
||||||
temp[16] = 0;
|
temp[16] = 0;
|
||||||
|
@ -369,7 +367,7 @@ bool drawEvent(entry *event, int day, int beginY, int maxHeigth, int *heigthNeed
|
||||||
|
|
||||||
display.setCursor(x1 + 5, display.getCursorY());
|
display.setCursor(x1 + 5, display.getCursorY());
|
||||||
|
|
||||||
char line[128] = {0};
|
char line[128] ={ 0 };
|
||||||
|
|
||||||
for (int i = 0; i < strlen(event->location); ++i)
|
for (int i = 0; i < strlen(event->location); ++i)
|
||||||
{
|
{
|
||||||
|
@ -465,14 +463,14 @@ void drawData()
|
||||||
|
|
||||||
//Sort entries by time
|
//Sort entries by time
|
||||||
qsort(entries,
|
qsort(entries,
|
||||||
entriesNum,
|
entriesNum,
|
||||||
sizeof(entry),
|
sizeof(entry),
|
||||||
cmp);
|
cmp);
|
||||||
|
|
||||||
//Events displayed and overflown counters
|
//Events displayed and overflown counters
|
||||||
int columns[3] = {0};
|
int columns[3] ={ 0 };
|
||||||
bool clogged[3] = {0};
|
bool clogged[3] ={ 0 };
|
||||||
int cloggedCount[3] = {0};
|
int cloggedCount[3] ={ 0 };
|
||||||
|
|
||||||
//Displaying events one by one
|
//Displaying events one by one
|
||||||
for (int i = 0; i < entriesNum; ++i)
|
for (int i = 0; i < entriesNum; ++i)
|
||||||
|
|
|
@ -1,21 +1,18 @@
|
||||||
#include "Network.h"
|
#include "Network.h"
|
||||||
|
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include <WiFiMulti.h>
|
|
||||||
#include <HTTPClient.h>
|
#include <HTTPClient.h>
|
||||||
#include <WiFiClientSecure.h>
|
#include <WiFiClientSecure.h>
|
||||||
|
|
||||||
// WiFiMulti object declaration
|
|
||||||
WiFiMulti WiFiMulti;
|
|
||||||
|
|
||||||
void Network::begin()
|
void Network::begin()
|
||||||
{
|
{
|
||||||
// Initiating wifi, like in BasicHttpClient example
|
// Initiating wifi, like in BasicHttpClient example
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
WiFiMulti.addAP(ssid, pass);
|
WiFi.begin(ssid, pass);
|
||||||
|
|
||||||
Serial.print(F("Waiting for WiFi to connect..."));
|
Serial.print(F("Waiting for WiFi to connect..."));
|
||||||
while ((WiFiMulti.run() != WL_CONNECTED))
|
while ((WiFi.status() != WL_CONNECTED))
|
||||||
{
|
{
|
||||||
// Prints a dot every second that wifi isn't connected
|
// Prints a dot every second that wifi isn't connected
|
||||||
Serial.print(F("."));
|
Serial.print(F("."));
|
||||||
|
@ -46,14 +43,20 @@ bool Network::getData(char *data)
|
||||||
{
|
{
|
||||||
// Variable to store fail
|
// Variable to store fail
|
||||||
bool f = 0;
|
bool f = 0;
|
||||||
|
// If not connected to wifi reconnect wifi
|
||||||
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
|
WiFi.reconnect();
|
||||||
|
|
||||||
// Return if wifi isn't connected
|
delay(5000);
|
||||||
if (WiFi.status() != WL_CONNECTED)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
// Wake up if sleeping and save inital state
|
Serial.println(F("Waiting for WiFi to reconnect..."));
|
||||||
bool sleep = WiFi.getSleep();
|
while ((WiFi.status() != WL_CONNECTED))
|
||||||
WiFi.setSleep(false);
|
{
|
||||||
|
// Prints a dot every second that wifi isn't connected
|
||||||
|
Serial.print(F("."));
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Http object used to make get request
|
// Http object used to make get request
|
||||||
HTTPClient http;
|
HTTPClient http;
|
||||||
|
@ -68,23 +71,23 @@ bool Network::getData(char *data)
|
||||||
|
|
||||||
// Actually do request
|
// Actually do request
|
||||||
int httpCode = http.GET();
|
int httpCode = http.GET();
|
||||||
|
|
||||||
if (httpCode == 200)
|
if (httpCode == 200)
|
||||||
{
|
{
|
||||||
long n = 0;
|
long n = 0;
|
||||||
while (http.getStream().available())
|
while (http.getStream().available())
|
||||||
data[n++] = http.getStream().read();
|
data[n++] = http.getStream().read();
|
||||||
|
data[n++]= 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Serial.println(httpCode);
|
||||||
f = 1;
|
f = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// end http
|
// end http
|
||||||
http.end();
|
http.end();
|
||||||
|
|
||||||
// Return to initial state
|
|
||||||
WiFi.setSleep(sleep);
|
|
||||||
|
|
||||||
return !f;
|
return !f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue