Finished example.
This commit is contained in:
parent
3eb98ff9f4
commit
c69240ff1a
105
Inkplate.cpp
105
Inkplate.cpp
|
@ -381,19 +381,28 @@ int Inkplate::drawBitmapFromWeb(WiFiClient* s, int x, int y, int len) {
|
|||
|
||||
int Inkplate::drawBitmapFromWeb(char* url, int x, int y) {
|
||||
if (WiFi.status() != WL_CONNECTED) return 0;
|
||||
int ret = 0;
|
||||
|
||||
bool sleep = WiFi.getSleep();
|
||||
WiFi.setSleep(false);
|
||||
|
||||
HTTPClient http;
|
||||
|
||||
http.getStream().setNoDelay(true);
|
||||
http.getStream().setTimeout(10);
|
||||
http.getStream().setTimeout(1);
|
||||
http.begin(url);
|
||||
|
||||
int httpCode = http.GET();
|
||||
if (httpCode != 200) return 0;
|
||||
if (httpCode == 200) {
|
||||
int32_t len = http.getSize();
|
||||
if (len > 0) {
|
||||
WiFiClient * dat = http.getStreamPtr();
|
||||
ret = drawBitmapFromWeb(dat, x, y, len);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t len = http.getSize();
|
||||
if (len <= 0) return 0;
|
||||
|
||||
WiFiClient * dat = http.getStreamPtr();
|
||||
return drawBitmapFromWeb(dat, x, y, len);
|
||||
http.end();
|
||||
WiFi.setSleep(sleep);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int Inkplate::sdCardInit() {
|
||||
|
@ -894,25 +903,51 @@ int Inkplate::drawMonochromeBitmapWeb(WiFiClient *s, struct bitmapHeader bmpHead
|
|||
int w = bmpHeader.width;
|
||||
int h = bmpHeader.height;
|
||||
uint8_t paddingBits = w % 32;
|
||||
int total = len - 34;
|
||||
w /= 32;
|
||||
|
||||
uint8_t buffer[100];
|
||||
s->readBytes(buffer, bmpHeader.startRAW);
|
||||
int i, j;
|
||||
uint8_t* buf = (uint8_t*) ps_malloc(total);
|
||||
if (buf == NULL)
|
||||
return 0;
|
||||
|
||||
int pnt = 0;
|
||||
while (pnt < total) {
|
||||
int toread = s->available();
|
||||
if (toread > 0) {
|
||||
int read = s->read(buf+pnt, toread);
|
||||
if (read > 0)
|
||||
pnt += read;
|
||||
}
|
||||
}
|
||||
|
||||
int i, j, k = bmpHeader.startRAW - 34;
|
||||
for (j = 0; j < h; j++) {
|
||||
for (i = 0; i < w; i++) {
|
||||
uint32_t pixelRow = s->read() << 24 | s->read() << 16 | s->read() << 8 | s->read();
|
||||
uint8_t a = buf[k++];
|
||||
uint8_t b = buf[k++];
|
||||
uint8_t c = buf[k++];
|
||||
uint8_t d = buf[k++];
|
||||
uint32_t pixelRow = a << 24 | b << 16 | c << 8 | d;
|
||||
pixelRow = ~pixelRow;
|
||||
for (int n = 0; n < 32; n++) {
|
||||
drawPixel((i * 32) + n + x, h - j + y, !(pixelRow & (1ULL << (31 - n))));
|
||||
}
|
||||
}
|
||||
if (paddingBits) {
|
||||
uint32_t pixelRow = s->read() << 24 | s->read() << 16 | s->read() << 8 | s->read();
|
||||
uint8_t a = buf[k++];
|
||||
uint8_t b = buf[k++];
|
||||
uint8_t c = buf[k++];
|
||||
uint8_t d = buf[k++];
|
||||
uint32_t pixelRow = a << 24 | b << 16 | c << 8 | d;
|
||||
pixelRow = ~pixelRow;
|
||||
for (int n = 0; n < paddingBits; n++) {
|
||||
drawPixel((i * 32) + n + x, h - j + y, !(pixelRow & (1ULL << (31 - n))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(buf);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -920,64 +955,22 @@ int Inkplate::drawGrayscaleBitmap24Web(WiFiClient *s, struct bitmapHeader bmpHea
|
|||
int w = bmpHeader.width;
|
||||
int h = bmpHeader.height;
|
||||
char padding = w % 4;
|
||||
|
||||
//Serial.println(len);
|
||||
//Serial.println(bmpHeader.startRAW);
|
||||
|
||||
int total = len - 34;
|
||||
|
||||
uint8_t* buf = (uint8_t*) ps_malloc(total);
|
||||
if (buf == NULL)
|
||||
return 0;
|
||||
|
||||
Serial.println("Starting data read!");
|
||||
|
||||
long t_start = millis();
|
||||
//int i, j;
|
||||
//size_t read = s->read(buf, len - 34);
|
||||
//for (i = 0; i < len - 34; i++)
|
||||
// s->read();
|
||||
//int read;
|
||||
int pnt = 0;
|
||||
//int cnk = 512;
|
||||
//while (pnt < total) {
|
||||
// if (total - pnt < cnk)
|
||||
// cnk = total - pnt;
|
||||
// read = s->read(buf+pnt, cnk);
|
||||
// if (read > 0) {
|
||||
// pnt += read;
|
||||
// Serial.println(" Read: " + String(read));
|
||||
// }
|
||||
// //delay(10);
|
||||
//}
|
||||
|
||||
while (pnt < total) {
|
||||
int toread = s->available();
|
||||
if (toread > 0) {
|
||||
int read = s->read(buf+pnt, toread);
|
||||
if (read > 0) {
|
||||
if (read > 0)
|
||||
pnt += read;
|
||||
Serial.println(" Read: " + String(read) + " Total: " + String(pnt) + "/" + String(total));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//while (pnt < total) {
|
||||
// if (total - pnt < cnk)
|
||||
// cnk = total - pnt;
|
||||
// s->read(buf+pnt, cnk);
|
||||
// pnt += cnk;
|
||||
// Serial.println(" Read: " + String(cnk));
|
||||
//}
|
||||
//for (j = 0; j < h; j++) {
|
||||
// size_t read = s->read(buf, 64);
|
||||
// Serial.println(" Read: " + String(read));
|
||||
// delay(1);
|
||||
//}
|
||||
long t_stop = millis();
|
||||
|
||||
Serial.println("Time: " + String((float)(t_stop - t_start)/1000) + "s");
|
||||
|
||||
int i, j, k = bmpHeader.startRAW - 34;
|
||||
for (j = 0; j < h; j++) {
|
||||
for (i = 0; i < w; i++) {
|
||||
|
|
|
@ -21,40 +21,36 @@
|
|||
*/
|
||||
|
||||
#include "Inkplate.h" //Include Inkplate library to the sketch
|
||||
#include "SdFat.h" //Include library for SD card
|
||||
#include "WiFi.h" //Include library for WiFi
|
||||
#include "HTTPClient.h" //Include library for HTTP downloading
|
||||
Inkplate display(INKPLATE_1BIT); //Create an object on Inkplate library and also set library into 1 Bit mode (Monochrome)
|
||||
SdFile file; //Create SdFile object used for accessing files on SD card
|
||||
|
||||
const char* ssid = "Twilight Sparkle"; //Your WiFi SSID
|
||||
const char* password = "thori4twily"; //Your WiFi password
|
||||
|
||||
//Photo taken by: Paulian Prajitura
|
||||
char* url = "https://dl.thorinair.net/neowise2.bmp"; //URL of image to download
|
||||
const char* ssid = "ssid"; //Your WiFi SSID
|
||||
const char* password = "password"; //Your WiFi password
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
|
||||
display.begin(); //Init Inkplate library (you should call this function ONLY ONCE)
|
||||
display.clearDisplay(); //Clear frame buffer of display
|
||||
display.display(); //Put clear image on display
|
||||
|
||||
display.println("Connecting to WiFi...");
|
||||
display.print("Connecting to WiFi...");
|
||||
display.partialUpdate();
|
||||
|
||||
//Connect to the WiFi network.
|
||||
WiFi.mode(WIFI_MODE_STA);
|
||||
WiFi.setSleep(false);
|
||||
WiFi.begin(ssid, password);
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(500);
|
||||
Serial.print(".");
|
||||
display.print(".");
|
||||
display.partialUpdate();
|
||||
}
|
||||
display.println("WiFi OK! Downloading...");
|
||||
display.println("\nWiFi OK! Downloading...");
|
||||
display.partialUpdate();
|
||||
|
||||
if(!display.drawBitmapFromWeb(url, 0, 0)) {
|
||||
//Draw the first image from web.
|
||||
//24 bit example, will take around 20 secs to load.
|
||||
//Photo taken by: Roberto Fernandez
|
||||
if(!display.drawBitmapFromWeb("https://varipass.org/neowise.bmp", 0, 0)) {
|
||||
//If is something failed (wrong filename or wrong bitmap format), write error message on the screen.
|
||||
//REMEMBER! You can only use Windows Bitmap file with color depth of 1 or 24 bits with no compression!
|
||||
display.println("Image open error");
|
||||
|
@ -62,95 +58,20 @@ void setup() {
|
|||
}
|
||||
display.display();
|
||||
|
||||
//HTTPClient http;
|
||||
//
|
||||
//http.begin(url);
|
||||
//
|
||||
////Get the image, check if connection was successful.
|
||||
//uint32_t httpCode = http.GET();
|
||||
//if (httpCode == 200) {
|
||||
//
|
||||
// display.println("HTTP opened! Size: " + String(len) + " - Saving to SD...");
|
||||
// display.partialUpdate();
|
||||
//
|
||||
//
|
||||
//
|
||||
// //String str = http.getString();
|
||||
// //int str_len = http.getSize();
|
||||
// //char char_array[str_len];
|
||||
// //str.toCharArray(char_array, str_len);
|
||||
// //http.end();
|
||||
//
|
||||
// SdFat sd = display.getSdFat();
|
||||
// sd.remove("image.bmp");
|
||||
// File image = sd.open("image.bmp", O_CREAT | O_WRITE);
|
||||
// if (image) {
|
||||
//
|
||||
//
|
||||
//
|
||||
// http.writeToStream(&stream);
|
||||
////
|
||||
// //String body = http.getString();
|
||||
////
|
||||
// //for (int i = 0; i < http.getSize(); i++) {
|
||||
// // //Serial.print(body[i]);
|
||||
// // image.write(body[i]);
|
||||
// //}
|
||||
//
|
||||
// //WiFiClient* stream = http.getStreamPtr();
|
||||
// //while (stream->available()) {
|
||||
// // uint8_t c = stream->read();
|
||||
// // //Serial.print(c);
|
||||
// // image.write(c);
|
||||
// //}
|
||||
////
|
||||
// ////image.write(char_array, str_len); //Write HTTP content to file
|
||||
//
|
||||
// //WiFiClient * stream = http.getStreamPtr();
|
||||
// //byte buffer[len];
|
||||
// //stream->readBytes(buffer, len);
|
||||
// //for (int i = 0; i < len; i++)
|
||||
// // image.write(buffer[i]);
|
||||
//
|
||||
// //uint32_t pos = 0;
|
||||
// //char buff[2048];
|
||||
// //while (pos < len && http.available()) {
|
||||
// // ESP.wdtFeed();
|
||||
// // yield();
|
||||
// // http.seek(pos, fs::SeekMode::SeekSet);
|
||||
// // const auto read = http.readBytes(buff, sizeof(buff));
|
||||
// // pos += read;
|
||||
// // image.write(buff, read);
|
||||
// //}
|
||||
//
|
||||
// image.close(); //Close the file
|
||||
// display.println("Image saved!");
|
||||
// display.partialUpdate();
|
||||
//
|
||||
// delay(1000);
|
||||
//
|
||||
// //Load and display the image on e-paper at position X=0, Y=0
|
||||
// if(!display.drawBitmapFromSD("image.bmp", 0, 0)) {
|
||||
// //If is something failed (wrong filename or wrong bitmap format), write error message on the screen.
|
||||
// //REMEMBER! You can only use Windows Bitmap file with color depth of 1 or 24 bits with no compression!
|
||||
// display.println("Image open error");
|
||||
// display.display();
|
||||
// }
|
||||
// display.display();
|
||||
// }
|
||||
// else {
|
||||
// //If image file was not open successfully, display error on screen
|
||||
// display.println("File error!");
|
||||
// display.partialUpdate();
|
||||
// return;
|
||||
// }
|
||||
//}
|
||||
//else {
|
||||
// //If HTTP connection was not successful, display error on screen
|
||||
// display.println("HTTP connection error!");
|
||||
// display.partialUpdate();
|
||||
// return;
|
||||
//}
|
||||
delay(5000);
|
||||
|
||||
//Draw the second image from web.
|
||||
//1 bit example, will load very quickly.
|
||||
//Photo taken by: Roberto Fernandez
|
||||
if(!display.drawBitmapFromWeb("https://varipass.org/neowise_mono.bmp", 0, 0)) {
|
||||
//If is something failed (wrong filename or wrong bitmap format), write error message on the screen.
|
||||
//REMEMBER! You can only use Windows Bitmap file with color depth of 1 or 24 bits with no compression!
|
||||
display.println("Image open error");
|
||||
display.display();
|
||||
}
|
||||
display.display();
|
||||
|
||||
WiFi.mode(WIFI_OFF);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.4 MiB |
Binary file not shown.
After Width: | Height: | Size: 59 KiB |
Loading…
Reference in New Issue