T-Beam Supreme V3 Corrupt Display #205

Closed
opened 2026-10-05 05:48:43 +02:00 by adam · 50 comments
Owner

Hello, I've got a T-Beam Supreme V3 and no matter which version of the iGate firmware I flash the display always looks like it's corrupted.
I tried mentioning this in another issue thread that specifically mentions the T-Beam Supreme but I finally realized with the v3.0 firmware that the iGate was actually functioning, I just couldn't use the display. If needed I can go back and verify the older versions, but my main problem is lack of useable display output. old comment

Here is a photo of the issue. Image
This same hardware has no issue running your APRS Tracker firmware. I previously had Meshtastic running just fine as well.

Edit: I'm in the US and purchased mine directly from Lilygo, which shipped from China.

Hello, I've got a T-Beam Supreme V3 and no matter which version of the iGate firmware I flash the display always looks like it's corrupted. I tried mentioning this in another issue thread that specifically mentions the T-Beam Supreme but I finally realized with the v3.0 firmware that the iGate was actually functioning, I just couldn't use the display. If needed I can go back and verify the older versions, but my main problem is lack of useable display output. [old comment](https://github.com/richonguzman/LoRa_APRS_iGate/issues/204#issuecomment-2848413710) Here is a photo of the issue. ![Image](https://github.com/user-attachments/assets/6e84b184-d2cf-4b58-b690-9f7537ba82b4) This same hardware has no issue running your APRS Tracker firmware. I previously had Meshtastic running just fine as well. Edit: I'm in the US and purchased mine directly from Lilygo, which shipped from China. <!-- github-sync-id:3266929505 -->
adam closed this issue 2026-10-05 05:48:43 +02:00
Author
Owner

Hello! I do have the same issue with the screen showing up static artefacts

Hello! I do have the same issue with the screen showing up static artefacts <!-- github-comment-id:3132597187 -->
Author
Owner

Wow - I've never seen that on my Supremes. I've suffered the "missing line" syndrome specifically on the paxcounter v1.6.1. When you had it configured with Meshtastic did the display work? Or, for that matter, did the display ever work %^)?

Hope you figure it out! Cheers and 73 - Jon N7UV

Wow - I've never seen that on my Supremes. I've suffered the "missing line" syndrome specifically on the paxcounter v1.6.1. When you had it configured with Meshtastic did the display work? Or, for that matter, did the display ever work %^)? Hope you figure it out! Cheers and 73 - Jon N7UV <!-- github-comment-id:3152614625 -->
Author
Owner

When you had it configured with Meshtastic did the display work? Or, for that matter, did the display ever work %^)?

Hope you figure it out! Cheers and 73 - Jon N7UV

The display works fine with the tracker firmware
I haven't loaded Meshtastic since way back in October '24 but I don't remember any trouble with the display. It would have been obvious if it arrived with a dead display. I think the one I ordered for 433mhz shipped with SoftRF, that powered on and pinged my T-Echo that also shipped with SoftRF just fine.

Only thing, I got my Supremes before the iGate firmware was available. I guess I'll have to try it with the other Supreme I have for Meshtastic on 900mhz. Maybe there's a subtle hardware difference between what I got directly from LilyGo vs what I got from Rokland. I'll add a new reply if I notice anything.

> When you had it configured with Meshtastic did the display work? Or, for that matter, did the display ever work %^)? > > Hope you figure it out! Cheers and 73 - Jon N7UV The display works fine with the [tracker firmware](https://github.com/richonguzman/LoRa_APRS_Tracker) I haven't loaded Meshtastic since way back in October '24 but I don't remember any trouble with the display. It would have been obvious if it arrived with a dead display. I think the one I ordered for 433mhz shipped with SoftRF, that powered on and pinged my T-Echo that also shipped with SoftRF just fine. Only thing, I got my Supremes before the iGate firmware was available. I guess I'll have to try it with the other Supreme I have for Meshtastic on 900mhz. Maybe there's a subtle hardware difference between what I got directly from LilyGo vs what I got from Rokland. I'll add a new reply if I notice anything. <!-- github-comment-id:3152667623 -->
Author
Owner

When you had it configured with Meshtastic did the display work? Or, for that matter, did the display ever work %^)?
Hope you figure it out! Cheers and 73 - Jon N7UV

The display works fine with the tracker firmware I haven't loaded Meshtastic since way back in October '24 but I don't remember any trouble with the display. It would have been obvious if it arrived with a dead display. I think the one I ordered for 433mhz shipped with SoftRF, that powered on and pinged my T-Echo that also shipped with SoftRF just fine.

Only thing, I got my Supremes before the iGate firmware was available. I guess I'll have to try it with the other Supreme I have for Meshtastic on 900mhz. Maybe there's a subtle hardware difference between what I got directly from LilyGo vs what I got from Rokland. I'll add a new reply if I notice anything.

please validate the screen on your T-beam Supreme is SH1106 and not SSD1306.

> > When you had it configured with Meshtastic did the display work? Or, for that matter, did the display ever work %^)? > > Hope you figure it out! Cheers and 73 - Jon N7UV > > The display works fine with the [tracker firmware](https://github.com/richonguzman/LoRa_APRS_Tracker) I haven't loaded Meshtastic since way back in October '24 but I don't remember any trouble with the display. It would have been obvious if it arrived with a dead display. I think the one I ordered for 433mhz shipped with SoftRF, that powered on and pinged my T-Echo that also shipped with SoftRF just fine. > > Only thing, I got my Supremes before the iGate firmware was available. I guess I'll have to try it with the other Supreme I have for Meshtastic on 900mhz. Maybe there's a subtle hardware difference between what I got directly from LilyGo vs what I got from Rokland. I'll add a new reply if I notice anything. please validate the screen on your T-beam Supreme is SH1106 and not SSD1306. <!-- github-comment-id:3152722176 -->
Author
Owner

please validate the screen on your T-beam Supreme is SH1106 and not SSD1306.

Ooof, I tried to dismantle it as far as I felt comfortable but I think the numbers I saw were for the ribbon cable or the glass assembly.
If it's printed on the back of the panel then I don't currently have the tools to properly dismount it from the acrylic frame.

I'm not familiar with getting a programming environment setup for these boards. Is there a way to check via console of some sort?

> please validate the screen on your T-beam Supreme is SH1106 and not SSD1306. Ooof, I tried to dismantle it as far as I felt comfortable but I think the numbers I saw were for the ribbon cable or the glass assembly. If it's printed on the back of the panel then I don't currently have the tools to properly dismount it from the acrylic frame. I'm not familiar with getting a programming environment setup for these boards. Is there a way to check via console of some sort? <!-- github-comment-id:3153056142 -->
Author
Owner

maybe we just need to know if you ever changed it or not... it comes with SH1106 regularly from factory

maybe we just need to know if you ever changed it or not... it comes with SH1106 regularly from factory <!-- github-comment-id:3153305975 -->
Author
Owner

maybe we just need to know if you ever changed it or not... it comes with SH1106 regularly from factory

I have not modified it other than giving it a proper antenna. It is as shipped directly from LilyGo's warehouse in China.

I looked up my order on the lilygo.cc website. purchased Oct 6 2024.
T-Beam Supreme SoftRF 433mhz UBLOX.

Maybe they had old inventory that did not include the SH1106 and I got unlucky??

> maybe we just need to know if you ever changed it or not... it comes with SH1106 regularly from factory I have not modified it other than giving it a proper antenna. It is as shipped directly from LilyGo's warehouse in China. I looked up my order on the lilygo.cc website. purchased Oct 6 2024. T-Beam Supreme SoftRF 433mhz UBLOX. Maybe they had old inventory that did not include the SH1106 and I got unlucky?? <!-- github-comment-id:3153368695 -->
Author
Owner

we can test a variation of your board to test SSD1306:

  1. are you ok uploading firmware from VSCODE + Platformio?
we can test a variation of your board to test SSD1306: 1) are you ok uploading firmware from VSCODE + Platformio? <!-- github-comment-id:3155022119 -->
Author
Owner

