Wyświetlacz TFT 1.8” 128×160 ST7735S


Ten artykuł przedstawi Ci krok po kroku w jaki sposób obsłużyć wyświetlacz TFT przy użyciu Arduino.

A więc zacznijmy od listy potrzebnych rzeczy:

  • Wyświetlacz TFT 1.8” 128×160 ST7735S  np ten
  • Arduino
  • Przewody
  • Kartę SD (opcjonalnie, konieczne do wykonania jednego z przykładów)

A następnie bibliotek które musimy pobrać i zainstalować, Adafruit GFX oraz Adafruit ST7735, wykorzystamy także bibliotekę która jest domyślnie zainstalowana z Arduino IDE, bibliotekę SD.

Pierwszy przykład:

Jako pierwszy przykład wykonamy przykład który wyświetli nam tekst oraz kilka animacji na wyświetlaczu.

1.Podłączenie wyświetlacza:

PIN wyświetlacza PIN Arduino Komentarz
LED 0V -5V Zmiana napięcia spowoduje zmianę jasności podświetlenia
SCK SCK (pin 13) Pin w nawiasie został podany dla płytki Arduino UNO
w innych płytkach pin może być inny
SDA MOSI (pin 11) Pin w nawiasie został podany dla płytki Arduino UNO
w innych płytkach pin może być inny
A0 pin 8 Pin można zmienić w programie (#define TFT_DC     8)
RESET pin 9 Pin można zmienić w programie (#define TFT_RST    9)
CS pin 10 Pin można zmienić w programie (#define TFT_CS     10)
GND GND
VCC 3.3V lub 5V Napięcie zasilające

 

Połączenie u mnie wygląda w ten sposób:

2.Program który teraz wgramy jest to przykład z biblioteki Adafruit, a nazywa się graphicstest.

[pastacode lang=”c” manual=”%2F***************************************************%0A%20%20This%20is%20a%20library%20for%20the%20Adafruit%201.8%22%20SPI%20display.%0A%0AThis%20library%20works%20with%20the%20Adafruit%201.8%22%20TFT%20Breakout%20w%2FSD%20card%0A%20%20—-%3E%20http%3A%2F%2Fwww.adafruit.com%2Fproducts%2F358%0AThe%201.8%22%20TFT%20shield%0A%20%20—-%3E%20https%3A%2F%2Fwww.adafruit.com%2Fproduct%2F802%0AThe%201.44%22%20TFT%20breakout%0A%20%20—-%3E%20https%3A%2F%2Fwww.adafruit.com%2Fproduct%2F2088%0Aas%20well%20as%20Adafruit%20raw%201.8%22%20TFT%20display%0A%20%20—-%3E%20http%3A%2F%2Fwww.adafruit.com%2Fproducts%2F618%0A%0A%20%20Check%20out%20the%20links%20above%20for%20our%20tutorials%20and%20wiring%20diagrams%0A%20%20These%20displays%20use%20SPI%20to%20communicate%2C%204%20or%205%20pins%20are%20required%20to%0A%20%20interface%20(RST%20is%20optional)%0A%20%20Adafruit%20invests%20time%20and%20resources%20providing%20this%20open%20source%20code%2C%0A%20%20please%20support%20Adafruit%20and%20open-source%20hardware%20by%20purchasing%0A%20%20products%20from%20Adafruit!%0A%0A%20%20Written%20by%20Limor%20Fried%2FLadyada%20for%20Adafruit%20Industries.%0A%20%20MIT%20license%2C%20all%20text%20above%20must%20be%20included%20in%20any%20redistribution%0A%20****************************************************%2F%0A%0A%23include%20%3CAdafruit_GFX.h%3E%20%20%20%20%2F%2F%20Core%20graphics%20library%0A%23include%20%3CAdafruit_ST7735.h%3E%20%2F%2F%20Hardware-specific%20library%0A%23include%20%3CSPI.h%3E%0A%0A%0A%2F%2F%20For%20the%20breakout%2C%20you%20can%20use%20any%202%20or%203%20pins%0A%2F%2F%20These%20pins%20will%20also%20work%20for%20the%201.8%22%20TFT%20shield%0A%23define%20TFT_CS%20%20%20%20%2010%0A%23define%20TFT_RST%20%20%20%209%20%20%2F%2F%20you%20can%20also%20connect%20this%20to%20the%20Arduino%20reset%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20in%20which%20case%2C%20set%20this%20%23define%20pin%20to%200!%0A%23define%20TFT_DC%20%20%20%20%208%0A%0A%2F%2F%20Option%201%20(recommended)%3A%20must%20use%20the%20hardware%20SPI%20pins%0A%2F%2F%20(for%20UNO%20thats%20sclk%20%3D%2013%20and%20sid%20%3D%2011)%20and%20pin%2010%20must%20be%0A%2F%2F%20an%20output.%20This%20is%20much%20faster%20-%20also%20required%20if%20you%20want%0A%2F%2F%20to%20use%20the%20microSD%20card%20(see%20the%20image%20drawing%20example)%0AAdafruit_ST7735%20tft%20%3D%20Adafruit_ST7735(TFT_CS%2C%20%20TFT_DC%2C%20TFT_RST)%3B%0A%0A%2F%2F%20Option%202%3A%20use%20any%20pins%20but%20a%20little%20slower!%0A%23define%20TFT_SCLK%2013%20%20%20%2F%2F%20set%20these%20to%20be%20whatever%20pins%20you%20like!%0A%23define%20TFT_MOSI%2011%20%20%20%2F%2F%20set%20these%20to%20be%20whatever%20pins%20you%20like!%0A%2F%2FAdafruit_ST7735%20tft%20%3D%20Adafruit_ST7735(TFT_CS%2C%20TFT_DC%2C%20TFT_MOSI%2C%20TFT_SCLK%2C%20TFT_RST)%3B%0A%0A%0Afloat%20p%20%3D%203.1415926%3B%0A%0Avoid%20setup(void)%20%7B%0A%20%20Serial.begin(9600)%3B%0A%20%20Serial.print(%22Hello!%20ST7735%20TFT%20Test%22)%3B%0A%0A%20%20%2F%2F%20Use%20this%20initializer%20if%20you’re%20using%20a%201.8%22%20TFT%0A%20%20tft.initR(INITR_BLACKTAB)%3B%20%20%20%2F%2F%20initialize%20a%20ST7735S%20chip%2C%20black%20tab%0A%0A%20%20%2F%2F%20Use%20this%20initializer%20(uncomment)%20if%20you’re%20using%20a%201.44%22%20TFT%0A%20%20%2F%2Ftft.initR(INITR_144GREENTAB)%3B%20%20%20%2F%2F%20initialize%20a%20ST7735S%20chip%2C%20black%20tab%0A%0A%20%20Serial.println(%22Initialized%22)%3B%0A%0A%20%20uint16_t%20time%20%3D%20millis()%3B%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20time%20%3D%20millis()%20-%20time%3B%0A%0A%20%20Serial.println(time%2C%20DEC)%3B%0A%20%20delay(500)%3B%0A%0A%20%20%2F%2F%20large%20block%20of%20text%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20testdrawtext(%22Lorem%20ipsum%20dolor%20sit%20amet%2C%20consectetur%20adipiscing%20elit.%20Curabitur%20adipiscing%20ante%20sed%20nibh%20tincidunt%20feugiat.%20Maecenas%20enim%20massa%2C%20fringilla%20sed%20malesuada%20et%2C%20malesuada%20sit%20amet%20turpis.%20Sed%20porttitor%20neque%20ut%20ante%20pretium%20vitae%20malesuada%20nunc%20bibendum.%20Nullam%20aliquet%20ultrices%20massa%20eu%20hendrerit.%20Ut%20sed%20nisi%20lorem.%20In%20vestibulum%20purus%20a%20tortor%20imperdiet%20posuere.%20%22%2C%20ST7735_WHITE)%3B%0A%20%20delay(1000)%3B%0A%0A%20%20%2F%2F%20tft%20print%20function!%0A%20%20tftPrintTest()%3B%0A%20%20delay(4000)%3B%0A%0A%20%20%2F%2F%20a%20single%20pixel%0A%20%20tft.drawPixel(tft.width()%2F2%2C%20tft.height()%2F2%2C%20ST7735_GREEN)%3B%0A%20%20delay(500)%3B%0A%0A%20%20%2F%2F%20line%20draw%20test%0A%20%20testlines(ST7735_YELLOW)%3B%0A%20%20delay(500)%3B%0A%0A%20%20%2F%2F%20optimized%20lines%0A%20%20testfastlines(ST7735_RED%2C%20ST7735_BLUE)%3B%0A%20%20delay(500)%3B%0A%0A%20%20testdrawrects(ST7735_GREEN)%3B%0A%20%20delay(500)%3B%0A%0A%20%20testfillrects(ST7735_YELLOW%2C%20ST7735_MAGENTA)%3B%0A%20%20delay(500)%3B%0A%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20testfillcircles(10%2C%20ST7735_BLUE)%3B%0A%20%20testdrawcircles(10%2C%20ST7735_WHITE)%3B%0A%20%20delay(500)%3B%0A%0A%20%20testroundrects()%3B%0A%20%20delay(500)%3B%0A%0A%20%20testtriangles()%3B%0A%20%20delay(500)%3B%0A%0A%20%20mediabuttons()%3B%0A%20%20delay(500)%3B%0A%0A%20%20Serial.println(%22done%22)%3B%0A%20%20delay(1000)%3B%0A%7D%0A%0Avoid%20loop()%20%7B%0A%20%20tft.invertDisplay(true)%3B%0A%20%20delay(500)%3B%0A%20%20tft.invertDisplay(false)%3B%0A%20%20delay(500)%3B%0A%7D%0A%0Avoid%20testlines(uint16_t%20color)%20%7B%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20for%20(int16_t%20x%3D0%3B%20x%20%3C%20tft.width()%3B%20x%2B%3D6)%20%7B%0A%20%20%20%20tft.drawLine(0%2C%200%2C%20x%2C%20tft.height()-1%2C%20color)%3B%0A%20%20%7D%0A%20%20for%20(int16_t%20y%3D0%3B%20y%20%3C%20tft.height()%3B%20y%2B%3D6)%20%7B%0A%20%20%20%20tft.drawLine(0%2C%200%2C%20tft.width()-1%2C%20y%2C%20color)%3B%0A%20%20%7D%0A%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20for%20(int16_t%20x%3D0%3B%20x%20%3C%20tft.width()%3B%20x%2B%3D6)%20%7B%0A%20%20%20%20tft.drawLine(tft.width()-1%2C%200%2C%20x%2C%20tft.height()-1%2C%20color)%3B%0A%20%20%7D%0A%20%20for%20(int16_t%20y%3D0%3B%20y%20%3C%20tft.height()%3B%20y%2B%3D6)%20%7B%0A%20%20%20%20tft.drawLine(tft.width()-1%2C%200%2C%200%2C%20y%2C%20color)%3B%0A%20%20%7D%0A%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20for%20(int16_t%20x%3D0%3B%20x%20%3C%20tft.width()%3B%20x%2B%3D6)%20%7B%0A%20%20%20%20tft.drawLine(0%2C%20tft.height()-1%2C%20x%2C%200%2C%20color)%3B%0A%20%20%7D%0A%20%20for%20(int16_t%20y%3D0%3B%20y%20%3C%20tft.height()%3B%20y%2B%3D6)%20%7B%0A%20%20%20%20tft.drawLine(0%2C%20tft.height()-1%2C%20tft.width()-1%2C%20y%2C%20color)%3B%0A%20%20%7D%0A%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20for%20(int16_t%20x%3D0%3B%20x%20%3C%20tft.width()%3B%20x%2B%3D6)%20%7B%0A%20%20%20%20tft.drawLine(tft.width()-1%2C%20tft.height()-1%2C%20x%2C%200%2C%20color)%3B%0A%20%20%7D%0A%20%20for%20(int16_t%20y%3D0%3B%20y%20%3C%20tft.height()%3B%20y%2B%3D6)%20%7B%0A%20%20%20%20tft.drawLine(tft.width()-1%2C%20tft.height()-1%2C%200%2C%20y%2C%20color)%3B%0A%20%20%7D%0A%7D%0A%0Avoid%20testdrawtext(char%20*text%2C%20uint16_t%20color)%20%7B%0A%20%20tft.setCursor(0%2C%200)%3B%0A%20%20tft.setTextColor(color)%3B%0A%20%20tft.setTextWrap(true)%3B%0A%20%20tft.print(text)%3B%0A%7D%0A%0Avoid%20testfastlines(uint16_t%20color1%2C%20uint16_t%20color2)%20%7B%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20for%20(int16_t%20y%3D0%3B%20y%20%3C%20tft.height()%3B%20y%2B%3D5)%20%7B%0A%20%20%20%20tft.drawFastHLine(0%2C%20y%2C%20tft.width()%2C%20color1)%3B%0A%20%20%7D%0A%20%20for%20(int16_t%20x%3D0%3B%20x%20%3C%20tft.width()%3B%20x%2B%3D5)%20%7B%0A%20%20%20%20tft.drawFastVLine(x%2C%200%2C%20tft.height()%2C%20color2)%3B%0A%20%20%7D%0A%7D%0A%0Avoid%20testdrawrects(uint16_t%20color)%20%7B%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20for%20(int16_t%20x%3D0%3B%20x%20%3C%20tft.width()%3B%20x%2B%3D6)%20%7B%0A%20%20%20%20tft.drawRect(tft.width()%2F2%20-x%2F2%2C%20tft.height()%2F2%20-x%2F2%20%2C%20x%2C%20x%2C%20color)%3B%0A%20%20%7D%0A%7D%0A%0Avoid%20testfillrects(uint16_t%20color1%2C%20uint16_t%20color2)%20%7B%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20for%20(int16_t%20x%3Dtft.width()-1%3B%20x%20%3E%206%3B%20x-%3D6)%20%7B%0A%20%20%20%20tft.fillRect(tft.width()%2F2%20-x%2F2%2C%20tft.height()%2F2%20-x%2F2%20%2C%20x%2C%20x%2C%20color1)%3B%0A%20%20%20%20tft.drawRect(tft.width()%2F2%20-x%2F2%2C%20tft.height()%2F2%20-x%2F2%20%2C%20x%2C%20x%2C%20color2)%3B%0A%20%20%7D%0A%7D%0A%0Avoid%20testfillcircles(uint8_t%20radius%2C%20uint16_t%20color)%20%7B%0A%20%20for%20(int16_t%20x%3Dradius%3B%20x%20%3C%20tft.width()%3B%20x%2B%3Dradius*2)%20%7B%0A%20%20%20%20for%20(int16_t%20y%3Dradius%3B%20y%20%3C%20tft.height()%3B%20y%2B%3Dradius*2)%20%7B%0A%20%20%20%20%20%20tft.fillCircle(x%2C%20y%2C%20radius%2C%20color)%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A%0Avoid%20testdrawcircles(uint8_t%20radius%2C%20uint16_t%20color)%20%7B%0A%20%20for%20(int16_t%20x%3D0%3B%20x%20%3C%20tft.width()%2Bradius%3B%20x%2B%3Dradius*2)%20%7B%0A%20%20%20%20for%20(int16_t%20y%3D0%3B%20y%20%3C%20tft.height()%2Bradius%3B%20y%2B%3Dradius*2)%20%7B%0A%20%20%20%20%20%20tft.drawCircle(x%2C%20y%2C%20radius%2C%20color)%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A%0Avoid%20testtriangles()%20%7B%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20int%20color%20%3D%200xF800%3B%0A%20%20int%20t%3B%0A%20%20int%20w%20%3D%20tft.width()%2F2%3B%0A%20%20int%20x%20%3D%20tft.height()-1%3B%0A%20%20int%20y%20%3D%200%3B%0A%20%20int%20z%20%3D%20tft.width()%3B%0A%20%20for(t%20%3D%200%20%3B%20t%20%3C%3D%2015%3B%20t%2B%3D1)%20%7B%0A%20%20%20%20tft.drawTriangle(w%2C%20y%2C%20y%2C%20x%2C%20z%2C%20x%2C%20color)%3B%0A%20%20%20%20x-%3D4%3B%0A%20%20%20%20y%2B%3D4%3B%0A%20%20%20%20z-%3D4%3B%0A%20%20%20%20color%2B%3D100%3B%0A%20%20%7D%0A%7D%0A%0Avoid%20testroundrects()%20%7B%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20int%20color%20%3D%20100%3B%0A%20%20int%20i%3B%0A%20%20int%20t%3B%0A%20%20for(t%20%3D%200%20%3B%20t%20%3C%3D%204%3B%20t%2B%3D1)%20%7B%0A%20%20%20%20int%20x%20%3D%200%3B%0A%20%20%20%20int%20y%20%3D%200%3B%0A%20%20%20%20int%20w%20%3D%20tft.width()-2%3B%0A%20%20%20%20int%20h%20%3D%20tft.height()-2%3B%0A%20%20%20%20for(i%20%3D%200%20%3B%20i%20%3C%3D%2016%3B%20i%2B%3D1)%20%7B%0A%20%20%20%20%20%20tft.drawRoundRect(x%2C%20y%2C%20w%2C%20h%2C%205%2C%20color)%3B%0A%20%20%20%20%20%20x%2B%3D2%3B%0A%20%20%20%20%20%20y%2B%3D3%3B%0A%20%20%20%20%20%20w-%3D4%3B%0A%20%20%20%20%20%20h-%3D6%3B%0A%20%20%20%20%20%20color%2B%3D1100%3B%0A%20%20%20%20%7D%0A%20%20%20%20color%2B%3D100%3B%0A%20%20%7D%0A%7D%0A%0Avoid%20tftPrintTest()%20%7B%0A%20%20tft.setTextWrap(false)%3B%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20tft.setCursor(0%2C%2030)%3B%0A%20%20tft.setTextColor(ST7735_RED)%3B%0A%20%20tft.setTextSize(1)%3B%0A%20%20tft.println(%22Hello%20World!%22)%3B%0A%20%20tft.setTextColor(ST7735_YELLOW)%3B%0A%20%20tft.setTextSize(2)%3B%0A%20%20tft.println(%22Hello%20World!%22)%3B%0A%20%20tft.setTextColor(ST7735_GREEN)%3B%0A%20%20tft.setTextSize(3)%3B%0A%20%20tft.println(%22Hello%20World!%22)%3B%0A%20%20tft.setTextColor(ST7735_BLUE)%3B%0A%20%20tft.setTextSize(4)%3B%0A%20%20tft.print(1234.567)%3B%0A%20%20delay(1500)%3B%0A%20%20tft.setCursor(0%2C%200)%3B%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20tft.setTextColor(ST7735_WHITE)%3B%0A%20%20tft.setTextSize(0)%3B%0A%20%20tft.println(%22Hello%20World!%22)%3B%0A%20%20tft.setTextSize(1)%3B%0A%20%20tft.setTextColor(ST7735_GREEN)%3B%0A%20%20tft.print(p%2C%206)%3B%0A%20%20tft.println(%22%20Want%20pi%3F%22)%3B%0A%20%20tft.println(%22%20%22)%3B%0A%20%20tft.print(8675309%2C%20HEX)%3B%20%2F%2F%20print%208%2C675%2C309%20out%20in%20HEX!%0A%20%20tft.println(%22%20Print%20HEX!%22)%3B%0A%20%20tft.println(%22%20%22)%3B%0A%20%20tft.setTextColor(ST7735_WHITE)%3B%0A%20%20tft.println(%22Sketch%20has%20been%22)%3B%0A%20%20tft.println(%22running%20for%3A%20%22)%3B%0A%20%20tft.setTextColor(ST7735_MAGENTA)%3B%0A%20%20tft.print(millis()%20%2F%201000)%3B%0A%20%20tft.setTextColor(ST7735_WHITE)%3B%0A%20%20tft.print(%22%20seconds.%22)%3B%0A%7D%0A%0Avoid%20mediabuttons()%20%7B%0A%20%20%2F%2F%20play%0A%20%20tft.fillScreen(ST7735_BLACK)%3B%0A%20%20tft.fillRoundRect(25%2C%2010%2C%2078%2C%2060%2C%208%2C%20ST7735_WHITE)%3B%0A%20%20tft.fillTriangle(42%2C%2020%2C%2042%2C%2060%2C%2090%2C%2040%2C%20ST7735_RED)%3B%0A%20%20delay(500)%3B%0A%20%20%2F%2F%20pause%0A%20%20tft.fillRoundRect(25%2C%2090%2C%2078%2C%2060%2C%208%2C%20ST7735_WHITE)%3B%0A%20%20tft.fillRoundRect(39%2C%2098%2C%2020%2C%2045%2C%205%2C%20ST7735_GREEN)%3B%0A%20%20tft.fillRoundRect(69%2C%2098%2C%2020%2C%2045%2C%205%2C%20ST7735_GREEN)%3B%0A%20%20delay(500)%3B%0A%20%20%2F%2F%20play%20color%0A%20%20tft.fillTriangle(42%2C%2020%2C%2042%2C%2060%2C%2090%2C%2040%2C%20ST7735_BLUE)%3B%0A%20%20delay(50)%3B%0A%20%20%2F%2F%20pause%20color%0A%20%20tft.fillRoundRect(39%2C%2098%2C%2020%2C%2045%2C%205%2C%20ST7735_RED)%3B%0A%20%20tft.fillRoundRect(69%2C%2098%2C%2020%2C%2045%2C%205%2C%20ST7735_RED)%3B%0A%20%20%2F%2F%20play%20color%0A%20%20tft.fillTriangle(42%2C%2020%2C%2042%2C%2060%2C%2090%2C%2040%2C%20ST7735_GREEN)%3B%0A%7D” message=”” highlight=”” provider=”manual”/]

Po wgraniu kodu wyświetlacz powinien wyświetlić taki sam obraz jak na poniższym nagraniu.

 

Drugi przykład:

Jako drugi przykład wykonamy przykład który wyświetli nam zdjęcie z karty SD.

1.Podłączenie wyświetlacza i katy SD:

Wyświetlacz pozostawiamy podpięty w taki sam sposób jak w pierwszym przykładzie, oraz podpinamy piny od karty SD w ten sposób:

PIN wyświetlacza PIN Arduino Komentarz
SD_CS pin 4 Pin można zmienić w programie (#define SD_CS    4)
SD_MOSI MOSI (pin 11) Pin w nawiasie został podany dla płytki Arduino UNO
w innych płytkach pin może być inny
SD_MISO MISO (pin 12) Pin w nawiasie został podany dla płytki Arduino UNO
w innych płytkach pin może być inny
SD_SCK SCK (pin 13) Pin w nawiasie został podany dla płytki Arduino UNO
w innych płytkach pin może być inny

Ja do podpięcia czytnika kart SD skorzystałem ze złącza ICSP znajdującego się na Arduino, a wygląda u mnie to w ten sposób:

2.Program który teraz wgramy jest to zmodyfikowany przykład z biblioteki Adafruit.

[pastacode lang=”c” manual=”%23include%20%3CAdafruit_GFX.h%3E%0A%23include%20%3CAdafruit_ST7735.h%3E%0A%23include%20%3CSPI.h%3E%0A%23include%20%3CSD.h%3E%0A%23define%20TFT_CS%20%2010%0A%23define%20TFT_RST%20%209%0A%23define%20TFT_DC%20%20%208%0A%23define%20SD_CS%20%20%20%204%0AAdafruit_ST7735%20tft%20%3D%20Adafruit_ST7735(TFT_CS%2C%20TFT_DC%2C%20TFT_RST)%3B%0Avoid%20setup(void)%20%7B%0A%20%20Serial.begin(9600)%3B%0A%20%20tft.initR(INITR_BLACKTAB)%3B%0A%20%20Serial.print(%22Initializing%20SD%20card…%22)%3B%0A%20%20if%20(!SD.begin(SD_CS))%20%7B%0A%20%20%20%20Serial.println(%22failed!%22)%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%20%20Serial.println(%22OK!%22)%3B%0A%7D%0Avoid%20loop()%20%7B%0A%20%20bmpDraw(%221.bmp%22%2C%200%2C%200)%3B%0A%20%20delay(5000)%3B%0A%20%20bmpDraw(%222.bmp%22%2C%200%2C%200)%3B%0A%20%20delay(5000)%3B%0A%20%20bmpDraw(%223.bmp%22%2C%200%2C%200)%3B%0A%20%20delay(5000)%3B%0A%7D%0A%23define%20BUFFPIXEL%2020%0Avoid%20bmpDraw(char%20*filename%2C%20uint8_t%20x%2C%20uint8_t%20y)%20%7B%0A%20%20File%20%20%20%20%20bmpFile%3B%0A%20%20int%20%20%20%20%20%20bmpWidth%2C%20bmpHeight%3B%0A%20%20uint8_t%20%20bmpDepth%3B%0A%20%20uint32_t%20bmpImageoffset%3B%0A%20%20uint32_t%20rowSize%3B%0A%20%20uint8_t%20%20sdbuffer%5B3*BUFFPIXEL%5D%3B%0A%20%20uint8_t%20%20buffidx%20%3D%20sizeof(sdbuffer)%3B%0A%20%20boolean%20%20goodBmp%20%3D%20false%3B%0A%20%20boolean%20%20flip%20%20%20%20%3D%20true%3B%0A%20%20int%20%20%20%20%20%20w%2C%20h%2C%20row%2C%20col%3B%0A%20%20uint8_t%20%20r%2C%20g%2C%20b%3B%0A%20%20uint32_t%20pos%20%3D%200%2C%20startTime%20%3D%20millis()%3B%0A%20%20if((x%20%3E%3D%20tft.width())%20%7C%7C%20(y%20%3E%3D%20tft.height()))%20return%3B%0A%20%20Serial.println()%3B%0A%20%20Serial.print(%22Loading%20image%20’%22)%3B%0A%20%20Serial.print(filename)%3B%0A%20%20Serial.println(‘%5C”)%3B%0A%20%20if%20((bmpFile%20%3D%20SD.open(filename))%20%3D%3D%20NULL)%20%7B%0A%20%20%20%20Serial.print(%22File%20not%20found%22)%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%20%20if(read16(bmpFile)%20%3D%3D%200x4D42)%20%7B%0A%20%20%20%20Serial.print(%22File%20size%3A%20%22)%3B%20Serial.println(read32(bmpFile))%3B%0A%20%20%20%20(void)read32(bmpFile)%3B%0A%20%20%20%20bmpImageoffset%20%3D%20read32(bmpFile)%3B%20%2F%2F%20Start%20of%20image%20data%0A%20%20%20%20Serial.print(%22Image%20Offset%3A%20%22)%3B%20Serial.println(bmpImageoffset%2C%20DEC)%3B%0A%20%20%20%20Serial.print(%22Header%20size%3A%20%22)%3B%20Serial.println(read32(bmpFile))%3B%0A%20%20%20%20bmpWidth%20%20%3D%20read32(bmpFile)%3B%0A%20%20%20%20bmpHeight%20%3D%20read32(bmpFile)%3B%0A%20%20%20%20if(read16(bmpFile)%20%3D%3D%201)%20%7B%0A%20%20%20%20%20%20bmpDepth%20%3D%20read16(bmpFile)%3B%0A%20%20%20%20%20%20Serial.print(%22Bit%20Depth%3A%20%22)%3B%20Serial.println(bmpDepth)%3B%0A%20%20%20%20%20%20if((bmpDepth%20%3D%3D%2024)%20%26%26%20(read32(bmpFile)%20%3D%3D%200))%20%7B%0A%20%20%20%20%20%20%20%20goodBmp%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20Serial.print(%22Image%20size%3A%20%22)%3B%0A%20%20%20%20%20%20%20%20Serial.print(bmpWidth)%3B%0A%20%20%20%20%20%20%20%20Serial.print(‘x’)%3B%0A%20%20%20%20%20%20%20%20Serial.println(bmpHeight)%3B%0A%20%20%20%20%20%20%20%20rowSize%20%3D%20(bmpWidth%20*%203%20%2B%203)%20%26%20~3%3B%0A%20%20%20%20%20%20%20%20if(bmpHeight%20%3C%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20bmpHeight%20%3D%20-bmpHeight%3B%0A%20%20%20%20%20%20%20%20%20%20flip%20%20%20%20%20%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20w%20%3D%20bmpWidth%3B%0A%20%20%20%20%20%20%20%20h%20%3D%20bmpHeight%3B%0A%20%20%20%20%20%20%20%20if((x%2Bw-1)%20%3E%3D%20tft.width())%20%20w%20%3D%20tft.width()%20%20-%20x%3B%0A%20%20%20%20%20%20%20%20if((y%2Bh-1)%20%3E%3D%20tft.height())%20h%20%3D%20tft.height()%20-%20y%3B%0A%20%20%20%20%20%20%20%20tft.setAddrWindow(x%2C%20y%2C%20x%2Bw-1%2C%20y%2Bh-1)%3B%0A%20%20%20%20%20%20%20%20for%20(row%3D0%3B%20row%3Ch%3B%20row%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if(flip)%0A%20%20%20%20%20%20%20%20%20%20%20%20pos%20%3D%20bmpImageoffset%20%2B%20(bmpHeight%20-%201%20-%20row)%20*%20rowSize%3B%0A%20%20%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20pos%20%3D%20bmpImageoffset%20%2B%20row%20*%20rowSize%3B%0A%20%20%20%20%20%20%20%20%20%20if(bmpFile.position()%20!%3D%20pos)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20bmpFile.seek(pos)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20buffidx%20%3D%20sizeof(sdbuffer)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20for%20(col%3D0%3B%20col%3Cw%3B%20col%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(buffidx%20%3E%3D%20sizeof(sdbuffer))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20bmpFile.read(sdbuffer%2C%20sizeof(sdbuffer))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20buffidx%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20b%20%3D%20sdbuffer%5Bbuffidx%2B%2B%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20g%20%3D%20sdbuffer%5Bbuffidx%2B%2B%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20r%20%3D%20sdbuffer%5Bbuffidx%2B%2B%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20tft.pushColor(tft.Color565(r%2Cg%2Cb))%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20Serial.print(%22Loaded%20in%20%22)%3B%0A%20%20%20%20%20%20%20%20Serial.print(millis()%20-%20startTime)%3B%0A%20%20%20%20%20%20%20%20Serial.println(%22%20ms%22)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20bmpFile.close()%3B%0A%20%20if(!goodBmp)%20Serial.println(%22BMP%20format%20not%20recognized.%22)%3B%0A%7D%0Auint16_t%20read16(File%20f)%20%7B%0A%20%20uint16_t%20result%3B%0A%20%20((uint8_t%20*)%26result)%5B0%5D%20%3D%20f.read()%3B%0A%20%20((uint8_t%20*)%26result)%5B1%5D%20%3D%20f.read()%3B%0A%20%20return%20result%3B%0A%7D%0Auint32_t%20read32(File%20f)%20%7B%0A%20%20uint32_t%20result%3B%0A%20%20((uint8_t%20*)%26result)%5B0%5D%20%3D%20f.read()%3B%0A%20%20((uint8_t%20*)%26result)%5B1%5D%20%3D%20f.read()%3B%0A%20%20((uint8_t%20*)%26result)%5B2%5D%20%3D%20f.read()%3B%0A%20%20((uint8_t%20*)%26result)%5B3%5D%20%3D%20f.read()%3B%0A%20%20return%20result%3B%0A%7D” message=”” highlight=”” provider=”manual”/]

3.Plik do umieszczenia na karcie SD.

Zdjęcie które umieścimy na naszej karcie SD musi mieć nazwę identyczną jak ta podana w programie oraz koniecznie format BMP i rozdzielczość 128×160.

Tutaj możesz pobrać paczkę z trzema przykładowymi grafikami POBIERZ, pobrane zdjęcia należy skopiować bezpośrednio na kartę SD.

4.Efekt jaki w ten sposób uzyskamy to zmienianie się po kolei tych trzech grafik co 5 sekund.

        

Myślę że po przeanalizowaniu powyższych przykładów bez problemu poradzisz sobie z wykorzystaniem wyświetlacza, lecz jeśli masz jakieś propozycje co jeszcze dopisać w artykule to napisz nam o tym a postaramy się o tym dopisać

Poprzednia informacja Tworzenie wykresów z użyciem processingu
Kolejna informacja Zapis danych za pomocą ESP do bazy danych MySQL

Brak komentarzy

Zostaw odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *