ESP32-WROOM-32 で ILI9341 に SDから読みだした PNG画像を連続描画【遅い】
回路
ソース
#include "FS.h" #include "SD.h" #include "SPI.h" #include "Adafruit_GFX.h" #include "Adafruit_ILI9341.h" // For the Adafruit shield, these are the default. #define TFT_RST 16 #define TFT_DC 17 #define TFT_CS 5 // Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST); static uint8_t data1[120 * 320]; static uint8_t data2[120 * 320]; void testOriginalData() { byte c; uint16_t g; tft.startWrite(); tft.setAddrWindow(0, 0, 320, 240); for(int y = 0;y < 120; y++) { for(int x = 0;x < 320; x++) { c = data1[y * 320 + x]; g = (c>>3)<<11 | (c>>2)<<5 | c>>3; tft.SPI_WRITE16(g); } } for(int y = 0;y < 120; y++) { for(int x = 0;x < 320; x++) { c = data2[y * 320 + x]; g = (c>>3)<<11 | (c>>2)<<5 | c>>3; tft.SPI_WRITE16(g); } } tft.endWrite(); } bool readFile(fs::FS &fs, const char * path){ File file = fs.open(path); if(!file){ Serial.println("Failed to open file for reading"); return false; } file.read(data1, 120 * 320); file.read(data2, 120 * 320); file.close(); return true; } SPIClass SPI2(HSPI); #define HSPI_SCK 14 #define HSPI_MISO 35 #define HSPI_MOSI 13 #define HSPI_SS 15 void setup() { tft.begin(); tft.setRotation(1); SPI2.begin(HSPI_SCK, HSPI_MISO, HSPI_MOSI, HSPI_SS); Serial.begin(115200); delay(100); if(!SD.begin(HSPI_SS, SPI2, 12000000L)){ Serial.println("Card Mount Failed"); return; } } void loop() { tft.fillScreen(ILI9341_BLACK); char buf[255]; unsigned long old_time; for(int i = 1; i <= 100; i++) { sprintf(buf, "/output/%04d.dat", i); old_time = millis(); Serial.println(buf); if(readFile(SD, buf)) { // put your main code here, to run repeatedly: testOriginalData(); } Serial.print((float)1/(millis()-old_time)*1000); Serial.println(" fps"); } }
課題
4.5 fps しか出てないのでどうにかしたい。