we can test a variation of your board to test SSD1306:

  1. are you ok uploading firmware from VSCODE + Platformio?

I'm willing to try but I would need a tutorial to get that going.

Edit: I'm going to follow one of the tutorials on LiLygo's github. Let me know what commands or code changes I'd need to make.

> we can test a variation of your board to test SSD1306: > > 1. are you ok uploading firmware from VSCODE + Platformio? I'm willing to try but I would need a tutorial to get that going. Edit: I'm going to follow one of the tutorials on LiLygo's github. Let me know what commands or code changes I'd need to make. <!-- github-comment-id:3160880381 -->
Author
Owner

Just to add I'm also running into the same corrupt display issue with the T-Beam Supreme V3.

The display works fine with the tracker firmware & Meshtastic.

Just to add I'm also running into the same corrupt display issue with the T-Beam Supreme V3. The display works fine with the tracker firmware & Meshtastic. <!-- github-comment-id:3178483401 -->
Author
Owner

anyone of @EI3HIB or @MastarPete can help me locally install from VSCODE a minor update i can guide you from here?

is removing a line that i suspect could fix it and with this i can fast update web flasher to have the right version for you both ?

anyone of @EI3HIB or @MastarPete can help me locally install from VSCODE a minor update i can guide you from here? is removing a line that i suspect could fix it and with this i can fast update web flasher to have the right version for you both ? <!-- github-comment-id:3180861336 -->
Author
Owner

@richonguzman sorry for the delay in replying, I'd be happy to help - can you just advise me what I need to do? Do I need to install VSCODE?

@richonguzman sorry for the delay in replying, I'd be happy to help - can you just advise me what I need to do? Do I need to install VSCODE? <!-- github-comment-id:3214184953 -->
Author
Owner

@richonguzman sorry for the delay in replying, I'd be happy to help - can you just advise me what I need to do? Do I need to install VSCODE?

yes, download VSCODE, download this repository, import it into vscode + platformio

the EDIT is just taking away 1 line... let me know when you are done with the installation and all

