M5 TFT display initial commit (experimental)
This commit is contained in:
		
							parent
							
								
									62c30a1684
								
							
						
					
					
						commit
						7fcf93a655
					
				| @ -7,33 +7,57 @@ | |||||||
| #if (HAS_DISPLAY) == 1 | #if (HAS_DISPLAY) == 1 | ||||||
| #include <ss_oled.h> | #include <ss_oled.h> | ||||||
| #elif (HAS_DISPLAY) == 2 | #elif (HAS_DISPLAY) == 2 | ||||||
| #include <bb_spi_lcd.h> | #include <TFT_eSPI.h> | ||||||
| #else |  | ||||||
| #error Unknown display type |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #define DISPLAY_PAGES (7) // number of paxcounter display pages
 | #define DISPLAY_PAGES (7) // number of paxcounter display pages
 | ||||||
| 
 | 
 | ||||||
| // settings for display library
 | // settings for OLED display library
 | ||||||
|  | #if (HAS_DISPLAY) == 1 | ||||||
|  | #define MY_FONT_SMALL FONT_SMALL | ||||||
|  | #define MY_FONT_NORMAL FONT_NORMAL | ||||||
|  | #define MY_FONT_LARGE FONT_LARGE | ||||||
|  | #define MY_FONT_STRETCHED FONT_STRETCHED | ||||||
| #define USE_BACKBUFFER 1 | #define USE_BACKBUFFER 1 | ||||||
| 
 |  | ||||||
| // setup display hardware type, default is OLED 128x64
 |  | ||||||
| #ifndef MY_DISPLAY_TYPE |  | ||||||
| #define MY_DISPLAY_TYPE OLED_128x64 |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifdef MY_DISPLAY_ADDR | #ifdef MY_DISPLAY_ADDR | ||||||
| #define OLED_ADDR MY_DISPLAY_ADDR | #define OLED_ADDR MY_DISPLAY_ADDR | ||||||
| #else | #else | ||||||
| #define OLED_ADDR -1 | #define OLED_ADDR -1 | ||||||
| #endif | #endif | ||||||
| #ifndef MY_DISPLAY_INVERT |  | ||||||
| #define MY_DISPLAY_INVERT 0 |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifndef USW_HW_I2C | #ifndef USW_HW_I2C | ||||||
| #define USE_HW_I2C 1 | #define USE_HW_I2C 1 | ||||||
| #endif | #endif | ||||||
|  | #ifndef OLED_FREQUENCY | ||||||
|  | #define OLED_FREQUENCY 400000L | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | // settings for TFT display library
 | ||||||
|  | #elif (HAS_DISPLAY == 2) | ||||||
|  | 
 | ||||||
|  | #define ESP32 | ||||||
|  | 
 | ||||||
|  | #define MY_FONT_SMALL 1 | ||||||
|  | #define MY_FONT_NORMAL 2 | ||||||
|  | #define MY_FONT_LARGE 4 | ||||||
|  | #define MY_FONT_STRETCHED 6 | ||||||
|  | 
 | ||||||
|  | #ifndef MY_DISPLAY_FGCOLOR | ||||||
|  | #define MY_DISPLAY_FGCOLOR TFT_WHITE | ||||||
|  | #endif | ||||||
|  | #ifndef MY_DISPLAY_BGCOLOR | ||||||
|  | #define MY_DISPLAY_BGCOLOR TFT_BLACK | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | // setup display hardware type, default is OLED 128x64
 | ||||||
|  | #ifndef OLED_TYPE | ||||||
|  | #define OLED_TYPE OLED_128x64 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifndef MY_DISPLAY_INVERT | ||||||
|  | #define MY_DISPLAY_INVERT 0 | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| #ifndef MY_DISPLAY_FLIP | #ifndef MY_DISPLAY_FLIP | ||||||
| #define MY_DISPLAY_FLIP 0 | #define MY_DISPLAY_FLIP 0 | ||||||
| @ -46,34 +70,6 @@ | |||||||
| #define MY_DISPLAY_HEIGHT 64 // Height in pixels of OLED-display, must be 64X
 | #define MY_DISPLAY_HEIGHT 64 // Height in pixels of OLED-display, must be 64X
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| // some RGB color definitions
 |  | ||||||
| #define Black 0x0000       /*   0,   0,   0 */ |  | ||||||
| #define Navy 0x000F        /*   0,   0, 128 */ |  | ||||||
| #define DarkGreen 0x03E0   /*   0, 128,   0 */ |  | ||||||
| #define DarkCyan 0x03EF    /*   0, 128, 128 */ |  | ||||||
| #define Maroon 0x7800      /* 128,   0,   0 */ |  | ||||||
| #define Purple 0x780F      /* 128,   0, 128 */ |  | ||||||
| #define Olive 0x7BE0       /* 128, 128,   0 */ |  | ||||||
| #define LightGrey 0xC618   /* 192, 192, 192 */ |  | ||||||
| #define DarkGrey 0x7BEF    /* 128, 128, 128 */ |  | ||||||
| #define Blue 0x001F        /*   0,   0, 255 */ |  | ||||||
| #define Green 0x07E0       /*   0, 255,   0 */ |  | ||||||
| #define Cyan 0x07FF        /*   0, 255, 255 */ |  | ||||||
| #define Red 0xF800         /* 255,   0,   0 */ |  | ||||||
| #define Magenta 0xF81F     /* 255,   0, 255 */ |  | ||||||
| #define Yellow 0xFFE0      /* 255, 255,   0 */ |  | ||||||
| #define White 0xFFFF       /* 255, 255, 255 */ |  | ||||||
| #define Orange 0xFD20      /* 255, 165,   0 */ |  | ||||||
| #define GreenYellow 0xAFE5 /* 173, 255,  47 */ |  | ||||||
| #define Pink 0xF81F |  | ||||||
| 
 |  | ||||||
| #ifndef MY_DISPLAY_FGCOLOR |  | ||||||
| #define MY_DISPLAY_FGCOLOR White |  | ||||||
| #endif |  | ||||||
| #ifndef MY_DISPLAY_BGCOLOR |  | ||||||
| #define MY_DISPLAY_BGCOLOR Black |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| // settings for qr code generator
 | // settings for qr code generator
 | ||||||
