130 lines
4.8 KiB
C++
130 lines
4.8 KiB
C++
/*====================================================================================
|
|
|
|
This sketch demonstrates loading images which have been stored as files in the
|
|
built-in FLASH memory on a NodeMCU 1.0 (ESP8266 based, ESP-12E Module) rendering the
|
|
images onto a 160 x 128 pixel TFT screen.
|
|
|
|
The images are stored in the SPI FLASH Filing System (SPIFFS), which effectively
|
|
functions like a tiny "hard drive". This filing system is built into the ESP8266
|
|
Core that can be loaded from the IDE "Boards manager" menu option. This is at
|
|
version 2.3.0 at the time of sketch creation.
|
|
|
|
The size of the SPIFFS partition can be set in the IDE as 1Mbyte or 3Mbytes. Either
|
|
will work with this sketch. Typically most sketches easily fit within 1 Mbyte so a
|
|
3 Mbyte SPIFS partition can be used, in which case it can contain 100's of Jpeg
|
|
full screem images.
|
|
|
|
The Jpeg library can be found here:
|
|
https://github.com/Bodmer/JPEGDecoder
|
|
|
|
Images in the Jpeg format can be created using Paint or IrfanView or other picture
|
|
editting software.
|
|
|
|
Place the images inside the sketch folder, in a folder called "Data". Then upload
|
|
all the files in the folder using the Arduino IDE "ESP8266 Sketch Data Upload" option
|
|
in the "Tools" menu:
|
|
http://www.esp8266.com/viewtopic.php?f=32&t=10081
|
|
https://github.com/esp8266/arduino-esp8266fs-plugin/releases
|
|
|
|
This takes some time, but the SPIFFS content is not altered when a new sketch is
|
|
uploaded, so there is no need to upload the same files again!
|
|
Note: If open, you must close the "Serial Monitor" window to upload data to SPIFFS!
|
|
|
|
The IDE will not copy the "data" folder with the sketch if you save the sketch under
|
|
another name. It is necessary to manually make a copy and place it in the sketch
|
|
folder.
|
|
|
|
This sketch includes example images in the Data folder.
|
|
|
|
Saving images, uploading and rendering on the TFT screen couldn't be much easier!
|
|
|
|
Created by Bodmer 24th Jan 2017 - Tested in Arduino IDE 1.8.0 esp8266 Core 2.3.0
|
|
==================================================================================*/
|
|
|
|
//====================================================================================
|
|
// Libraries
|
|
//====================================================================================
|
|
// Call up the SPIFFS FLASH filing system this is part of the ESP Core
|
|
#define FS_NO_GLOBALS
|
|
#include <FS.h>
|
|
|
|
// JPEG decoder library
|
|
#include <JPEGDecoder.h>
|
|
|
|
// SPI library, built into IDE
|
|
#include <SPI.h>
|
|
|
|
// Call up the TFT library
|
|
#include <TFT_eSPI.h> // Hardware-specific library for ESP8266
|
|
// The TFT control pins are set in the User_Setup.h file <<<<<<<<<<<<<<<<< NOTE!
|
|
// that can be found in the "src" folder of the library
|
|
|
|
// Invoke TFT library
|
|
TFT_eSPI tft = TFT_eSPI();
|
|
|
|
//====================================================================================
|
|
// Setup
|
|
//====================================================================================
|
|
void setup()
|
|
{
|
|
Serial.begin(250000); // Used for messages and the C array generator
|
|
|
|
delay(10);
|
|
Serial.println("NodeMCU decoder test!");
|
|
|
|
tft.begin();
|
|
tft.setRotation(0); // 0 & 2 Portrait. 1 & 3 landscape
|
|
tft.fillScreen(TFT_BLACK);
|
|
|
|
if (!SPIFFS.begin()) {
|
|
Serial.println("SPIFFS initialisation failed!");
|
|
while (1) yield(); // Stay here twiddling thumbs waiting
|
|
}
|
|
Serial.println("\r\nInitialisation done.");
|
|
listFiles(); // Lists the files so you can see what is in the SPIFFS
|
|
|
|
}
|
|
|
|
//====================================================================================
|
|
// Loop
|
|
//====================================================================================
|
|
void loop()
|
|
{
|
|
// Note the / before the SPIFFS file name must be present, this means the file is in
|
|
// the root directory of the SPIFFS, e.g. "/Tiger.jpg" for a file called "Tiger.jpg"
|
|
|
|
tft.setRotation(0); // portrait
|
|
tft.fillScreen(random(0xFFFF));
|
|
|
|
drawJpeg("/EagleEye160.jpg", 0, 16);
|
|
delay(2000);
|
|
|
|
tft.fillScreen(random(0xFFFF));
|
|
drawJpeg("/tiger160.jpg", 4, 0);
|
|
delay(2000);
|
|
|
|
tft.setRotation(1); // landscape
|
|
//tft.fillScreen(random(0xFFFF));
|
|
drawJpeg("/arduino160.jpg", 0, 0);
|
|
delay(2000);
|
|
|
|
tft.fillScreen(TFT_BLACK);
|
|
drawJpeg("/Baboon160.jpg", 0, 4);
|
|
delay(2000);
|
|
|
|
tft.fillScreen(random(0xFFFF));
|
|
drawJpeg("/Mouse160.jpg", 0, 11);
|
|
delay(2000);
|
|
|
|
// Create arrays from the jpeg images and send them to the serial port for copy and
|
|
// pasting into a sketch (used to make arrays fot the TFT_FLASH_Jpeg sketch)
|
|
|
|
//createArray("/EagleEye160.jpg");
|
|
//createArray("/tiger160.jpg");
|
|
//createArray("/Baboon160.jpg");
|
|
//createArray("/Mouse160.jpg");
|
|
//while(1) yield(); // Stay here
|
|
}
|
|
//====================================================================================
|
|
|