(this is a "bad" guide for installing the needed programs:

https://github.com/richonguzman/LoRa_APRS_Tracker/wiki/01.-Installation-Guide-%23-Guia-de-Instalacion )

> [@richonguzman](https://github.com/richonguzman) sorry for the delay in replying, I'd be happy to help - can you just advise me what I need to do? Do I need to install VSCODE? yes, download VSCODE, download this repository, import it into vscode + platformio the EDIT is just taking away 1 line... let me know when you are done with the installation and all (this is a "bad" guide for installing the needed programs: https://github.com/richonguzman/LoRa_APRS_Tracker/wiki/01.-Installation-Guide-%23-Guia-de-Instalacion ) <!-- github-comment-id:3214500547 -->
Author
Owner

Thank You! OK downloaded and installed - just a stupid question: when selecting the board on the "Import Arduino Project" what one should I pick for the T-Beam Supreme V3?

Image
Thank You! OK downloaded and installed - just a stupid question: when selecting the board on the "Import Arduino Project" what one should I pick for the T-Beam Supreme V3? <img width="579" height="193" alt="Image" src="https://github.com/user-attachments/assets/466a408c-d9c6-409b-92b7-26b93efbd1bd" /> <!-- github-comment-id:3214659379 -->
Author
Owner

use the first one of your picture... as later you have to change the environment anyway and it would work as expected (this is just a loading process)

if you like i can help you over Telegram (chat app) which would be faster at this point (look for my GitHub user )

use the first one of your picture... as later you have to change the environment anyway and it would work as expected (this is just a loading process) if you like i can help you over Telegram (chat app) which would be faster at this point (look for my GitHub user ) <!-- github-comment-id:3214699200 -->
Author
Owner

Ah, I don't have Telegram - have it loaded now and editing the igate_conf.json.

Let me know where that line is and I'll give it a try.

Thanks again for all of the help!

Ah, I don't have Telegram - have it loaded now and editing the igate_conf.json. Let me know where that line is and I'll give it a try. Thanks again for all of the help! <!-- github-comment-id:3214769806 -->
Author
Owner

LoRa_APRS_iGate/varians/ttgo_t_beam_s3_SUPREME_v3/board_pinout.h

line 45

delete this line: #define OLED_DISPLAY_HAS_RST_PIN

save the file and just upload the firmware again (no need to change filesystem)

LoRa_APRS_iGate/varians/ttgo_t_beam_s3_SUPREME_v3/board_pinout.h line 45 delete this line: #define OLED_DISPLAY_HAS_RST_PIN save the file and just upload the firmware again (no need to change filesystem) <!-- github-comment-id:3214782636 -->
Author
Owner

Hi, sorry I lost track of getting back to this.

I have VSCode installed, I added PlatformIO and got the main source code from the v3.0 release imported.
I navigated to the s3 Supreme > Pinout.h and removed that line just fine.
I saved.
I clicked build.. it passed
I selected the ttgo_t_beam_s3_SUPREME_v3 as the environment from the bottom status bar.
I clicked upload and it seemed to have uploaded to the device. (Side note: I went directly from the tracker to the iGate firmware)

Maybe I'm missing something in the environment settings or upload process but the change doesn't seem to be working as the display is still "corrupted."

here's a screenshot after trying to upload
Image

Hi, sorry I lost track of getting back to this. I have VSCode installed, I added PlatformIO and got the main source code from the v3.0 release imported. I navigated to the s3 Supreme > Pinout.h and removed that line just fine. I saved. I clicked build.. it passed I selected the ttgo_t_beam_s3_SUPREME_v3 as the environment from the bottom status bar. I clicked upload and it seemed to have uploaded to the device. (Side note: I went directly from the tracker to the iGate firmware) Maybe I'm missing something in the environment settings or upload process but the change doesn't seem to be working as the display is still "corrupted." here's a screenshot after trying to upload ![Image](https://github.com/user-attachments/assets/07a4eb3b-da07-45b1-b8a0-3d9397e4bf6b) <!-- github-comment-id:3216692484 -->
Author
Owner

Just to confirm, I'm getting the same result as @MastarPete - screen is still corrupted.

And I also went directly from the tracker to the iGate firmware.

Just to confirm, I'm getting the same result as @MastarPete - screen is still corrupted. And I also went directly from the tracker to the iGate firmware. <!-- github-comment-id:3216723277 -->
Author
Owner

i've compared it with the tracker "again" and it should run! i'm really confused about it... will keep on checking stuff

i've compared it with the tracker "again" and it should run! i'm really confused about it... will keep on checking stuff <!-- github-comment-id:3216799163 -->
Author
Owner

Thanks for trying! I am just comparing the code in display.cpp and I notice it seems different between the tracker and igate versions?

Is the display issue linked to the handling of ssd1306?

Tracker:

#else
    #include <Adafruit_GFX.h>

    #define ssd1306 //comment this line with "//" when using SH1106 screen instead of SSD1306

    #if defined(TTGO_T_Beam_S3_SUPREME_V3)
        #undef ssd1306
    #endif

iGate code:

            #if defined(TTGO_T_Beam_S3_SUPREME_V3)
                #include <Adafruit_SH110X.h>
                Adafruit_SH1106G display(128, 64, &Wire, OLED_RST);
            #else
                #include <Adafruit_SSD1306.h>
                #ifdef HELTEC_WSL_V3_DISPLAY
                    Adafruit_SSD1306 display(128, 64, &Wire1, OLED_RST);
                #else
                    Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST);
                #endif
            #endif
Thanks for trying! I am just comparing the code in display.cpp and I notice it seems different between the tracker and igate versions? Is the display issue linked to the handling of ssd1306? Tracker: ``` #else #include <Adafruit_GFX.h> #define ssd1306 //comment this line with "//" when using SH1106 screen instead of SSD1306 #if defined(TTGO_T_Beam_S3_SUPREME_V3) #undef ssd1306 #endif ``` iGate code: ``` #if defined(TTGO_T_Beam_S3_SUPREME_V3) #include <Adafruit_SH110X.h> Adafruit_SH1106G display(128, 64, &Wire, OLED_RST); #else #include <Adafruit_SSD1306.h> #ifdef HELTEC_WSL_V3_DISPLAY Adafruit_SSD1306 display(128, 64, &Wire1, OLED_RST); #else Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST); #endif #endif ``` <!-- github-comment-id:3216968799 -->
Author
Owner

on the igate the single one board with SH1106 screen is the Supreme... this is why is forced to work with this library and not the way of the tracker, although they end up working the same and it is only a difference in how its called.

crazy thing would be to know LILYGO changed the screen recently

on the igate the single one board with SH1106 screen is the Supreme... this is why is forced to work with this library and not the way of the tracker, although they end up working the same and it is only a difference in how its called. crazy thing would be to know LILYGO changed the screen recently <!-- github-comment-id:3216996699 -->
Author
Owner

OK - I have got the display working, I am not to thank for this though - I was playing around with AI to diagnose the issue:

"The final fix involved using the correct library for your specific board, and then correctly handling the different function names and constants between the Adafruit_SSD1306 and Adafruit_SH110X libraries. "

@MastarPete you might try and copy and paste and replace the existing display.cpp and see if this works for you too.

/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
 * * This file is part of LoRa APRS iGate.
 * * LoRa APRS iGate is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or 
 * (at your option) any later version.
 * * LoRa APRS iGate is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * * You should have received a copy of the GNU General Public License
 * along with LoRa APRS iGate. If not, see <https://www.gnu.org/licenses/>.
 */

#include <Wire.h>
#include "configuration.h"
#include "board_pinout.h"
#include "display.h"

#ifdef HAS_DISPLAY
    #ifdef HAS_TFT
        #include <TFT_eSPI.h>

        TFT_eSPI tft = TFT_eSPI(); 
        TFT_eSprite sprite  = TFT_eSprite(&tft);

        #ifdef HELTEC_WIRELESS_TRACKER
            #define bigSizeFont     2
            #define smallSizeFont   1
            #define lineSpacing     10
        #endif
        #if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS)
            #define bigSizeFont     5
            #define smallSizeFont   2
            #define lineSpacing     25
        #endif
        uint16_t redColor            = 0xc8a2;
    #else
        #ifdef HAS_EPAPER
            #include <heltec-eink-modules.h>
            #include "Fonts/FreeSansBold9pt7b.h"
            EInkDisplay_WirelessPaperV1_1 display;
            String lastEpaperText;
        #else
            #include <Adafruit_SH110X.h>
            
            #if defined(TTGO_T_Beam_S3_SUPREME_V3)
                Adafruit_SH1106G display(128, 64, &Wire, OLED_RST);
            #else
                Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST);
            #endif
        #endif
    #endif
#endif

extern  Configuration   Config;

bool    displayFound    = false;

void displaySetup() {
    #ifdef HAS_DISPLAY
        delay(500);
        #ifdef HAS_TFT
            tft.init();
            tft.begin();
            if (Config.display.turn180) {
                tft.setRotation(3);
            } else {
                tft.setRotation(1);
            }
            pinMode(TFT_BL, OUTPUT);
            digitalWrite(TFT_BL, HIGH);
            tft.setTextFont(0);
            tft.fillScreen(TFT_BLACK);
            #if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS)
                sprite.createSprite(320,240);
            #else
                sprite.createSprite(160,80);
            #endif
        #else
            #ifdef HAS_EPAPER
                display.landscape();
                display.printCenter("LoRa APRS iGate Initialising...");
                display.update();
            #else
                #ifdef OLED_DISPLAY_HAS_RST_PIN
                    pinMode(OLED_RST, OUTPUT);
                    digitalWrite(OLED_RST, LOW);
                    delay(20);
                    digitalWrite(OLED_RST, HIGH);
                #endif

                #if defined(TTGO_T_Beam_S3_SUPREME_V3)
                    if (display.begin(0x3c)) {
                        displayFound = true;
                        if (Config.display.turn180) display.setRotation(2);
                        display.clearDisplay();
                        display.setTextColor(SH110X_WHITE);
                        display.setTextSize(1);
                        display.setCursor(0, 0);
                        display.setContrast(1);
                        display.display();
                    }
                #else
                    if(display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
                        displayFound = true;
                        if (Config.display.turn180) display.setRotation(2);
                        display.clearDisplay();
                        display.setTextColor(WHITE);
                        display.setTextSize(1);
                        display.setCursor(0, 0);
                        display.ssd1306_command(SSD1306_SETCONTRAST);
                        display.ssd1306_command(1);
                        display.display();
                    }
                #endif
            #endif
        #endif
        delay(1000);
    #endif
}