| #define QR_VERSION 3     // 29 x 29px
 | #define QR_VERSION 3     // 29 x 29px
 | ||||||
| #define QR_SCALEFACTOR 2 // 29 -> 58x < 64px
 | #define QR_SCALEFACTOR 2 // 29 -> 58x < 64px
 | ||||||
|  | |||||||
| @ -45,7 +45,7 @@ description = Paxcounter is a device for metering passenger flows in realtime. I | |||||||
| 
 | 
 | ||||||
| [common] | [common] | ||||||
| ; for release_version use max. 10 chars total, use any decimal format like "a.b.c" | ; for release_version use max. 10 chars total, use any decimal format like "a.b.c" | ||||||
| release_version = 1.9.982 | release_version = 1.9.983 | ||||||
| ; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running! | ; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running! | ||||||
| ; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose | ; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose | ||||||
| debug_level = 3 | debug_level = 3 | ||||||
| @ -56,15 +56,14 @@ lmicconfigfile = lmic_config.h | |||||||
| platform_espressif32 = espressif32@1.12.0 | platform_espressif32 = espressif32@1.12.0 | ||||||
| monitor_speed = 115200 | monitor_speed = 115200 | ||||||
| upload_speed = 115200 | upload_speed = 115200 | ||||||
| ;upload_port = COM9 |  | ||||||
| lib_deps_lora = | lib_deps_lora = | ||||||
|     MCCI LoRaWAN LMIC library@>=3.1.0 ; MCCI LMIC by Terrill Moore |     MCCI LoRaWAN LMIC library@>=3.1.0 ; MCCI LMIC by Terrill Moore | ||||||
| lib_deps_display = | lib_deps_display = | ||||||
|     ;ss_oled@4.1.1 ; simple and small OLED lib by Larry Bank |     ;ss_oled@4.1.2 ; simple and small OLED lib by Larry Bank | ||||||
|     https://github.com/bitbank2/ss_oled.git |     https://github.com/bitbank2/ss_oled.git | ||||||
|     BitBang_I2C@2.0.1 |     BitBang_I2C@2.0.1 | ||||||
|     QRCode@>=0.0.1 |     QRCode@>=0.0.1 | ||||||
|     bb_spi_lcd@1.1.0 ; LCD TFT driver lib by Larry Bank |     TFT_eSPI | ||||||
| lib_deps_matrix_display = | lib_deps_matrix_display = | ||||||
|     Ultrathin_LED_Matrix@>=1.0.0 |     Ultrathin_LED_Matrix@>=1.0.0 | ||||||
| lib_deps_rgbled = | lib_deps_rgbled = | ||||||
| @ -112,7 +111,7 @@ framework = arduino | |||||||
| board = esp32dev | board = esp32dev | ||||||
| board_build.partitions = min_spiffs.csv | board_build.partitions = min_spiffs.csv | ||||||
| upload_speed = ${common.upload_speed} | upload_speed = ${common.upload_speed} | ||||||
| ;upload_port = ${common.upload_port} | ;upload_port = COM5 | ||||||
| platform = ${common.platform_espressif32} | platform = ${common.platform_espressif32} | ||||||
| lib_deps = ${common.lib_deps_all} | lib_deps = ${common.lib_deps_all} | ||||||
| build_flags = ${common.build_flags_all} | build_flags = ${common.build_flags_all} | ||||||
|  | |||||||
							
								
								
									
										151
									
								
								src/display.cpp
									
									
									
									
									
								
							
							
						
						
									
										151
									
								
								src/display.cpp
									
									
									
									
									
								
							| @ -25,15 +25,16 @@ y = LMIC event message | |||||||
| xx = payload sendqueue length | xx = payload sendqueue length | ||||||
| ab = LMIC spread factor | ab = LMIC spread factor | ||||||
| 
 | 
 | ||||||
| FONT_SMALL:     6x8px = 21 chars / line | MY_FONT_SMALL:     6x8px = 21 chars / line | ||||||
| FONT_NORMAL:    8x8px = 16 chars / line | MY_FONT_NORMAL:    8x8px = 16 chars / line | ||||||
| FONT_STRETCHED: 16x32px = 8 chars / line | MY_FONT_STRETCHED: 16x32px = 8 chars / line | ||||||
| 
 | 
 | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| // Basic Config
 | // Basic Config
 | ||||||
| #include "globals.h" |  | ||||||
| #include <esp_spi_flash.h> // needed for reading ESP32 chip attributes
 | #include <esp_spi_flash.h> // needed for reading ESP32 chip attributes
 | ||||||
|  | #include "globals.h" | ||||||
|  | #include "display.h" | ||||||
| 
 | 
 | ||||||
| // local Tag for logging
 | // local Tag for logging
 | ||||||
| static const char TAG[] = __FILE__; | static const char TAG[] = __FILE__; | ||||||
| @ -49,31 +50,33 @@ QRCode qrcode; | |||||||
| 
 | 
 | ||||||
