Hallo Zusammen, ich möchte euch gerne eine Anleitung zum Bau einer Bushaltestelle mit TFT Displays geben. Dafür habe ich eine Haltestelle im CAD gezeichnet, welche ausgedruckt werden kann. Hier passen 2x 0,96 TFT Displays hinein. Mit ein wenig Farbe und dünner Klarsichtfolie für die Fenster lässt sich die Haltestelle noch etwas aufpolieren. Aus dünnem Farbkarton habe ich noch Passepartouts für die Displays geschnitten.
Angesteuert wird das Ganze mit einem Arduino Mega und der UTFT Library. Ich hoffe das das Video euch zum Nachbauen anregt...
// Initialize display // Library only supports software SPI at this time //NOTE: support DUE , MEGA , UNO //SDI=11 SCL=13 /CS =10 /RST=8 D/C=9 UTFT myGLCD(ST7735S_4L_80160,11,13,10,8,9); //LCD: 4Line serial interface SDI SCL /CS /RST D/C NOTE:Only support DUE MEGA UNO
Hallo Oliver und Michael, erst einmal danke für euer Lob. Ich habe es mit dem Arduino Mini, Nano und Uno ausprobiert. Prinzipiell kann man alle benutzen. Für diese Arduinos passt allerdings nur eine Grafik in den Speicher. Deswegen bin ich dann auf den Mega gegangen. Ich habe zuhause das gleiche Display noch einmal mit einem SD-Karten Slot liegen. Da kann man dann die Bilder drauf speichern. Dafür wird allerdings eine andere Library benutzt. Das muss ich bei Gelegenheit mal ausprobieren...
---------------------------------------------------- Viele Grüße aus dem Norden
Hallo Zusammen, ich habe inzwischen mal das TFT Display mit integrierter SD Karte ausprobiert. Die Darstellung ist genauso klasse. Leider zeigen die Fotos nie die wirkliche Qualität. Für dieses Display wird allerdings eine andere Library verwendet. Die ST7735 Lib konnte man sich direkt nach dem Kauf beim chinesischen Verkäufer herunter laden.
Die Anschlüsse RST und LED werden nicht verwendet. Die Anschlüsse DC, TFTCS und SDCS können frei gewählt werden, wenn sie entsprechend im Sketch definiert werden.
/*************************************************** This is a library for the OPEN-MART 0.96INCH IPS TFT LCD using software SPI port and the micro SD card module use hardware SPI port. Modified by OPEN-SMART Team.
OPEN-MART 0.96INCH IPS TFT LCD ----> https://www.aliexpress.com/store/product/OPEN-SMART-0-96-inch-160-80-IPS-TFT-LCD-Display-with-MicroSD-Card-Socket-Breakout/1199788_32967177796.html?spm=2114.12010608.0.0.2ca348ecamDOIG ----> https://www.aliexpress.com/store/product/OPEN-SMART-3-3V-0-96-inch-160-80-IPS-TFT-LCD-Display-Breakout-Board-Module/1199788_32970036085.html?spm=a2g1y.12024536.productList_1552059.pic_1 OPEN-SMART UNO R3 Air: ----> https://www.aliexpress.com/store/product/UNO-R3-Air-ATMEGA328P-CH340-Development-Board-with-USB-Cable-for-Arduino-UNO-R3-Easy-Plug/1199788_32958196980.html?spm=2114.12010615.8148356.42.15401964msfbay OPEN-SMART Micro SD Card Module: ----> https://www.aliexpress.com/store/product/Micro-SD-Card-Module-TF-Card-Reader-for-Arduino-RPi-AVR-SPI-Interface-3-3V-5V/1199788_32787679017.html?spm=2114.12010615.8148356.1.60032a9dumzoAf This is a library for the Adafruit 1.8" SPI display.
This library works with the Adafruit 1.8" TFT Breakout w/SD card ----> http://www.adafruit.com/products/358 The 1.8" TFT shield ----> https://www.adafruit.com/product/802 The 1.44" TFT breakout ----> https://www.adafruit.com/product/2088 as well as Adafruit raw 1.8" TFT display ----> http://www.adafruit.com/products/618
Check out the links above for our tutorials and wiring diagrams These displays use SPI to communicate, 4 or 5 pins are required to interface (RST is optional) Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries. MIT license, all text above must be included in any redistribution ****************************************************/
#define SD_CS 4 // Chip select line for SD card // TFT display and SD card will share the hardware SPI interface. // Hardware SPI pins are specific to the Arduino board type and // cannot be remapped to alternate pins. For Arduino Uno, // Duemilanove, etc., pin 11 = MOSI, pin 12 = MISO, pin 13 = SCK. #define TFT_RST -1 //If you use OPEN-SMART IPS TFT with Auto-reset IC onboard, you can set to -1 and do not need connect RST pin. //Or set to -1 and connect to Arduino RESET pin #define TFT_CS 10 // Chip select line for TFT display #define TFT_DC 8 // Data/command line for TFT
// Option 1 (recommended): must use the hardware SPI pins // (for UNO thats SCLK = 13 and SDA = 11) and pin 10 must be // an output. This is much faster // For 0.96", 1.44" and 1.8" TFT with ST7735 use Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// Option 2: use any pins but a little slower! //#define TFT_SCLK A2 // set these to be whatever pins you like! //#define TFT_MOSI A3 // set these to be whatever pins you like! //Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
void setup(void) { Serial.begin(9600);
while (!Serial) { delay(10); // wait for serial console }
// Use this initializer if you're using a 1.8" TFT //tft.initR(INITR_BLACKTAB);
// Use this initializer (uncomment) if you're using a 1.44" TFT //tft.initR(INITR_144GREENTAB);
// Use this initializer (uncomment) if you're using a 0.96" 180x60 TFT tft.initR(INITR_MINI160x80); // initialize a ST7735S chip, mini display
// Use this initializer (uncomment) if you're using a 1.54" 240x240 TFT // tft.init(240, 240); // initialize a ST7789 chip, 240x240 pixels tft.invertDisplay(true); tft.fillScreen(ST77XX_BLUE);
Serial.print("Initializing SD card..."); if (!SD.begin(SD_CS)) { Serial.println("failed!"); return; } Serial.println("OK!");
// This function opens a Windows Bitmap (BMP) file and // displays it at the given coordinates. It's sped up // by reading many pixels worth of data at a time // (rather than pixel by pixel). Increasing the buffer // size takes more of the Arduino's precious RAM but // makes loading a little faster. 20 pixels seems a // good balance.
File bmpFile; int bmpWidth, bmpHeight; // W+H in pixels uint8_t bmpDepth; // Bit depth (currently must be 24) uint32_t bmpImageoffset; // Start of image data in file uint32_t rowSize; // Not always = bmpWidth; may have padding uint8_t sdbuffer[3*BUFFPIXEL]; // pixel buffer (R+G+B per pixel) uint8_t buffidx = sizeof(sdbuffer); // Current position in sdbuffer boolean goodBmp = false; // Set to true on valid header parse boolean flip = true; // BMP is stored bottom-to-top int w, h, row, col; uint8_t r, g, b; uint32_t pos = 0, startTime = millis();
// BMP rows are padded (if needed) to 4-byte boundary rowSize = (bmpWidth * 3 + 3) & ~3;
// If bmpHeight is negative, image is in top-down order. // This is not canon but has been observed in the wild. if(bmpHeight < 0) { bmpHeight = -bmpHeight; flip = false; }
// Crop area to be loaded w = bmpWidth; h = bmpHeight; if((x+w-1) >= tft.width()) w = tft.width() - x; if((y+h-1) >= tft.height()) h = tft.height() - y;
// Set TFT address window to clipped image bounds tft.startWrite(); tft.setAddrWindow(x, y, w, h);
for (row=0; row<h; row++) { // For each scanline...
// Seek to start of scan line. It might seem labor- // intensive to be doing this on every line, but this // method covers a lot of gritty details like cropping // and scanline padding. Also, the seek only takes // place if the file position actually needs to change // (avoids a lot of cluster math in SD library). if(flip) // Bitmap is stored bottom-to-top order (normal BMP) pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize; else // Bitmap is stored top-to-bottom pos = bmpImageoffset + row * rowSize; if(bmpFile.position() != pos) { // Need seek? tft.endWrite(); bmpFile.seek(pos); buffidx = sizeof(sdbuffer); // Force buffer reload }
for (col=0; col<w; col++) { // For each pixel... // Time to read more pixel data? if (buffidx >= sizeof(sdbuffer)) { // Indeed bmpFile.read(sdbuffer, sizeof(sdbuffer)); buffidx = 0; // Set index to beginning tft.startWrite(); }
// Convert pixel from BMP to TFT format, push to display b = sdbuffer[buffidx++]; g = sdbuffer[buffidx++]; r = sdbuffer[buffidx++]; tft.pushColor(tft.color565(r,g,b)); } // end pixel } // end scanline tft.endWrite(); Serial.print(F("Loaded in ")); Serial.print(millis() - startTime); Serial.println(" ms"); } // end goodBmp } }
bmpFile.close(); if(!goodBmp) Serial.println(F("BMP format not recognized.")); }
// These read 16- and 32-bit types from the SD card file. // BMP data is stored little-endian, Arduino is little-endian too. // May need to reverse subscript order if porting elsewhere.
Aufgrund eingeschränkter Benutzerrechte werden nur die Namen der Dateianhänge angezeigt Jetzt anmelden!
[OPEN-SMART] 0.96INCH IPS TFT LCD with SD After date of 20191210.zip
zuerst einmal vielen Dank für die Bereitstellung des Codes.
Nun zu meiner Frage, grundsätzlich funktioniert das ganze, Verkabelung sollte richtig sein, nur kommen die Bilder alle als Negativ Bild. Woran könnte das liegen? habe nun schon das 3. Display probiert überall das gleiche Bild. Kennst Du das Problem oder kannst du da helfen?
Vielleicht verwendest du ein anderes Display. Versuch doch einfach mal Zeile 85 auf "False" zu setzen (insofern du ein 1.54"-Display mit 240x240 verwendest und auch initialisierst). Du hast aber schon die Optionen, die du nicht verwendest auskommentiert, bzw. für die verwendeten die Auskommentierung entfernt?
Moin lightning, welches Display versuchst du gerade zum laufen zu bringen. Mit oder ohne SD Karte. Von welchem Hersteller hast du die Displays gekauft?
---------------------------------------------------- Viele Grüße aus dem Norden