Hello Bodmer!
Thank you SO MUCH for all your work on this stuff. My project is going to ROCK because of you.
Can you or anyone tell me why I'm getting these artifacts when I try to display JPG images with your libraries?
Here's my code (based on your NodeMCU_Jpeg example sketch):
Code: [Select]
#define FS_NO_GLOBALS
#define TFT_BLACK 0
#include <FS.h>
#include <JPEGDecoder.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
void setup()
{
Serial.begin(9600); // 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\nInitialization done.");
listFiles(); // Lists the files so you can see what is in the SPIFFS
}
void loop()
{
tft.setRotation(0); // portrait
// Display Gear Image
tft.fillScreen(TFT_BLACK);
drawJpeg("/t5_gear.jpg", 0, 0);
delay(2000);
//Display Water Day image
tft.fillScreen(TFT_BLACK);
drawJpeg("/waterday.jpg", 0, 0);
delay(2000);
}
I have attached both of the original 240x320 JPG image files to this message...maybe there's something wrong with how they are encoded? I cannot figure this out.
Thank you so much for your help!
bodmer
- God Member
- Posts: 978
- Karma: 224 [add]
- https://github.com/Bodmer
Hi tsjim,
Assuming the library example images display OK, then I suspect the encoding format is the problem.
It looks like the MCU size is 8x8 whereas the examples I have tested are 16x16.
It looks like you have used Photoshop to encode the jpeg, perhaps try a different image edit program and try that.
I do not have access to my Arduino stuff at the moment so cannot test. If there is a bug in the 8x8 decoding then I will see if I can track it down. The other possibility is that the SPI clock frequency is too high for the display. Try 27MHz if you think that may be the case.
Assuming the library example images display OK, then I suspect the encoding format is the problem.
It looks like the MCU size is 8x8 whereas the examples I have tested are 16x16.
It looks like you have used Photoshop to encode the jpeg, perhaps try a different image edit program and try that.
I do not have access to my Arduino stuff at the moment so cannot test. If there is a bug in the 8x8 decoding then I will see if I can track it down. The other possibility is that the SPI clock frequency is too high for the display. Try 27MHz if you think that may be the case.
bodmer
- God Member
- Posts: 978
- Karma: 224 [add]
- https://github.com/Bodmer
Hi tsjim,
I checked the JPEGDecoder library with you files and get the same results on a NodeMCU and a Mega with a different graphics library so the problem must be in the JPEGDecoder library somewhere. The images are encoded as 8x8 MCU blocks and it looks like the decoder does not like this. I used IrfanView to re-saved one of the files and this turned it into a 16x16 MCU size and this renders fine. It also renders faster. See attached.
I have not managed to track down this bug so the only work-around is to use jpeg files encoded in 16x16 MCU blocks. I will post this as an issue on Github.
I checked the JPEGDecoder library with you files and get the same results on a NodeMCU and a Mega with a different graphics library so the problem must be in the JPEGDecoder library somewhere. The images are encoded as 8x8 MCU blocks and it looks like the decoder does not like this. I used IrfanView to re-saved one of the files and this turned it into a 16x16 MCU size and this renders fine. It also renders faster. See attached.
I have not managed to track down this bug so the only work-around is to use jpeg files encoded in 16x16 MCU blocks. I will post this as an issue on Github.
bodmer
- God Member
- Posts: 978
- Karma: 224 [add]
- https://github.com/Bodmer
Hi tsjim,
I have tracked down the bug and corrected it in the picojpeg.c code.
Download the latest JPEGDecoder library via the IDE Library manager (now at 1.7.7). It may take a day for the IDE to see the latest version. Or download a copy direct from Github.
The 8x8 MCU sized jpegs should render OK now.
Tip: The original Jpeg was 80kbytes, if you reduce the quality to make it 20kbytes then it will render faster when loading from SPIFFS.
I have tracked down the bug and corrected it in the picojpeg.c code.
Download the latest JPEGDecoder library via the IDE Library manager (now at 1.7.7). It may take a day for the IDE to see the latest version. Or download a copy direct from Github.
The 8x8 MCU sized jpegs should render OK now.
Tip: The original Jpeg was 80kbytes, if you reduce the quality to make it 20kbytes then it will render faster when loading from SPIFFS.
bodmer
- God Member
- Posts: 978
- Karma: 224 [add]
- https://github.com/Bodmer
I have added Espressif ESP32 processor support to the TFT_eSPI library.
So far this has been tested with an ILI9341 based display.
So far this has been tested with an ILI9341 based display.
I happen to have one of those Kedei screens (two actually) so if I can be to any help that would be awesome. One works on my Pi, I want to use the other for Planespotter and Weatherstation.
I read that it uses 3 pin SPI ( Someone mentioned that here) and afaik they all have the same markings but only the signals and display controllers change with almost every iteration. I know that there are a few guys that already connected some version (V5,4,3,2,1 if I am not mistaken) of these tft's to an Arduino and found out by scope what the timings are. That's a start I guess.
Anyway, what do we not know to make it work?
3 pins SPI
Markings
On the back there are 2 connectors. One has 4 pins, 2 for 5 Vdc and 2 NC.
The other one has 8 pins:
L_CS T_CS IRQ GND
GND CLK MISO MOSI
This guy already interfaced (v5) with the ESp8266 and worked out the init for that version.
Mine is V6.3 so I think we need the Init for it (Maybe use working version on Raspberry for testing?) or I have to find out what controller is on the display and hope someone wrote the init part already. Right?
I read that it uses 3 pin SPI ( Someone mentioned that here) and afaik they all have the same markings but only the signals and display controllers change with almost every iteration. I know that there are a few guys that already connected some version (V5,4,3,2,1 if I am not mistaken) of these tft's to an Arduino and found out by scope what the timings are. That's a start I guess.
Anyway, what do we not know to make it work?
3 pins SPI
Markings
On the back there are 2 connectors. One has 4 pins, 2 for 5 Vdc and 2 NC.
The other one has 8 pins:
L_CS T_CS IRQ GND
GND CLK MISO MOSI
This guy already interfaced (v5) with the ESp8266 and worked out the init for that version.
Mine is V6.3 so I think we need the Init for it (Maybe use working version on Raspberry for testing?) or I have to find out what controller is on the display and hope someone wrote the init part already. Right?
Bodmer,
I want to merge Planespotter and the Weather Station so I can switch between them.
I guess for a start is that I merge settings and libraries.
Then write some code so that both "programs" are simultaneous running (in the background I would say).
Then write some code to switch the display to show PS or WS.
Could be by using on-screen button, could be swiping.
Do you think that the esp8266 is capable of executing that or would it be too slow?
I want to merge Planespotter and the Weather Station so I can switch between them.
I guess for a start is that I merge settings and libraries.
Then write some code so that both "programs" are simultaneous running (in the background I would say).
Then write some code to switch the display to show PS or WS.
Could be by using on-screen button, could be swiping.
Do you think that the esp8266 is capable of executing that or would it be too slow?
Full pinout of the Waveshare/knockof. If someone wants to make a Waveshare<>ESP pinout that would be awesome. I had to make a lot of guesses today and it's not working (Sometimes with some ocassional flickering and gibberish on the serial). So if you want a free beer (or two) please tell me how to wire this puppy up.
bodmer
- God Member
- Posts: 978
- Karma: 224 [add]
- https://github.com/Bodmer
Hello Bodmer,Try the attached version. It is not perfect (some text position issues) but it should work OK. It is for a 480x320 screen.
I got one of the raspberry pi displays working with the demo code but am having a problem getting the Plane spotter to work, have you gotten it to work on one of these displays? I is using the ILI9486 #5 driver.
Regards,
Stan
bodmer
- God Member
- Posts: 978
- Karma: 224 [add]
- https://github.com/Bodmer
Do you think that the esp8266 is capable of executing that or would it be too slow?It should run just as fast as only one screen needs to be handled at a time.
bodmer
- God Member
- Posts: 978
- Karma: 224 [add]
- https://github.com/Bodmer
Full pinout of the Waveshare/knockof. If someone wants to make a Waveshare<>ESP pinout that would be awesome. I had to make a lot of guesses today and it's not working (Sometimes with some ocassional flickering and gibberish on the serial). So if you want a free beer (or two) please tell me how to wire this puppy up.The image attached appears to be corrupted so is not much use.
With reference to the image in post #103 and assuming a ESP8266 NodeMCU is used:
+5V =>Vin (5V)
GND => GND
MOSI => pin D7
SCK => pin D5
DC => pin D3
CS => pin D8
RST => pin D4
TP_CS => 3.3V (Touch screen disabled)
Run with SPI rate at 20MHz, so for example call up:
#include <User_Setups/Setup5_RPi_ILI9486.h>
in the "User_Setup_Select.h" file within the library.
0 comentarios:
Publicar un comentario