ILI9341 not working when WiFi is on

Aero9409
Posts: 1
Joined: Sun Dec 08, 2024 10:00 am

ILI9341 not working when WiFi is on

Postby Aero9409 » Sun Dec 08, 2024 10:29 am

From the beginning, I had problems with the ILI9341 display and the ESP32 board, when WiFi is on, nothing can be written on the display or random rows of pixels are displayed. Please help.

Here's my code

#include <WiFi.h>
#include <TFT_eSPI.h> // Knihovna pro TFT displej
#include <SPI.h>
//#include <FreeRTOS.h> // FreeRTOS knihovna pro tasky, semafory, mutexy
//#define TFT_CS 15

const char* ssid = "YourSSID";
const char* password = "YourPassword";

TFT_eSPI tft = TFT_eSPI(); // Objekt pro TFT displej

TaskHandle_t Task1; // Handle pro Task 1 (Wi-Fi připojení)
TaskHandle_t Task2; // Handle pro Task 2 (Vykreslování na displej)

// Mutex pro sdílení dat
SemaphoreHandle_t wifiMutex;

String wifiStatus = "Connecting to Wi-Fi..."; // Sdílená proměnná pro stav Wi-Fi

void setup() {
Serial.begin(115200); // Inicializace sériového portu pro ladění
// SPI.begin(18, 19, 23, 15);
tft.begin(); // Inicializace displeje
tft.setRotation(3); // Nastavení rotace displeje
tft.fillScreen(TFT_BLACK); // Vyčištění displeje
tft.setCursor(0, 0); // Nastavení pozice kurzoru
tft.setTextColor(TFT_WHITE); // Barva textu
tft.setTextSize(2); // Velikost textu
tft.print(wifiStatus);

// Inicializace mutexu
wifiMutex = xSemaphoreCreateMutex();

// Začínáme úkoly na různých jádrech
xTaskCreatePinnedToCore(WifiTask, "WiFi Task", 10000, NULL, 1, &Task1, 0); // Task na jádru 0
xTaskCreatePinnedToCore(DisplayTask, "Display Task", 10000, NULL, 1, &Task2, 1); // Task na jádru 1
}

void loop() {
// Hlavní smyčka může být prázdná, protože úkoly běží na pozadí
}

// Funkce pro připojení k Wi-Fi (spustí se na jádru 0)
void WifiTask(void *parameter) {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); // Pokus o připojení k Wi-Fi
Serial.print("Connecting to Wi-Fi...");

// Čekání na připojení k Wi-Fi
while (WiFi.status() != WL_CONNECTED) {
delay(1000); // Čekáme 1 sekundu mezi pokusy
Serial.print(".");
}

// Když se Wi-Fi připojí, aktualizujeme stav
// Získáme mutex pro úpravu sdílené proměnné
xSemaphoreTake(wifiMutex, portMAX_DELAY); // Čekáme na zámek mutexu

wifiStatus = "Wi-Fi connected!"; // Aktualizujeme stav Wi-Fi
Serial.println("Wi-Fi connected!");

xSemaphoreGive(wifiMutex); // Uvolníme mutex
}

// Funkce pro vykreslování na displej (spustí se na jádru 1)
void DisplayTask(void *parameter) {
unsigned long previousMillis = 0; // Časovač pro aktualizaci displeje
const long interval = 1000; // Interval pro vykreslování

while (true) {
unsigned long currentMillis = millis();

// Pokud uplynul interval pro vykreslení
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;

// Získáme mutex pro čtení sdílené proměnné
xSemaphoreTake(wifiMutex, portMAX_DELAY); // Čekáme na zámek mutexu

// Ladicí výstup
Serial.println("Refreshing display...");

// Aktualizujeme displej podle stavu Wi-Fi
tft.fillScreen(TFT_BLACK); // Vyčištění displeje
tft.setCursor(0, 0); // Nastavení pozice kurzoru
tft.setTextColor(TFT_WHITE); // Barva textu
tft.setTextSize(2); // Velikost textu
tft.print(wifiStatus); // Zobrazení stavu Wi-Fi
Serial.println(wifiStatus);

xSemaphoreGive(wifiMutex); // Uvolníme mutex
}
}
}

Who is online

Users browsing this forum: No registered users and 25 guests