[ESP32 TTGO] Getting Started! #StartingLine #BasicSetup (ft. Image Animation)
95
ESP32_TTGO/AnimationImage/AnimationImage.ino
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
#include "SPIFFS.h"
|
||||||
|
#include <TJpg_Decoder.h>
|
||||||
|
#include "SPI.h"
|
||||||
|
#include <TFT_eSPI.h> // Hardware-specific library
|
||||||
|
|
||||||
|
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library
|
||||||
|
int imgNum = 0;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
// Initialise SPIFFS
|
||||||
|
if (!SPIFFS.begin()) {
|
||||||
|
Serial.println("SPIFFS initialisation failed!");
|
||||||
|
while (1) yield(); // Stay here twiddling thumbs waiting
|
||||||
|
}
|
||||||
|
Serial.println("\r\nInitialisation done.");
|
||||||
|
listSPIFFS();
|
||||||
|
|
||||||
|
tft.begin();
|
||||||
|
tft.setRotation(1);
|
||||||
|
tft.fillScreen(TFT_BLACK);
|
||||||
|
|
||||||
|
TJpgDec.setJpgScale(1);
|
||||||
|
TJpgDec.setSwapBytes(true);
|
||||||
|
TJpgDec.setCallback(tft_output);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
if(imgNum >23) imgNum = 0;
|
||||||
|
String imgPath = "/image_";
|
||||||
|
imgPath += imgNum++;
|
||||||
|
imgPath +=".jpg";
|
||||||
|
|
||||||
|
TJpgDec.drawFsJpg(0, 0, imgPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
void listSPIFFS(void) {
|
||||||
|
Serial.println(F("\r\nListing SPIFFS files:"));
|
||||||
|
static const char line[] PROGMEM = "=================================================";
|
||||||
|
|
||||||
|
Serial.println(FPSTR(line));
|
||||||
|
Serial.println(F(" File name Size"));
|
||||||
|
Serial.println(FPSTR(line));
|
||||||
|
|
||||||
|
fs::File root = SPIFFS.open("/");
|
||||||
|
if (!root) {
|
||||||
|
Serial.println(F("Failed to open directory"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!root.isDirectory()) {
|
||||||
|
Serial.println(F("Not a directory"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs::File file = root.openNextFile();
|
||||||
|
while (file) {
|
||||||
|
|
||||||
|
if (file.isDirectory()) {
|
||||||
|
Serial.print("DIR : ");
|
||||||
|
String fileName = file.name();
|
||||||
|
Serial.print(fileName);
|
||||||
|
} else {
|
||||||
|
String fileName = file.name();
|
||||||
|
Serial.print(" " + fileName);
|
||||||
|
// File path can be 31 characters maximum in SPIFFS
|
||||||
|
int spaces = 33 - fileName.length(); // Tabulate nicely
|
||||||
|
if (spaces < 1) spaces = 1;
|
||||||
|
while (spaces--) Serial.print(" ");
|
||||||
|
String fileSize = (String) file.size();
|
||||||
|
spaces = 10 - fileSize.length(); // Tabulate nicely
|
||||||
|
if (spaces < 1) spaces = 1;
|
||||||
|
while (spaces--) Serial.print(" ");
|
||||||
|
Serial.println(fileSize + " bytes");
|
||||||
|
}
|
||||||
|
|
||||||
|
file = root.openNextFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println(FPSTR(line));
|
||||||
|
Serial.println();
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool tft_output(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t* bitmap)
|
||||||
|
{
|
||||||
|
// Stop further decoding as image is running off bottom of screen
|
||||||
|
if ( y >= tft.height() ) return 0;
|
||||||
|
|
||||||
|
// This function will clip the image block rendering automatically at the TFT boundaries
|
||||||
|
tft.pushImage(x, y, w, h, bitmap);
|
||||||
|
|
||||||
|
// Return 1 to decode next block
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
BIN
ESP32_TTGO/AnimationImage/data/image_0.jpg
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_1.jpg
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_10.jpg
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_11.jpg
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_12.jpg
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_13.jpg
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_14.jpg
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_15.jpg
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_16.jpg
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_17.jpg
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_18.jpg
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_19.jpg
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_2.jpg
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_20.jpg
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_21.jpg
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_22.jpg
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_23.jpg
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_3.jpg
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_4.jpg
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_5.jpg
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_6.jpg
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_7.jpg
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_8.jpg
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
ESP32_TTGO/AnimationImage/data/image_9.jpg
Normal file
|
After Width: | Height: | Size: 2.3 KiB |