void displayToggle(bool toggle) {
    #ifdef HAS_DISPLAY
        if (toggle) {
            #ifdef HAS_TFT
                digitalWrite(TFT_BL, HIGH);
            #else
                #ifdef HAS_EPAPER
                    display.printCenter("EPAPER Display Disabled by toggle...");
                    display.update();
                #else
                    if (displayFound) {
                        #if defined(TTGO_T_Beam_S3_SUPREME_V3)
                            display.oled_command(SH110X_DISPLAYON);
                        #else
                            display.ssd1306_command(SSD1306_DISPLAYON);
                        #endif
                    }
                #endif
            #endif
        } else {
            #ifdef HAS_TFT
                digitalWrite(TFT_BL, LOW);
            #else
                #ifdef HAS_EPAPER
                    display.printCenter("Enabled EPAPER Display...");
                    display.update();
                #else
                    if (displayFound) {
                        #if defined(TTGO_T_Beam_S3_SUPREME_V3)
                            display.oled_command(SH110X_DISPLAYOFF);
                        #else
                            display.ssd1306_command(SSD1306_DISPLAYOFF);
                        #endif
                    }
                #endif
            #endif
        }
    #endif
}

void displayShow(const String& header, const String& line1, const String& line2, const String& line3, int wait) {
    #ifdef HAS_DISPLAY
        const String* const lines[] = {&line1, &line2, &line3};
        #ifdef HAS_TFT
            sprite.fillSprite(TFT_BLACK);
            #if defined(HELTEC_WIRELESS_TRACKER)
                sprite.fillRect(0, 0, 160, 19, redColor);
            #endif
            #if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS)
                sprite.fillRect(0, 0, 320, 43, redColor);
            #endif
            sprite.setTextFont(0);
            sprite.setTextSize(bigSizeFont);
            sprite.setTextColor(TFT_WHITE, redColor);
            sprite.drawString(header, 3, 3);

            sprite.setTextSize(smallSizeFont);
            sprite.setTextColor(TFT_WHITE, TFT_BLACK);

            for (int i = 0; i < 3; i++) {
                sprite.drawString(*lines[i], 3, (lineSpacing * (2 + i)) - 2);
            }

            sprite.pushSprite(0,0);
        #else
            #ifdef HAS_EPAPER
                display.clearMemory();
                display.setCursor(5,10);
                display.setFont(&FreeSansBold9pt7b);
                display.println(header);
                display.setFont(NULL);
                for (int i = 0; i < 3; i++) {
                    display.setCursor(0, 25 + (14 * i));
                    display.println(*lines[i]);
                }
                display.update();
            #else
                if (displayFound) {
                    display.clearDisplay();
                    display.setTextColor(SH110X_WHITE);
                    display.setTextSize(1);
                    display.setCursor(0, 0);
                    display.println(header);
                    for (int i = 0; i < 3; i++) {
                        display.setCursor(0, 8 + (8 * i));
                        display.println(*lines[i]);
                    }
                    display.display();
                }
            #endif
        #endif
        delay(wait);
    #endif
}