| #if (HAS_DISPLAY) == 1 | #if (HAS_DISPLAY) == 1 | ||||||
| SSOLED ssoled; | SSOLED ssoled; | ||||||
|  | #elif (HAS_DISPLAY) == 2 | ||||||
|  | TFT_eSPI tft = TFT_eSPI(MY_DISPLAY_WIDTH, MY_DISPLAY_HEIGHT); // Invoke library
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| void dp_setup(int contrast) { | void dp_setup(int contrast) { | ||||||
| 
 | 
 | ||||||
| #if (HAS_DISPLAY) == 1 | #if (HAS_DISPLAY) == 1 // I2C OLED
 | ||||||
|   int rc = oledInit(&ssoled, MY_DISPLAY_TYPE, OLED_ADDR, MY_DISPLAY_FLIP, |   int rc = oledInit(&ssoled, OLED_TYPE, OLED_ADDR, MY_DISPLAY_FLIP, | ||||||
|                     MY_DISPLAY_INVERT, USE_HW_I2C, MY_DISPLAY_SDA, MY_DISPLAY_SCL, |                     MY_DISPLAY_INVERT, USE_HW_I2C, MY_DISPLAY_SDA, | ||||||
|                     MY_DISPLAY_RST, |                     MY_DISPLAY_SCL, MY_DISPLAY_RST, | ||||||
|                     400000L); // use standard I2C bus at 400Khz
 |                     OLED_FREQUENCY); // use standard I2C bus at 400Khz
 | ||||||
|   assert(rc != OLED_NOT_FOUND); |   assert(rc != OLED_NOT_FOUND); | ||||||
| 
 | 
 | ||||||
|   // set display buffer
 |   // set display buffer
 | ||||||
|   oledSetBackBuffer(&ssoled, displaybuf); |   oledSetBackBuffer(&ssoled, displaybuf); | ||||||
| 
 | 
 | ||||||
| #elif (HAS_DISPLAY) == 2 | #elif (HAS_DISPLAY) == 2 // SPI TFT
 | ||||||
| 
 | 
 | ||||||
|   int rc = |   tft.init(); | ||||||
|       spilcdInit(MY_DISPLAY_TYPE, 0, MY_DISPLAY_INVERT, MY_DISPLAY_FLIP, 32000000, |  | ||||||
|                  MY_DISPLAY_CS, MY_DISPLAY_DC, MY_DISPLAY_RST, MY_DISPLAY_BL, |  | ||||||
|                  MY_DISPLAY_MISO, MY_DISPLAY_MOSI, MY_DISPLAY_CLK); |  | ||||||
| 
 | 
 | ||||||
|   assert(rc == 0); |   if (MY_DISPLAY_FLIP) | ||||||
|  |     tft.setRotation(0); | ||||||
|  |   else | ||||||
|  |     tft.setRotation(2); // portrait
 | ||||||
| 
 | 
 | ||||||
|   // set display buffer
 |   if (MY_DISPLAY_INVERT) | ||||||
|   spilcdAllocBackbuffer(); |     tft.invertDisplay(true); // Tell TFT to invert all displayed colours
 | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| @ -85,10 +88,12 @@ void dp_setup(int contrast) { | |||||||
| 
 | 
 | ||||||
| void dp_init(bool verbose) { | void dp_init(bool verbose) { | ||||||
| 
 | 
 | ||||||
|  | #if (HAS_DISPLAY) == 1 // i2c
 | ||||||
|   // block i2c bus access
 |   // block i2c bus access
 | ||||||
|   if (!I2C_MUTEX_LOCK()) |   if (!I2C_MUTEX_LOCK()) | ||||||
|     ESP_LOGV(TAG, "[%0.3f] i2c mutex lock failed", millis() / 1000.0); |     ESP_LOGV(TAG, "[%0.3f] i2c mutex lock failed", millis() / 1000.0); | ||||||
|   else { |   else { | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
|     dp_setup(DISPLAYCONTRAST); |     dp_setup(DISPLAYCONTRAST); | ||||||
| 
 | 
 | ||||||
| @ -131,10 +136,10 @@ void dp_init(bool verbose) { | |||||||
|       dp_printqr(3, 3, deveui); |       dp_printqr(3, 3, deveui); | ||||||
| 
 | 
 | ||||||
|       // display DEVEUI as plain text on the right
 |       // display DEVEUI as plain text on the right
 | ||||||
|       dp_printf(72, 0, FONT_NORMAL, 0, "LORAWAN"); |       dp_printf(72, 0, MY_FONT_NORMAL, 0, "LORAWAN"); | ||||||
|       dp_printf(72, 1, FONT_NORMAL, 0, "DEVEUI:"); |       dp_printf(72, 1, MY_FONT_NORMAL, 0, "DEVEUI:"); | ||||||
|       for (uint8_t i = 0; i <= 3; i++) |       for (uint8_t i = 0; i <= 3; i++) | ||||||
|         dp_printf(80, i + 3, FONT_NORMAL, 0, "%4.4s", deveui + i * 4); |         dp_printf(80, i + 3, MY_FONT_NORMAL, 0, "%4.4s", deveui + i * 4); | ||||||
| 
 | 
 | ||||||
|       // give user some time to read or take picture
 |       // give user some time to read or take picture
 | ||||||
|       dp_dump(displaybuf); |       dp_dump(displaybuf); | ||||||
| @ -147,8 +152,11 @@ void dp_init(bool verbose) { | |||||||
| 
 | 
 | ||||||
|     dp_power(cfg.screenon); // set display off if disabled
 |     dp_power(cfg.screenon); // set display off if disabled
 | ||||||
| 
 | 
 | ||||||
|  | #if (HAS_DISPLAY) == 1  // i2c
 | ||||||
|     I2C_MUTEX_UNLOCK(); // release i2c bus access
 |     I2C_MUTEX_UNLOCK(); // release i2c bus access
 | ||||||
|   }                     // mutex
 |   }                     // mutex
 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| } // dp_init
 | } // dp_init
 | ||||||
| 
 | 
 | ||||||
| void dp_refresh(bool nextPage) { | void dp_refresh(bool nextPage) { | ||||||
| @ -205,7 +213,7 @@ void dp_drawPage(time_t t, bool nextpage) { | |||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|   // line 1/2: pax counter
 |   // line 1/2: pax counter
 | ||||||
|   dp_printf(0, 0, FONT_STRETCHED, 0, "PAX:%-4d", |   dp_printf(0, 0, MY_FONT_STRETCHED, 0, "PAX:%-4d", | ||||||
|             macs.size()); // display number of unique macs total Wifi + BLE
 |             macs.size()); // display number of unique macs total Wifi + BLE
 | ||||||
| 
 | 
 | ||||||
| start: | start: | ||||||
| @ -231,64 +239,64 @@ start: | |||||||
|     // line 3: wifi + bluetooth counters
 |     // line 3: wifi + bluetooth counters
 | ||||||
| #if ((WIFICOUNTER) && (BLECOUNTER)) | #if ((WIFICOUNTER) && (BLECOUNTER)) | ||||||
|     if (cfg.wifiscan) |     if (cfg.wifiscan) | ||||||
|       dp_printf(0, 3, FONT_SMALL, 0, "WIFI:%-5d", macs_wifi); |       dp_printf(0, 3, MY_FONT_SMALL, 0, "WIFI:%-5d", macs_wifi); | ||||||
|     else |     else | ||||||
|       dp_printf(0, 3, FONT_SMALL, 0, "%s", "WIFI:off"); |       dp_printf(0, 3, MY_FONT_SMALL, 0, "%s", "WIFI:off"); | ||||||
|     if (cfg.blescan) |     if (cfg.blescan) | ||||||
|       dp_printf(66, 3, FONT_SMALL, 0, "BLTH:%-5d", macs_ble); |       dp_printf(66, 3, MY_FONT_SMALL, 0, "BLTH:%-5d", macs_ble); | ||||||
|     else |     else | ||||||
|       dp_printf(66, 3, FONT_SMALL, 0, "%s", "BLTH:off"); |       dp_printf(66, 3, MY_FONT_SMALL, 0, "%s", "BLTH:off"); | ||||||
| #elif ((WIFICOUNTER) && (!BLECOUNTER)) | #elif ((WIFICOUNTER) && (!BLECOUNTER)) | ||||||
|     if (cfg.wifiscan) |     if (cfg.wifiscan) | ||||||
|       dp_printf(0, 3, FONT_SMALL, 0, "WIFI:%-5d", macs_wifi); |       dp_printf(0, 3, MY_FONT_SMALL, 0, "WIFI:%-5d", macs_wifi); | ||||||
|     else |     else | ||||||
|       dp_printf(0, 3, FONT_SMALL, 0, "%s", "WIFI:off"); |       dp_printf(0, 3, MY_FONT_SMALL, 0, "%s", "WIFI:off"); | ||||||
| #elif ((!WIFICOUNTER) && (BLECOUNTER)) | #elif ((!WIFICOUNTER) && (BLECOUNTER)) | ||||||
|     if (cfg.blescan) |     if (cfg.blescan) | ||||||
|       dp_printf(0, 3, FONT_SMALL, 0, "BLTH:%-5d", macs_ble); |       dp_printf(0, 3, MY_FONT_SMALL, 0, "BLTH:%-5d", macs_ble); | ||||||
|     else |     else | ||||||
|       dp_printf(0, 3, FONT_SMALL, 0, "%s", "BLTH:off"); |       dp_printf(0, 3, MY_FONT_SMALL, 0, "%s", "BLTH:off"); | ||||||
| #else | #else | ||||||
|     dp_printf(0, 3, FONT_SMALL, 0, "%s", "Sniffer disabled"); |     dp_printf(0, 3, MY_FONT_SMALL, 0, "%s", "Sniffer disabled"); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| // line 4: Battery + GPS status + Wifi channel
 | // line 4: Battery + GPS status + Wifi channel
 | ||||||
| #if (defined BAT_MEASURE_ADC || defined HAS_PMU) | #if (defined BAT_MEASURE_ADC || defined HAS_PMU) | ||||||
|     if (batt_voltage == 0xffff) |     if (batt_voltage == 0xffff) | ||||||
|       dp_printf(0, 4, FONT_SMALL, 0, "%s", "USB    "); |       dp_printf(0, 4, MY_FONT_SMALL, 0, "%s", "USB    "); | ||||||
|     else if (batt_voltage == 0) |     else if (batt_voltage == 0) | ||||||
|       dp_printf(0, 4, FONT_SMALL, 0, "%s", "No batt"); |       dp_printf(0, 4, MY_FONT_SMALL, 0, "%s", "No batt"); | ||||||
|     else |     else | ||||||
|       dp_printf(0, 4, FONT_SMALL, 0, "B:%.2fV", batt_voltage / 1000.0); |       dp_printf(0, 4, MY_FONT_SMALL, 0, "B:%.2fV", batt_voltage / 1000.0); | ||||||
| #endif | #endif | ||||||
| #if (HAS_GPS) | #if (HAS_GPS) | ||||||
|     if (gps_hasfix()) |     if (gps_hasfix()) | ||||||
|       dp_printf(48, 4, FONT_SMALL, 0, "Sats:%.2d", gps.satellites.value()); |       dp_printf(48, 4, MY_FONT_SMALL, 0, "Sats:%.2d", gps.satellites.value()); | ||||||
|     else // if no fix then display Sats value inverse
 |     else // if no fix then display Sats value inverse
 | ||||||
|       dp_printf(48, 4, FONT_SMALL, 1, "Sats:%.2d", gps.satellites.value()); |       dp_printf(48, 4, MY_FONT_SMALL, 1, "Sats:%.2d", gps.satellites.value()); | ||||||
| #endif | #endif | ||||||
|     dp_printf(96, 4, FONT_SMALL, 0, "ch:%02d", channel); |     dp_printf(96, 4, MY_FONT_SMALL, 0, "ch:%02d", channel); | ||||||
| 
 | 
 | ||||||
|     // line 5: RSSI limiter + free memory
 |     // line 5: RSSI limiter + free memory
 | ||||||
|     dp_printf(0, 5, FONT_SMALL, 0, !cfg.rssilimit ? "RLIM:off " : "RLIM:%-4d", |     dp_printf(0, 5, MY_FONT_SMALL, 0, | ||||||
|               cfg.rssilimit); |               !cfg.rssilimit ? "RLIM:off " : "RLIM:%-4d", cfg.rssilimit); | ||||||
|     dp_printf(66, 5, FONT_SMALL, 0, "Mem:%4dKB", getFreeRAM() / 1024); |     dp_printf(66, 5, MY_FONT_SMALL, 0, "Mem:%4dKB", getFreeRAM() / 1024); | ||||||
| 
 | 
 | ||||||
|     // line 6: time + date
 |     // line 6: time + date
 | ||||||
| #if (TIME_SYNC_INTERVAL) | #if (TIME_SYNC_INTERVAL) | ||||||
|     timeState = TimePulseTick ? ' ' : timeSetSymbols[timeSource]; |     timeState = TimePulseTick ? ' ' : timeSetSymbols[timeSource]; | ||||||
|     TimePulseTick = false; |     TimePulseTick = false; | ||||||
| 
 | 
 | ||||||
|     dp_printf(0, 6, FONT_SMALL, 0, "%02d.%3s %4d", day(t), printmonth[month(t)], |     dp_printf(0, 6, MY_FONT_SMALL, 0, "%02d.%3s %4d", day(t), | ||||||
|               year(t)); |               printmonth[month(t)], year(t)); | ||||||
|     dp_printf(72, 6, FONT_SMALL, 0, "%02d:%02d:%02d", hour(t), minute(t), |     dp_printf(72, 6, MY_FONT_SMALL, 0, "%02d:%02d:%02d", hour(t), minute(t), | ||||||
|               second(t)); |               second(t)); | ||||||
| 
 | 
 | ||||||
| // display inverse timeState if clock controller is enabled
 | // display inverse timeState if clock controller is enabled
 | ||||||
| #if (defined HAS_DCF77) || (defined HAS_IF482) | #if (defined HAS_DCF77) || (defined HAS_IF482) | ||||||
|     dp_printf(120, 6, FONT_SMALL, 1, "%c", timeState); |     dp_printf(120, 6, MY_FONT_SMALL, 1, "%c", timeState); | ||||||
| #else | #else | ||||||
|     dp_printf(120, 6, FONT_SMALL, 0, "%c", timeState); |     dp_printf(120, 6, MY_FONT_SMALL, 0, "%c", timeState); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #endif // TIME_SYNC_INTERVAL
 | #endif // TIME_SYNC_INTERVAL
 | ||||||
| @ -296,9 +304,9 @@ start: | |||||||
|     // line 7: LORA network status
 |     // line 7: LORA network status
 | ||||||
| #if (HAS_LORA) | #if (HAS_LORA) | ||||||
|     // LMiC event display
 |     // LMiC event display
 | ||||||
|     dp_printf(0, 7, FONT_SMALL, 0, "%-16s", lmic_event_msg); |     dp_printf(0, 7, MY_FONT_SMALL, 0, "%-16s", lmic_event_msg); | ||||||
|     // LORA datarate, display inverse if ADR disabled
 |     // LORA datarate, display inverse if ADR disabled
 | ||||||
|     dp_printf(102, 7, FONT_SMALL, !cfg.adrmode, "%-4s", |     dp_printf(102, 7, MY_FONT_SMALL, !cfg.adrmode, "%-4s", | ||||||
|               getSfName(updr2rps(LMIC.datarate))); |               getSfName(updr2rps(LMIC.datarate))); | ||||||
| #endif     // HAS_LORA
 | #endif     // HAS_LORA
 | ||||||
|     break; // page0
 |     break; // page0
 | ||||||
| @ -314,19 +322,19 @@ start: | |||||||
|     if (gps_hasfix()) { |     if (gps_hasfix()) { | ||||||
|       // line 5: clear "No fix"
 |       // line 5: clear "No fix"
 | ||||||
|       if (wasnofix) { |       if (wasnofix) { | ||||||
|         dp_printf(16, 5, FONT_STRETCHED, 0, "      "); |         dp_printf(16, 5, MY_FONT_STRETCHED, 0, "      "); | ||||||
|         wasnofix = false; |         wasnofix = false; | ||||||
|       } |       } | ||||||
|       // line 3-4: GPS latitude
 |       // line 3-4: GPS latitude
 | ||||||
|       dp_printf(0, 3, FONT_STRETCHED, 0, "%c%07.4f", |       dp_printf(0, 3, MY_FONT_STRETCHED, 0, "%c%07.4f", | ||||||
|                 gps.location.rawLat().negative ? 'S' : 'N', gps.location.lat()); |                 gps.location.rawLat().negative ? 'S' : 'N', gps.location.lat()); | ||||||
| 
 | 
 | ||||||
|       // line 6-7: GPS longitude
 |       // line 6-7: GPS longitude
 | ||||||
|       dp_printf(0, 6, FONT_STRETCHED, 0, "%c%07.4f", |       dp_printf(0, 6, MY_FONT_STRETCHED, 0, "%c%07.4f", | ||||||
|                 gps.location.rawLat().negative ? 'W' : 'E', gps.location.lng()); |                 gps.location.rawLat().negative ? 'W' : 'E', gps.location.lng()); | ||||||
| 
 | 
 | ||||||
|     } else { |     } else { | ||||||
|       dp_printf(16, 5, FONT_STRETCHED, 1, "No fix"); |       dp_printf(16, 5, MY_FONT_STRETCHED, 1, "No fix"); | ||||||
|       wasnofix = true; |       wasnofix = true; | ||||||
|     } |     } | ||||||
|     break; // page2
 |     break; // page2
 | ||||||
| @ -338,17 +346,17 @@ start: | |||||||
|   case 3: |   case 3: | ||||||
| #if (HAS_BME) | #if (HAS_BME) | ||||||
|     // line 2-3: Temp
 |     // line 2-3: Temp
 | ||||||
|     dp_printf(0, 2, FONT_STRETCHED, 0, "TMP:%-2.1f", bme_status.temperature); |     dp_printf(0, 2, MY_FONT_STRETCHED, 0, "TMP:%-2.1f", bme_status.temperature); | ||||||
| 
 | 
 | ||||||
|     // line 4-5: Hum
 |     // line 4-5: Hum
 | ||||||
|     dp_printf(0, 4, FONT_STRETCHED, 0, "HUM:%-2.1f", bme_status.humidity); |     dp_printf(0, 4, MY_FONT_STRETCHED, 0, "HUM:%-2.1f", bme_status.humidity); | ||||||
| 
 | 
 | ||||||
| #ifdef HAS_BME680 | #ifdef HAS_BME680 | ||||||
|     // line 6-7: IAQ
 |     // line 6-7: IAQ
 | ||||||
|     dp_printf(0, 6, FONT_STRETCHED, 0, "IAQ:%-3.0f", bme_status.iaq); |     dp_printf(0, 6, MY_FONT_STRETCHED, 0, "IAQ:%-3.0f", bme_status.iaq); | ||||||
| #else      // is BME280 or BMP180
 | #else      // is BME280 or BMP180
 | ||||||
|     // line 6-7: Pre
 |     // line 6-7: Pre
 | ||||||
|     dp_printf(0, 6, FONT_STRETCHED, 0, "PRE:%-2.1f", bme_status.pressure); |     dp_printf(0, 6, MY_FONT_STRETCHED, 0, "PRE:%-2.1f", bme_status.pressure); | ||||||
| #endif     // HAS_BME680
 | #endif     // HAS_BME680
 | ||||||
|     break; // page 3
 |     break; // page 3
 | ||||||
| #else | #else | ||||||
| @ -357,7 +365,7 @@ start: | |||||||
| 
 | 
 | ||||||
|   // page 4: time
 |   // page 4: time
 | ||||||
|   case 4: |   case 4: | ||||||
|     dp_printf(0, 4, FONT_LARGE, 0, "%02d:%02d:%02d", hour(t), minute(t), |     dp_printf(0, 4, MY_FONT_LARGE, 0, "%02d:%02d:%02d", hour(t), minute(t), | ||||||
|               second(t)); |               second(t)); | ||||||
|     break; |     break; | ||||||
| 
 | 
 | ||||||
| @ -370,16 +378,16 @@ start: | |||||||
|     // 5|CHMsk:0000 Nonce:0000
 |     // 5|CHMsk:0000 Nonce:0000
 | ||||||
|     // 6|CUp:000000 CDn:000000
 |     // 6|CUp:000000 CDn:000000
 | ||||||
|     // 7|SNR:-0000  RSSI:-0000
 |     // 7|SNR:-0000  RSSI:-0000
 | ||||||
|     dp_printf(0, 3, FONT_SMALL, 0, "NetwID:%06X TXpw:%-2d", |     dp_printf(0, 3, MY_FONT_SMALL, 0, "NetwID:%06X TXpw:%-2d", | ||||||
|               LMIC.netid & 0x001FFFFF, LMIC.radio_txpow); |               LMIC.netid & 0x001FFFFF, LMIC.radio_txpow); | ||||||
|     dp_printf(0, 4, FONT_SMALL, 0, "DevAdd:%08X DR:%1d", LMIC.devaddr, |     dp_printf(0, 4, MY_FONT_SMALL, 0, "DevAdd:%08X DR:%1d", LMIC.devaddr, | ||||||
|               LMIC.datarate); |               LMIC.datarate); | ||||||
|     dp_printf(0, 5, FONT_SMALL, 0, "ChMsk:%04X Nonce:%04X", LMIC.channelMap, |     dp_printf(0, 5, MY_FONT_SMALL, 0, "ChMsk:%04X Nonce:%04X", LMIC.channelMap, | ||||||
|               LMIC.devNonce); |               LMIC.devNonce); | ||||||
|     dp_printf(0, 6, FONT_SMALL, 0, "fUp:%-6d fDn:%-6d", |     dp_printf(0, 6, MY_FONT_SMALL, 0, "fUp:%-6d fDn:%-6d", | ||||||
|               LMIC.seqnoUp ? LMIC.seqnoUp - 1 : 0, |               LMIC.seqnoUp ? LMIC.seqnoUp - 1 : 0, | ||||||
|               LMIC.seqnoDn ? LMIC.seqnoDn - 1 : 0); |               LMIC.seqnoDn ? LMIC.seqnoDn - 1 : 0); | ||||||
|     dp_printf(0, 7, FONT_SMALL, 0, "SNR:%-5d  RSSI:%-5d", (LMIC.snr + 2) / 4, |     dp_printf(0, 7, MY_FONT_SMALL, 0, "SNR:%-5d  RSSI:%-5d", (LMIC.snr + 2) / 4, | ||||||
|               LMIC.rssi); |               LMIC.rssi); | ||||||
|     break; // page5
 |     break; // page5
 | ||||||
| #else      // don't show blank page if we are unattended
 | #else      // don't show blank page if we are unattended
 | ||||||
| @ -429,14 +437,7 @@ void dp_printf(uint16_t x, uint16_t y, uint8_t font, uint8_t inv, | |||||||
| #if (HAS_DISPLAY) == 1 | #if (HAS_DISPLAY) == 1 | ||||||
|   oledWriteString(&ssoled, 0, x, y, temp, font, inv, false); |   oledWriteString(&ssoled, 0, x, y, temp, font, inv, false); | ||||||
| #elif (HAS_DISPLAY) == 2 | #elif (HAS_DISPLAY) == 2 | ||||||
|                    /*
 |   tft.drawString(temp, x, y, font); | ||||||
|                      if (font = 0 || font == 1) |  | ||||||
|                        spilcdWriteStringFast(x, y, temp, MY_DISPLAY_FGCOLOR, MY_DISPLAY_BGCOLOR, |  | ||||||
|                                              font); |  | ||||||
|                      else |  | ||||||
|                      */ |  | ||||||
|   spilcdWriteString(x, y, temp, MY_DISPLAY_BGCOLOR, MY_DISPLAY_FGCOLOR, font, |  | ||||||
|                     1); |  | ||||||
| #endif | #endif | ||||||
|   if (temp != loc_buf) { |   if (temp != loc_buf) { | ||||||
|     free(temp); |     free(temp); | ||||||
| @ -447,7 +448,7 @@ void dp_dump(uint8_t *pBuffer) { | |||||||
| #if (HAS_DISPLAY) == 1 | #if (HAS_DISPLAY) == 1 | ||||||
|   oledDumpBuffer(&ssoled, pBuffer); |   oledDumpBuffer(&ssoled, pBuffer); | ||||||
| #elif (HAS_DISPLAY) == 2 | #elif (HAS_DISPLAY) == 2 | ||||||
|   spilcdShowBuffer(0, 0, MY_DISPLAY_WIDTH, MY_DISPLAY_HEIGHT); |   // no buffered rendering for TFT
 | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -455,8 +456,7 @@ void dp_clear() { | |||||||
| #if (HAS_DISPLAY) == 1 | #if (HAS_DISPLAY) == 1 | ||||||
|   oledFill(&ssoled, 0, 1); |   oledFill(&ssoled, 0, 1); | ||||||
| #elif (HAS_DISPLAY) == 2 | #elif (HAS_DISPLAY) == 2 | ||||||
|   spilcdFill(0, 1); |   tft.fillScreen(TFT_WHITE); | ||||||
|   spilcdScrollReset(); |  | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -464,7 +464,7 @@ void dp_contrast(uint8_t contrast) { | |||||||
| #if (HAS_DISPLAY) == 1 | #if (HAS_DISPLAY) == 1 | ||||||
|   oledSetContrast(&ssoled, contrast); |   oledSetContrast(&ssoled, contrast); | ||||||
| #elif (HAS_DISPLAY) == 2 | #elif (HAS_DISPLAY) == 2 | ||||||
|   // to come
 |   // no contrast setting for TFT
 | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -483,13 +483,12 @@ void dp_shutdown(void) { | |||||||
|     ESP_LOGV(TAG, "[%0.3f] i2c mutex lock failed", millis() / 1000.0); |     ESP_LOGV(TAG, "[%0.3f] i2c mutex lock failed", millis() / 1000.0); | ||||||
|   else { |   else { | ||||||
|     cfg.screenon = 0; |     cfg.screenon = 0; | ||||||
|     oledShutdown(&ssoled); |     oledPower(&ssoled, false); | ||||||
|     delay(DISPLAYREFRESH_MS / 1000 * 1.1); |     delay(DISPLAYREFRESH_MS / 1000 * 1.1); | ||||||
|     I2C_MUTEX_UNLOCK(); // release i2c bus access
 |     I2C_MUTEX_UNLOCK(); // release i2c bus access
 | ||||||
|   } |   } | ||||||
| #elif (HAS_DISPLAY) == 2 | #elif (HAS_DISPLAY) == 2 | ||||||
|   spilcdShutdown(); |   // to come
 | ||||||
|   spilcdFreeBackbuffer(); |  | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -522,7 +521,7 @@ void dp_fillRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height, | |||||||
|   for (uint16_t xi = x; xi < x + width; xi++) |   for (uint16_t xi = x; xi < x + width; xi++) | ||||||
|     oledDrawLine(&ssoled, xi, y, xi, y + height - 1, bRender); |     oledDrawLine(&ssoled, xi, y, xi, y + height - 1, bRender); | ||||||
| #elif (HAS_DISPLAY) == 2 | #elif (HAS_DISPLAY) == 2 | ||||||
|   spilcdRectangle(x, y, width, height, MY_DISPLAY_BGCOLOR, MY_DISPLAY_FGCOLOR, 1, 1); |   tft.drawRect(x, y, width, height, MY_DISPLAY_FGCOLOR); | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -32,7 +32,7 @@ | |||||||
| #define BOARD_HAS_PSRAM // use if board has external PSRAM
 | #define BOARD_HAS_PSRAM // use if board has external PSRAM
 | ||||||
| #define DISABLE_BROWNOUT 1 // comment out if you want to keep brownout feature
 | #define DISABLE_BROWNOUT 1 // comment out if you want to keep brownout feature
 | ||||||
| 
 | 
 | ||||||
| //#define HAS_DISPLAY 2 // TFT-LCD, support work in progess, not ready yet
 | #define HAS_DISPLAY 2 // TFT-LCD, support work in progess, not ready yet
 | ||||||
| //#define MY_DISPLAY_FLIP  1 // use if display is rotated
 | //#define MY_DISPLAY_FLIP  1 // use if display is rotated
 | ||||||
| //#define BAT_MEASURE_ADC ADC1_GPIO35_CHANNEL // battery probe GPIO pin -> ADC1_CHANNEL_7
 | //#define BAT_MEASURE_ADC ADC1_GPIO35_CHANNEL // battery probe GPIO pin -> ADC1_CHANNEL_7
 | ||||||
| //#define BAT_VOLTAGE_DIVIDER 2 // voltage divider 100k/100k on board
 | //#define BAT_VOLTAGE_DIVIDER 2 // voltage divider 100k/100k on board
 | ||||||
| @ -45,13 +45,41 @@ | |||||||
| #define GPS_SERIAL 9600, SERIAL_8N1, RXD2, TXD2 // UBlox NEO 6M RX, TX
 | #define GPS_SERIAL 9600, SERIAL_8N1, RXD2, TXD2 // UBlox NEO 6M RX, TX
 | ||||||
| #define GPS_INT GPIO_NUM_35 // 30ns accurary timepulse, to be external wired on pcb: shorten R12!
 | #define GPS_INT GPIO_NUM_35 // 30ns accurary timepulse, to be external wired on pcb: shorten R12!
 | ||||||
| 
 | 
 | ||||||
| // Pins for interface of LC Display
 | // Display Settings
 | ||||||
| #define MY_DISPLAY_CS GPIO_NUM_14 | #define MY_DISPLAY_WIDTH 320 | ||||||
| #define MY_DISPLAY_DC GPIO_NUM_27 | #define MY_DISPLAY_HEIGHT 240 | ||||||
| #define MY_DISPLAY_CLK GPIO_NUM_18 | #define MY_DISPLAY_INVERT 1 | ||||||
| #define MY_DISPLAY_RST GPIO_NUM_33 | 
 | ||||||
| #define MY_DISPLAY_BL GPIO_NUM_32 | // setting for M5 display
 | ||||||
| #define MY_DISPLAY_MOSI GPIO_NUM_23 | #define ILI9341_DRIVER | ||||||
| #define MY_DISPLAY_MISO GPIO_NUM_19 | #define M5STACK // needed for TFT driver
 | ||||||
|  | 
 | ||||||
|  | #define TFT_MISO MISO  // SPI
 | ||||||
|  | #define TFT_MOSI MOSI // SPI
 | ||||||
|  | #define TFT_SCLK SCK  // SPI
 | ||||||
|  | #define TFT_CS   GPIO_NUM_14  // Chip select control
 | ||||||
|  | #define TFT_DC   GPIO_NUM_27  // Data Command control
 | ||||||
|  | #define TFT_RST  GPIO_NUM_33  // Reset
 | ||||||
|  | #define TFT_BL   GPIO_NUM_32  // LED back-light
 | ||||||
|  | 
 | ||||||
|  | //#define USE_HSPI_PORT
 | ||||||
|  | #define TFT_SDA_READ | ||||||
|  | #define TFT_RGB_ORDER TFT_RGB  // Colour order Red-Green-Blue
 | ||||||
|  | //#define TFT_RGB_ORDER TFT_BGR  // Colour order Blue-Green-Red
 | ||||||
|  | 
 | ||||||
|  | #define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
 | ||||||
|  | #define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
 | ||||||
|  | #define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
 | ||||||
|  | #define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
 | ||||||
|  | #define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
 | ||||||
|  | #define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
 | ||||||
|  | //#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
 | ||||||
|  | #define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
 | ||||||
|  | #define SMOOTH_FONT | ||||||
|  | 
 | ||||||
|  | #define SPI_FREQUENCY  27000000 | ||||||
|  | 
 | ||||||
|  | // Optional reduced SPI frequency for reading TFT
 | ||||||
|  | #define SPI_READ_FREQUENCY  5000000 | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| @ -7,7 +7,7 @@ | |||||||
| 
 | 
 | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| 
 | 
 | ||||||
| #define HAS_LORA 1 // comment out if device shall not send data via LoRa or has no M5 RA01 LoRa module
 | //#define HAS_LORA 1 // comment out if device shall not send data via LoRa or has no M5 RA01 LoRa module
 | ||||||
| #define LORA_SCK  SCK | #define LORA_SCK  SCK | ||||||
| #define LORA_CS   SS | #define LORA_CS   SS | ||||||
| #define LORA_MISO MISO | #define LORA_MISO MISO | ||||||
| @ -19,7 +19,7 @@ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| // enable only if you want to store a local paxcount table on the device
 | // enable only if you want to store a local paxcount table on the device
 | ||||||
| #define HAS_SDCARD  1      // this board has an SD-card-reader/writer
 | //#define HAS_SDCARD  1      // this board has an SD-card-reader/writer
 | ||||||
| #define SDCARD_CS    GPIO_NUM_4 | #define SDCARD_CS    GPIO_NUM_4 | ||||||
| #define SDCARD_MOSI  MOSI | #define SDCARD_MOSI  MOSI | ||||||
| #define SDCARD_MISO  MISO | #define SDCARD_MISO  MISO | ||||||
| @ -32,7 +32,7 @@ | |||||||
| #define BOARD_HAS_PSRAM // use if board has external PSRAM
 | #define BOARD_HAS_PSRAM // use if board has external PSRAM
 | ||||||
| #define DISABLE_BROWNOUT 1 // comment out if you want to keep brownout feature
 | #define DISABLE_BROWNOUT 1 // comment out if you want to keep brownout feature
 | ||||||
| 
 | 
 | ||||||
| //#define HAS_DISPLAY 2 // TFT-LCD, support work in progess, not ready yet
 | #define HAS_DISPLAY 2 // TFT-LCD, support work in progess, not ready yet
 | ||||||
| //#define MY_DISPLAY_FLIP  1 // use if display is rotated
 | //#define MY_DISPLAY_FLIP  1 // use if display is rotated
 | ||||||
| //#define BAT_MEASURE_ADC ADC1_GPIO35_CHANNEL // battery probe GPIO pin -> ADC1_CHANNEL_7
 | //#define BAT_MEASURE_ADC ADC1_GPIO35_CHANNEL // battery probe GPIO pin -> ADC1_CHANNEL_7
 | ||||||
| //#define BAT_VOLTAGE_DIVIDER 2 // voltage divider 100k/100k on board
 | //#define BAT_VOLTAGE_DIVIDER 2 // voltage divider 100k/100k on board
 | ||||||
| @ -49,13 +49,38 @@ | |||||||
| // Display Settings
 | // Display Settings
 | ||||||
| #define MY_DISPLAY_WIDTH 320 | #define MY_DISPLAY_WIDTH 320 | ||||||
| #define MY_DISPLAY_HEIGHT 240 | #define MY_DISPLAY_HEIGHT 240 | ||||||
| #define MY_DISPLAY_TYPE LCD_ILI9341 | #define MY_DISPLAY_INVERT 1 | ||||||
| #define MY_DISPLAY_CS GPIO_NUM_14 // Display CS pin
 | 
 | ||||||
| #define MY_DISPLAY_CLK GPIO_NUM_18 // SPI CLOCK pin
 | // setting for M5 display
 | ||||||
| #define MY_DISPLAY_DC GPIO_NUM_27 // Display command/data pin
 | #define ILI9341_DRIVER | ||||||
| #define MY_DISPLAY_MOSI GPIO_NUM_23 // SPI MOSI
 | #define M5STACK // needed for TFT driver
 | ||||||
| #define MY_DISPLAY_MISO GPIO_NUM_19 // SPI MISO
 | 
 | ||||||
| #define MY_DISPLAY_BL GPIO_NUM_32 // backlight control
 | #define TFT_MISO MISO  // SPI
 | ||||||
| #define MY_DISPLAY_RST GPIO_NUM_33 // RESET control
 | #define TFT_MOSI MOSI // SPI
 | ||||||
|  | #define TFT_SCLK SCK  // SPI
 | ||||||
|  | #define TFT_CS   GPIO_NUM_14  // Chip select control
 | ||||||
|  | #define TFT_DC   GPIO_NUM_27  // Data Command control
 | ||||||
|  | #define TFT_RST  GPIO_NUM_33  // Reset
 | ||||||
|  | #define TFT_BL   GPIO_NUM_32  // LED back-light
 | ||||||
|  | 
 | ||||||
|  | //#define USE_HSPI_PORT
 | ||||||
|  | #define TFT_SDA_READ | ||||||
|  | #define TFT_RGB_ORDER TFT_RGB  // Colour order Red-Green-Blue
 | ||||||
|  | //#define TFT_RGB_ORDER TFT_BGR  // Colour order Blue-Green-Red
 | ||||||
|  | 
 | ||||||
|  | #define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
 | ||||||
|  | #define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
 | ||||||
|  | #define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
 | ||||||
|  | #define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
 | ||||||
|  | #define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
 | ||||||
|  | #define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
 | ||||||
|  | //#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
 | ||||||
|  | #define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
 | ||||||
|  | #define SMOOTH_FONT | ||||||
|  | 
 | ||||||
|  | #define SPI_FREQUENCY  27000000 | ||||||
|  | 
 | ||||||
|  | // Optional reduced SPI frequency for reading TFT
 | ||||||
|  | #define SPI_READ_FREQUENCY  5000000 | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user