void displayShow(const String& header, const String& line1, const String& line2, const String& line3, const String& line4, const String& line5, const String& line6, int wait) {
    #ifdef HAS_DISPLAY
        const String* const lines[] = {&line1, &line2, &line3, &line4, &line5, &line6};
        #ifdef HAS_TFT
            sprite.fillSprite(TFT_BLACK);
            #if defined(HELTEC_WIRELESS_TRACKER)
                sprite.fillRect(0, 0, 160, 19, redColor);
            #endif
            #if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS)
                sprite.fillRect(0, 0, 320, 43, redColor);
            #endif
            sprite.setTextFont(0);
            sprite.setTextSize(bigSizeFont);
            sprite.setTextColor(TFT_WHITE, redColor);
            sprite.drawString(header, 3, 3);

            sprite.setTextSize(smallSizeFont);
            sprite.setTextColor(TFT_WHITE, TFT_BLACK);

            for (int i = 0; i < 6; i++) {
                sprite.drawString(*lines[i], 3, (lineSpacing * (2 + i)) - 2);
            }

            sprite.pushSprite(0,0);
        #else
            #ifdef HAS_EPAPER
                lastEpaperText = header + line1 + line2 + line3 + line4 + line5 + line6;
                display.clearMemory();
                display.setCursor(5,10);
                display.setFont(&FreeSansBold9pt7b);
                display.println(header);
                display.setFont(NULL);
                for (int i = 0; i < 6; i++) {
                    display.setCursor(0, 25 + (14 * i));
                    display.println(*lines[i]);
                }
                display.update();
            #else
                if (displayFound) {
                    display.clearDisplay();
                    display.setTextColor(SH110X_WHITE);
                    display.setTextSize(2);
                    display.setCursor(0, 0);
                    display.println(header);
                    display.setTextSize(1);
                    for (int i = 0; i < 6; i++) {
                        display.setCursor(0, 16 + (8 * i));
                        display.println(*lines[i]);
                    }
                    display.display();
                }
            #endif
        #endif
        delay(wait);
    #endif
}
OK - I have got the display working, I am not to thank for this though - I was playing around with AI to diagnose the issue: "The final fix involved using the correct library for your specific board, and then correctly handling the different function names and constants between the Adafruit_SSD1306 and Adafruit_SH110X libraries. " @MastarPete you might try and copy and paste and replace the existing display.cpp and see if this works for you too. ``` /* Copyright (C) 2025 Ricardo Guzman - CA2RXU * * This file is part of LoRa APRS iGate. * * LoRa APRS iGate is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * LoRa APRS iGate is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with LoRa APRS iGate. If not, see <https://www.gnu.org/licenses/>. */ #include <Wire.h> #include "configuration.h" #include "board_pinout.h" #include "display.h" #ifdef HAS_DISPLAY #ifdef HAS_TFT #include <TFT_eSPI.h> TFT_eSPI tft = TFT_eSPI(); TFT_eSprite sprite = TFT_eSprite(&tft); #ifdef HELTEC_WIRELESS_TRACKER #define bigSizeFont 2 #define smallSizeFont 1 #define lineSpacing 10 #endif #if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS) #define bigSizeFont 5 #define smallSizeFont 2 #define lineSpacing 25 #endif uint16_t redColor = 0xc8a2; #else #ifdef HAS_EPAPER #include <heltec-eink-modules.h> #include "Fonts/FreeSansBold9pt7b.h" EInkDisplay_WirelessPaperV1_1 display; String lastEpaperText; #else #include <Adafruit_SH110X.h> #if defined(TTGO_T_Beam_S3_SUPREME_V3) Adafruit_SH1106G display(128, 64, &Wire, OLED_RST); #else Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST); #endif #endif #endif #endif extern Configuration Config; bool displayFound = false; void displaySetup() { #ifdef HAS_DISPLAY delay(500); #ifdef HAS_TFT tft.init(); tft.begin(); if (Config.display.turn180) { tft.setRotation(3); } else { tft.setRotation(1); } pinMode(TFT_BL, OUTPUT); digitalWrite(TFT_BL, HIGH); tft.setTextFont(0); tft.fillScreen(TFT_BLACK); #if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS) sprite.createSprite(320,240); #else sprite.createSprite(160,80); #endif #else #ifdef HAS_EPAPER display.landscape(); display.printCenter("LoRa APRS iGate Initialising..."); display.update(); #else #ifdef OLED_DISPLAY_HAS_RST_PIN pinMode(OLED_RST, OUTPUT); digitalWrite(OLED_RST, LOW); delay(20); digitalWrite(OLED_RST, HIGH); #endif #if defined(TTGO_T_Beam_S3_SUPREME_V3) if (display.begin(0x3c)) { displayFound = true; if (Config.display.turn180) display.setRotation(2); display.clearDisplay(); display.setTextColor(SH110X_WHITE); display.setTextSize(1); display.setCursor(0, 0); display.setContrast(1); display.display(); } #else if(display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { displayFound = true; if (Config.display.turn180) display.setRotation(2); display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(0, 0); display.ssd1306_command(SSD1306_SETCONTRAST); display.ssd1306_command(1); display.display(); } #endif #endif #endif delay(1000); #endif } void displayToggle(bool toggle) { #ifdef HAS_DISPLAY if (toggle) { #ifdef HAS_TFT digitalWrite(TFT_BL, HIGH); #else #ifdef HAS_EPAPER display.printCenter("EPAPER Display Disabled by toggle..."); display.update(); #else if (displayFound) { #if defined(TTGO_T_Beam_S3_SUPREME_V3) display.oled_command(SH110X_DISPLAYON); #else display.ssd1306_command(SSD1306_DISPLAYON); #endif } #endif #endif } else { #ifdef HAS_TFT digitalWrite(TFT_BL, LOW); #else #ifdef HAS_EPAPER display.printCenter("Enabled EPAPER Display..."); display.update(); #else if (displayFound) { #if defined(TTGO_T_Beam_S3_SUPREME_V3) display.oled_command(SH110X_DISPLAYOFF); #else display.ssd1306_command(SSD1306_DISPLAYOFF); #endif } #endif #endif } #endif } void displayShow(const String& header, const String& line1, const String& line2, const String& line3, int wait) { #ifdef HAS_DISPLAY const String* const lines[] = {&line1, &line2, &line3}; #ifdef HAS_TFT sprite.fillSprite(TFT_BLACK); #if defined(HELTEC_WIRELESS_TRACKER) sprite.fillRect(0, 0, 160, 19, redColor); #endif #if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS) sprite.fillRect(0, 0, 320, 43, redColor); #endif sprite.setTextFont(0); sprite.setTextSize(bigSizeFont); sprite.setTextColor(TFT_WHITE, redColor); sprite.drawString(header, 3, 3); sprite.setTextSize(smallSizeFont); sprite.setTextColor(TFT_WHITE, TFT_BLACK); for (int i = 0; i < 3; i++) { sprite.drawString(*lines[i], 3, (lineSpacing * (2 + i)) - 2); } sprite.pushSprite(0,0); #else #ifdef HAS_EPAPER display.clearMemory(); display.setCursor(5,10); display.setFont(&FreeSansBold9pt7b); display.println(header); display.setFont(NULL); for (int i = 0; i < 3; i++) { display.setCursor(0, 25 + (14 * i)); display.println(*lines[i]); } display.update(); #else if (displayFound) { display.clearDisplay(); display.setTextColor(SH110X_WHITE); display.setTextSize(1); display.setCursor(0, 0); display.println(header); for (int i = 0; i < 3; i++) { display.setCursor(0, 8 + (8 * i)); display.println(*lines[i]); } display.display(); } #endif #endif delay(wait); #endif } void displayShow(const String& header, const String& line1, const String& line2, const String& line3, const String& line4, const String& line5, const String& line6, int wait) { #ifdef HAS_DISPLAY const String* const lines[] = {&line1, &line2, &line3, &line4, &line5, &line6}; #ifdef HAS_TFT sprite.fillSprite(TFT_BLACK); #if defined(HELTEC_WIRELESS_TRACKER) sprite.fillRect(0, 0, 160, 19, redColor); #endif #if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS) sprite.fillRect(0, 0, 320, 43, redColor); #endif sprite.setTextFont(0); sprite.setTextSize(bigSizeFont); sprite.setTextColor(TFT_WHITE, redColor); sprite.drawString(header, 3, 3); sprite.setTextSize(smallSizeFont); sprite.setTextColor(TFT_WHITE, TFT_BLACK); for (int i = 0; i < 6; i++) { sprite.drawString(*lines[i], 3, (lineSpacing * (2 + i)) - 2); } sprite.pushSprite(0,0); #else #ifdef HAS_EPAPER lastEpaperText = header + line1 + line2 + line3 + line4 + line5 + line6; display.clearMemory(); display.setCursor(5,10); display.setFont(&FreeSansBold9pt7b); display.println(header); display.setFont(NULL); for (int i = 0; i < 6; i++) { display.setCursor(0, 25 + (14 * i)); display.println(*lines[i]); } display.update(); #else if (displayFound) { display.clearDisplay(); display.setTextColor(SH110X_WHITE); display.setTextSize(2); display.setCursor(0, 0); display.println(header); display.setTextSize(1); for (int i = 0; i < 6; i++) { display.setCursor(0, 16 + (8 * i)); display.println(*lines[i]); } display.display(); } #endif #endif delay(wait); #endif } ``` <!-- github-comment-id:3217043781 -->
Author
Owner

@EI3HIB what were the changes?

@EI3HIB what were the changes? <!-- github-comment-id:3217044995 -->
Author
Owner

The primary change between the two versions of the code is the replacement of the Adafruit_SSD1306 library-specific functions and constants with their Adafruit_SH110X equivalents, all conditionally compiled to work for both display types.


displaySetup()

This function now includes a conditional check for TTGO_T_Beam_S3_SUPREME_V3 to use the correct functions and constants.

  • Before: The original code had a more complex conditional block for initializing the Adafruit_SSD1306 display.
  • After: The revised code simplifies this by using Adafruit_SH110X for the TTGO_T_Beam_S3_SUPREME_V3. The display.begin() call is changed from !display.begin(0x3c, false) to the more common if (display.begin(0x3c)). This ensures the display initializes correctly. The display.setTextColor() function is updated to use SH110X_WHITE instead of WHITE. The display.ssd1306_command(SSD1306_SETCONTRAST) and display.ssd1306_command(1) functions are replaced with a single display.setContrast(1).

displayToggle()

This function controls turning the display on and off.

  • Before: The original code used display.ssd1306_command(SSD1306_DISPLAYON) and SSD1306_DISPLAYOFF) for the SSD1306 display. For the TTGO_T_Beam_S3_SUPREME_V3 model, it had display.oled_command(SH110X_DISPLAYON) and SH110X_DISPLAYOFF.
  • After: The revised code now explicitly uses the correct commands for each board type. It correctly uses display.oled_command(SH110X_DISPLAYON) and display.oled_command(SH110X_DISPLAYOFF) for the TTGO_T_Beam_S3_SUPREME_V3 and keeps the old ssd1306_command for other boards. The redundant if (displayFound) check was also removed inside the TTGO_T_Beam_S3_SUPREME_V3 conditional block, as the logic flow already handles this.

displayShow()

Both displayShow() functions were modified to use SH110X_WHITE.

  • Before: The code used a conditional check to set the text color.
  • After: This check was simplified to display.setTextColor(SH110X_WHITE) for the TTGO_T_Beam_S3_SUPREME_V3 board and display.setTextColor(WHITE) for others.
The primary change between the two versions of the code is the **replacement of the `Adafruit_SSD1306` library-specific functions and constants with their `Adafruit_SH110X` equivalents**, all conditionally compiled to work for both display types. *** ### `displaySetup()` This function now includes a conditional check for `TTGO_T_Beam_S3_SUPREME_V3` to use the correct functions and constants. * **Before**: The original code had a more complex conditional block for initializing the `Adafruit_SSD1306` display. * **After**: The revised code simplifies this by using `Adafruit_SH110X` for the `TTGO_T_Beam_S3_SUPREME_V3`. The `display.begin()` call is changed from `!display.begin(0x3c, false)` to the more common `if (display.begin(0x3c))`. This ensures the display initializes correctly. The `display.setTextColor()` function is updated to use **`SH110X_WHITE`** instead of `WHITE`. The `display.ssd1306_command(SSD1306_SETCONTRAST)` and `display.ssd1306_command(1)` functions are replaced with a single `display.setContrast(1)`. *** ### `displayToggle()` This function controls turning the display on and off. * **Before**: The original code used `display.ssd1306_command(SSD1306_DISPLAYON)` and `SSD1306_DISPLAYOFF)` for the SSD1306 display. For the `TTGO_T_Beam_S3_SUPREME_V3` model, it had `display.oled_command(SH110X_DISPLAYON)` and `SH110X_DISPLAYOFF`. * **After**: The revised code now explicitly uses the correct commands for each board type. It correctly uses `display.oled_command(SH110X_DISPLAYON)` and `display.oled_command(SH110X_DISPLAYOFF)` for the `TTGO_T_Beam_S3_SUPREME_V3` and keeps the old `ssd1306_command` for other boards. The redundant `if (displayFound)` check was also removed inside the `TTGO_T_Beam_S3_SUPREME_V3` conditional block, as the logic flow already handles this. *** ### `displayShow()` Both `displayShow()` functions were modified to use `SH110X_WHITE`. * **Before**: The code used a conditional check to set the text color. * **After**: This check was simplified to `display.setTextColor(SH110X_WHITE)` for the `TTGO_T_Beam_S3_SUPREME_V3` board and `display.setTextColor(WHITE)` for others. <!-- github-comment-id:3217059313 -->
Author
Owner

can you test just this?

change line 104 to this:

if (!display.begin(0x3c)) {

instead of : if (!display.begin(0x3c, false)) {

and please validate if you uploaded it with the
#define OLED_DISPLAY_HAS_RST_PIN

or not

can you test just this? change line 104 to this: if (!display.begin(0x3c)) { instead of : if (!display.begin(0x3c, false)) { and please validate if you uploaded it with the #define OLED_DISPLAY_HAS_RST_PIN or not <!-- github-comment-id:3217062467 -->
Author
Owner

Yes I deleted the "#define OLED_DISPLAY_HAS_RST_PIN" line when uploading.

Will try that other change soon - just have to step away for a bit.

Yes I deleted the "#define OLED_DISPLAY_HAS_RST_PIN" line when uploading. Will try that other change soon - just have to step away for a bit. <!-- github-comment-id:3217077996 -->
Author
Owner

Yes I deleted the "#define OLED_DISPLAY_HAS_RST_PIN" line when uploading.

Will try that other change soon - just have to step away for a bit.

awesome

if the change for:
if (!display.begin(0x3c)) {

(without the false) is needed and also the deleting of the #define we have solve the issue for adding it to the full firmware

> Yes I deleted the "#define OLED_DISPLAY_HAS_RST_PIN" line when uploading. > > Will try that other change soon - just have to step away for a bit. awesome if the change for: if (!display.begin(0x3c)) { (without the false) is needed and also the deleting of the #define we have solve the issue for adding it to the full firmware <!-- github-comment-id:3217082219 -->
Author
Owner

if the change for: if (!display.begin(0x3c)) {

(without the false) is needed and also the deleting of the #define we have solve the issue for adding it to the full firmware

@richonguzman I just tried your fix but it did not work.
if (!display.begin(0x3c)) {

Image

I nuked the contents of display.cpp and pasted @EI3HIB's code and that worked.

Image

EDIT: The display works using EI3HIB's code but I don't think the rest of the code is working as it's not broadcasting the config AP

EDIT 2: I tried both suggestions twice, verified that the define ..RST_PIN line was deleted all four times.
if (!display.begin(0x3c)) { unfortunately is not enough, the display is still corrupted.

> if the change for: if (!display.begin(0x3c)) { > > (without the false) is needed and also the deleting of the #define we have solve the issue for adding it to the full firmware @richonguzman I just tried your fix but it did not work. `if (!display.begin(0x3c)) {` <img width="648" height="287" alt="Image" src="https://github.com/user-attachments/assets/1fe6f92c-7fe3-463f-8061-e16d5f663b54" /> I nuked the contents of display.cpp and pasted @EI3HIB's code and that worked. ![Image](https://github.com/user-attachments/assets/b72ae3db-f771-4ead-a7c3-83168df906a3) EDIT: The display works using EI3HIB's code but I don't think the rest of the code is working as it's not broadcasting the config AP EDIT 2: I tried both suggestions twice, verified that the define ..RST_PIN line was deleted all four times. `if (!display.begin(0x3c)) {` unfortunately is not enough, the display is still corrupted. <!-- github-comment-id:3217126497 -->
Author
Owner

I made that change to line 104 and screen just went back to being corrupted.

Reverted to my code above and screen came back (and it seemed like my settings had been saved from the working code?)

One thing to add, I left tracker_conf.json default and configured my settings over wifi once the screen started working - wondering if you're not seeing the config AP because you edited the json?

Image
I made that change to line 104 and screen just went back to being corrupted. Reverted to my code above and screen came back (and it seemed like my settings had been saved from the working code?) One thing to add, I left tracker_conf.json default and configured my settings over wifi once the screen started working - wondering if you're not seeing the config AP because you edited the json? <img width="706" height="606" alt="Image" src="https://github.com/user-attachments/assets/6916519a-5a2f-4e3f-8bc4-269a32bab75c" /> <!-- github-comment-id:3217172826 -->
Author
Owner

One thing to add, I left tracker_conf.json default and configured my settings over wifi once the screen started working - wondering if you're not seeing the config AP because you edited the json?

Nope. I didn't bother trying to edit the config.json because I was expecting to just use the config AP. Maybe I was a bit impatient and didn't give my system enough time to update the wifi list??
Otherwise I'm missing something about how VSCode works and it did actually remember the one time I attempted to edit it. Despite me closing the workspace and deleting all files from the expanded folder in my download directory, in-between flash attempts.

> One thing to add, I left tracker_conf.json default and configured my settings over wifi once the screen started working - wondering if you're not seeing the config AP because you edited the json? Nope. I didn't bother trying to edit the config.json because I was expecting to just use the config AP. Maybe I was a bit impatient and didn't give my system enough time to update the wifi list?? Otherwise I'm missing something about how VSCode works and it did actually remember the one time I attempted to edit it. Despite me closing the workspace and deleting all files from the expanded folder in my download directory, in-between flash attempts. <!-- github-comment-id:3217208552 -->
Author
Owner

ok.

we need to find exactly what is needed for the board to work ok with the mods but also so that i can add this to the main firmware and not have a custom T-Beam Supreme firmware that breaks all the other boards from working.

@EI3HIB and @MastarPete

what are the mods needed for it to work?
if (!display.begin(0x3c)) + deleting #define OLED_DISPLAY_HAS_RST_PIN ???

or is there another thing ? (please don't tell me about pasting the working display.cpp as this will only work for T-Beam Supreme and no other board 😂😂😂😂

ok. we need to find exactly what is needed for the board to work ok with the mods but also so that i can add this to the main firmware and not have a custom T-Beam Supreme firmware that breaks all the other boards from working. @EI3HIB and @MastarPete what are the mods needed for it to work? if (!display.begin(0x3c)) + deleting #define OLED_DISPLAY_HAS_RST_PIN ??? or is there another thing ? (please don't tell me about pasting the working display.cpp as this will only work for T-Beam Supreme and no other board 😂😂😂😂 <!-- github-comment-id:3218051241 -->
Author
Owner

Hi @EI3HIB and @MastarPete could you test and identify the single or the minimal mods needed for this to add to the "almost ready to share" new version for iGate?

Hi @EI3HIB and @MastarPete could you test and identify the single or the minimal mods needed for this to add to the "almost ready to share" new version for iGate? <!-- github-comment-id:3229494177 -->
Author
Owner

@richonguzman Sorry, as I said in my previous post, I still haven't had luck with your code suggestions. The display is corrupted and the wifi AP never shows up for me to even get it configured. I'm wondering if the ESP32 device environment isn't quite correct?? Or else the upload/flash somehow isn't clearing out old settings, causing a soft-lock.

I haven't coded enough to be able to contribute how to re-write whats there. I can somewhat follow along to make minor modifications to existing code but that's about it. To me, when I compared to the tracker display code, it looks like there's not enough code to define the screen for the iGate when running on a Supreme. If the code is pointing to another support library to define the display, then I've missed the pointer.

Side note. I was a little surprised that the iGate is using a different code structure in display.cpp and I can't help but wonder if that's contributing to something getting overlooked?? Then again, I am the noob here. ^_^

@richonguzman Sorry, as I said in my [previous post](https://github.com/richonguzman/LoRa_APRS_iGate/issues/307#issuecomment-3217126497), I still haven't had luck with your code suggestions. The display is corrupted and the wifi AP never shows up for me to even get it configured. I'm wondering if the ESP32 device environment isn't quite correct?? Or else the upload/flash somehow isn't clearing out old settings, causing a soft-lock. I haven't coded enough to be able to contribute how to re-write whats there. I can somewhat follow along to make minor modifications to existing code but that's about it. To me, when I compared to the tracker display code, it looks like there's not enough code to define the screen for the iGate when running on a Supreme. If the code is pointing to another support library to define the display, then I've missed the pointer. Side note. I was a little surprised that the iGate is using a different code structure in display.cpp and I can't help but wonder if that's contributing to something getting overlooked?? Then again, I am the noob here. ^_^ <!-- github-comment-id:3254810635 -->
Author
Owner

Any fix for this issue looming? I'm gasping to set my node up as an igate using this firmware but I'm having to make do with Nakhonthai's version currently.

Any fix for this issue looming? I'm gasping to set my node up as an igate using this firmware but I'm having to make do with Nakhonthai's version currently. <!-- github-comment-id:3433280652 -->
Author
Owner

Any fix for this issue looming? I'm gasping to set my node up as an igate using this firmware but I'm having to make do with Nakhonthai's version currently.

sorry, but i didn't have any confirmation about the exact mods that worked for @EI3HIB

If he can confirms that is only needed the deleting of a line... i will add this ASAP

> Any fix for this issue looming? I'm gasping to set my node up as an igate using this firmware but I'm having to make do with Nakhonthai's version currently. sorry, but i didn't have any confirmation about the exact mods that worked for @EI3HIB If he can confirms that is only needed the deleting of a line... i will add this ASAP <!-- github-comment-id:3442789997 -->
Author
Owner

It would be nice to hear back from @EI3HIB because I still can't replicate their result. I tried again over the last hour using every combination of modifications suggested above.

Nuking display.cpp and pasting that entire code blob just gets me the boot logo and nothing else. The wifi AP never shows up when I use my tablet and a wifi scanning app.

EI3HIB mentioned pre-configuring everything but did not clarify where they made the modifications. That could be the magic needed but I agree that's not a proper fix if the intent of the project is to webflash and be done.

It would be nice to hear back from @EI3HIB because I still can't replicate their result. I tried again over the last hour using every combination of modifications suggested above. Nuking display.cpp and pasting that entire code blob just gets me the boot logo and nothing else. The wifi AP never shows up when I use my tablet and a wifi scanning app. EI3HIB mentioned pre-configuring everything but did not clarify where they made the modifications. That could be the magic needed but I agree that's not a proper fix if the intent of the project is to webflash and be done. <!-- github-comment-id:3447856723 -->
Author
Owner

Just wanted to jump in and say +1 having the issue as well. Everything else works, just the display seems to be initializing incorrectly somehow.

Commenting out the reset define didn't work, nor did removing the false flag from the initialization.

This isn't a show-stopper for my use case, but I'll keep poking at it to see if I can get it to work.

Just wanted to jump in and say +1 having the issue as well. Everything else works, just the display seems to be initializing incorrectly somehow. Commenting out the reset define didn't work, nor did removing the false flag from the initialization. This isn't a show-stopper for my use case, but I'll keep poking at it to see if I can get it to work. <!-- github-comment-id:3453479463 -->
Author
Owner

Add me to the list of hams having this problem! I've followed the steps in this issue and seem to be in the same spot as everyone else:

  • Deleting #define OLED_DISPLAY_HAS_RST_PIN: No change
  • Modifying if (!display.begin(0x3c)) {: No change
  • Replacing display.cpp with @EI3HIB version: Display works!

I'm not a coder but will poke around and see if I can find a diff to your display.cpp that resolves this. I am available to try any additional ideas on my device. My Telegram username is @brianlefevre.

Add me to the list of hams having this problem! I've followed the steps in this issue and seem to be in the same spot as everyone else: - Deleting `#define OLED_DISPLAY_HAS_RST_PIN`: No change - Modifying `if (!display.begin(0x3c)) {`: No change - Replacing `display.cpp` with @EI3HIB version: Display works! I'm not a coder but will poke around and see if I can find a diff to your display.cpp that resolves this. I am available to try any additional ideas on my device. My Telegram username is `@brianlefevre`. <!-- github-comment-id:3499992633 -->
Author
Owner

I think I got it, submitted pull request #360 with one character fix. (@richonguzman did request "minimal mods!")

I think I got it, submitted pull request #360 with one character fix. (@richonguzman did request "minimal mods!") <!-- github-comment-id:3500272728 -->
Author
Owner

Yeah I think that did it! I used 3.1.4, removed that pesky ! and flashed with VsCode. Display worked and was able to access the Wifi AP.

Now if only I hadn't misconfigured it and locked myself out. 🤣🤦

Yeah I think that did it! I used 3.1.4, removed that pesky ! and flashed with VsCode. Display worked and was able to access the Wifi AP. Now if only I hadn't misconfigured it and locked myself out. 🤣🤦 <!-- github-comment-id:3505423449 -->
Author
Owner

@MastarPete , @cwb , @openincident , @MeshMouse , @Rentiu30 , @arizonajon1

time to test V.3.1.4.1 with the fix

@MastarPete , @cwb , @openincident , @MeshMouse , @Rentiu30 , @arizonajon1 time to test V.3.1.4.1 with the fix <!-- github-comment-id:3507251592 -->
Author
Owner

time to test V.3.1.4.1 with the fix

@richonguzman Works for me!

> time to test V.3.1.4.1 with the fix @richonguzman Works for me! <!-- github-comment-id:3507589363 -->
Author
Owner

Screen fixed, now different issue. After configuration via AP the device reboots, connects to my network then displays NOCALL-10 and error message "APRS PASSCODE NOT VALID!!!"

Wi-Fi AP is broadcasting but unable to connect to it.

Screen fixed, now different issue. After configuration via AP the device reboots, connects to my network then displays NOCALL-10 and error message "APRS PASSCODE NOT VALID!!!" Wi-Fi AP is broadcasting but unable to connect to it. <!-- github-comment-id:3507890803 -->
Author
Owner

Screen fixed, now different issue. After configuration via AP the device reboots, connects to my network then displays NOCALL-10 and error message "APRS PASSCODE NOT VALID!!!"

Wi-Fi AP is broadcasting but unable to connect to it.

save just the Callsign, lat+lng, Wifi credentials, aprs passcode and enable aprs-is connection en test again please

only letters and numbers as characters please

> Screen fixed, now different issue. After configuration via AP the device reboots, connects to my network then displays NOCALL-10 and error message "APRS PASSCODE NOT VALID!!!" > > Wi-Fi AP is broadcasting but unable to connect to it. save just the Callsign, lat+lng, Wifi credentials, aprs passcode and enable aprs-is connection en test again please only letters and numbers as characters please <!-- github-comment-id:3508220283 -->
Author
Owner

Screen fixed, now different issue. After configuration via AP the device reboots, connects to my network then displays NOCALL-10 and error message "APRS PASSCODE NOT VALID!!!"

Wi-Fi AP is broadcasting but unable to connect to it.

save just the Callsign, lat+lng, Wifi credentials, aprs passcode and enable aprs-is connection en test again please

only letters and numbers as characters please

All up and running, issues resolved. Happy days!

> > Screen fixed, now different issue. After configuration via AP the device reboots, connects to my network then displays NOCALL-10 and error message "APRS PASSCODE NOT VALID!!!" > > > > Wi-Fi AP is broadcasting but unable to connect to it. > > save just the Callsign, lat+lng, Wifi credentials, aprs passcode and enable aprs-is connection en test again please > > only letters and numbers as characters please All up and running, issues resolved. Happy days! <!-- github-comment-id:3508534557 -->
Author
Owner

VSCode wasn't properly flushing out the old settings properly so I didn't get a good run-through of getting it configured.
Now that a proper firmware is on the web flasher I've got it up an running, the display issue looks to be resolved!

I skipped setting a fixed position, the GPS eventually got a fix and updated the iGate's location.
Might be useful to add a "get location" button for devices with a gps?

VSCode wasn't properly flushing out the old settings properly so I didn't get a good run-through of getting it configured. Now that a proper firmware is on the web flasher I've got it up an running, the display issue looks to be resolved! I skipped setting a fixed position, the GPS eventually got a fix and updated the iGate's location. Might be useful to add a "get location" button for devices with a gps? <!-- github-comment-id:3508761033 -->
Author
Owner

VSCode wasn't properly flushing out the old settings properly so I didn't get a good run-through of getting it configured. Now that a proper firmware is on the web flasher I've got it up an running, the display issue looks to be resolved!

I skipped setting a fixed position, the GPS eventually got a fix and updated the iGate's location. Might be useful to add a "get location" button for devices with a gps?

if you enable to "SEND BEACON from GPS data" it will do it automatically

Glad it worked out!

> VSCode wasn't properly flushing out the old settings properly so I didn't get a good run-through of getting it configured. Now that a proper firmware is on the web flasher I've got it up an running, the display issue looks to be resolved! > > I skipped setting a fixed position, the GPS eventually got a fix and updated the iGate's location. Might be useful to add a "get location" button for devices with a gps? if you enable to "SEND BEACON from GPS data" it will do it automatically Glad it worked out! <!-- github-comment-id:3508779350 -->
Author
Owner

if you enable to "SEND BEACON from GPS data" it will do it automatically

Glad it worked out!

True, however even after it had a fix the Lat/long never populated on its own. It just stays 0/0 so there's no feedback to indicate that is how it works.
I just figured It would be nice to get a fix without beaconing.

> if you enable to "SEND BEACON from GPS data" it will do it automatically > > Glad it worked out! True, however even after it had a fix the Lat/long never populated on its own. It just stays 0/0 so there's no feedback to indicate that is how it works. I just figured It would be nice to get a fix without beaconing. <!-- github-comment-id:3508822352 -->
Author
Owner

if you enable to "SEND BEACON from GPS data" it will do it automatically
Glad it worked out!

True, however even after it had a fix the Lat/long never populated on its own. It just stays 0/0 so there's no feedback to indicate that is how it works. I just figured It would be nice to get a fix without beaconing.

there is no way to show on screen the values the gps has (for now)

> > if you enable to "SEND BEACON from GPS data" it will do it automatically > > Glad it worked out! > > True, however even after it had a fix the Lat/long never populated on its own. It just stays 0/0 so there's no feedback to indicate that is how it works. I just figured It would be nice to get a fix without beaconing. there is no way to show on screen the values the gps has (for now) <!-- github-comment-id:3508824024 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/LoRa_APRS_iGate#205