📦 Biblioteka do obsługi zestawu InConsole na ESP32
Dedykowana dla młodych konstruktorów, graczy i pasjonatów elektroniki, którzy chcą mieć kompletną i czytelną bibliotekę do swojego zestawu edukacyjnego z ESP32 — prosto, bez kombinacji, a jednocześnie elastycznie i solidnie.
| Moduł / Klasa | Opis |
|---|---|
🧠 InConsole |
Podstawowa klasa inicjalizująca zestaw, obsługa przycisków, buzzer, TFT i SD |
To jest Twój główny sterownik — pełna obsługa sprzętu w jednym miejscu.
Przed użyciem InConsoleLib musisz mieć zainstalowane:
-
TFT_eSPI
https://github.com/Bodmer/TFT_eSPI
Wydajna biblioteka graficzna dla wyświetlaczy TFT, używana zamiast Adafruit ST7735 i GFX. W celu poprawnego działania należy samodzielnie pobrać i zainstalować TFT_eSPI, a następnie zastąpić plikUser_setup.hdostarczony w tym projekcie.Uwaga: Biblioteka TFT_eSPI pozostaje własnością oryginalnego autora! Proszę zapoznać się z warunkami licencji tej biblioteki w jej repozytorium.
-
Upewnij się również, że masz zainstalowaną platformę esp32 w preferencjach Arduino IDE: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
tak powinno wyglądać twoje okienko w ustawieniach:
Inicjalizuje cały zestaw:
- UART (Serial 115200)
- Konfiguracja pinów przycisków i buzzera
- Uruchomienie SPI dla TFT i SD (dwa różne SPI!)
- Inicjalizacja wyświetlacza TFT (Adafruit_ST7735)
- Inicjalizacja karty SD, sprawdzenie dostępności i komunikat na TFT oraz Serialu
Wszystkie przyciski działają na zasadzie wykrywania pojedynczego naciśnięcia (krawędź opadająca):
bool readButtonA(); // przycisk A
bool readButtonB(); // przycisk B
bool readStart(); // przycisk Start
bool readSelect(); // przycisk SelectUwaga: Przycisk zwraca true tylko w momencie wykrycia naciśnięcia, nie trzyma stanu.
Dodatkowo dostępne są funkcje zwracające true dopóki przycisk jest wciśnięty (czyli trzymają stan przytrzymania):
bool pressedButtonA(); // przycisk A - zwraca true, gdy jest wciśnięty
bool pressedButtonB(); // przycisk B - zwraca true, gdy jest wciśnięty
bool pressedStart(); // przycisk Start - zwraca true, gdy jest wciśnięty
bool pressedSelect(); // przycisk Select - zwraca true, gdy jest wciśniętyUwaga: Te funkcje zwracają true tak długo, jak przycisk jest fizycznie wciśnięty, a nie tylko przy pojedynczym naciśnięciu.
Prosta funkcja beep:
void beep(int duration_ms); // Dźwięk buzzera na określony czas (ms)bool SD_ok(); // true jeśli karta SD jest gotowa i dostępnafloat readBatteryVoltage(); // Napięcie baterii
int batteryVoltageToPercent(float voltage); // Procent naładowania bateriiWykorzystywany jest sterownik TFT_eSPI podłączony do SPI HSPI na pinach:
| Funkcja | Pin ESP32 |
|---|---|
| TFT_CS | 16 |
| TFT_RST | 4 |
| TFT_DC | 2 |
| TFT_SCLK | 21 |
| TFT_MOSI | 22 |
Wyświetlacz inicjalizowany jest z rotacją 3 i czarnym tłem.
SD działa na SPI VSPI z pinami:
| Funkcja | Pin ESP32 |
|---|---|
| SD_CS | 5 |
| SD_MOSI | 23 |
| SD_MISO | 19 |
| SD_SCLK | 18 |
Twoja biblioteka już inicjalizuje wyświetlacz TFT, więc poniżej znajdziesz skróconą dokumentację najczęściej używanych funkcji z biblioteki TFT_eSPI, które pozwolą Ci tworzyć GUI, teksty i kształty graficzne na ekranie.
- Gotowe kolory znajdziesz np. w
TFT_BLACK,TFT_WHITE,TFT_RED,TFT_GREEN,TFT_BLUE,TFT_YELLOW, itd. - Własne kolory:
uint16_t kolor = ic.tft.color565(255, 128, 0); // RGB → pomarańczowy
- Funkcje do wyświetlania tekstu:
ic.tft.setTextColor(TFT_WHITE, TFT_BLACK); // kolor tekstu i tła (tło opcjonalne) ic.tft.setTextSize(2); // skalowanie czcionki (1 = normalny rozmiar) ic.tft.setCursor(10, 20); // ustaw pozycję x, y (piksele) ic.tft.print("Witaj!"); // wypisz tekst
- Pamiętaj, że tekst jest rysowany od aktualnej pozycji kursora.
- Domyślna czcionka to GLCD (5x7). Możesz ładować większe fonty, np.
ic.tft.setFreeFont(FSS12);.
- Linie i kształty do szybkiego GUI:
ic.tft.drawPixel(x, y, TFT_WHITE); // Jeden pixel ic.tft.drawLine(x0, y0, x1, y1, TFT_BLUE); // Linia ic.tft.drawRect(x, y, w, h, TFT_GREEN); // Prostokąt ic.tft.fillRect(x, y, w, h, TFT_RED); // Wypełniony Prostokąt ic.tft.drawCircle(x, y, r, TFT_YELLOW); // Okrąg ic.tft.fillCircle(x, y, r, TFT_CYAN); // Wypełniony Okrąg ic.tft.drawRoundRect(x, y, w, h, radius, TFT_ORANGE); // Zaokrąglony Prostokąc ic.tft.fillRoundRect(x, y, w, h, radius, TFT_MAGENTA); // Wypełniony Zaokrąglony Prostokąt
- Szybkie czyszczenie:
ic.tft.fillScreen(TFT_BLACK); // czyszczenie
- Wyłączenie lub włączenie wyświetlania (np. do oszczędzania energii):
ic.tft.writecommand(TFT_DISPOFF); // ekran wyłączony ic.tft.writecommand(TFT_DISPON); // ekran włączony
- Pamiętaj aby przed
tftdodaćic. - Kolory i pozycje miej na uwadze względem rozdzielczości 128x160 px.
- Optymalizuj rysowanie, minimalizując niepotrzebne czyszczenia i rysowanie dużych elementów na nowo.
InConsoleLib obsługuje kartę SD przez interfejs SPI, umożliwiając zapisywanie i odczytywanie danych, np. wyników, zapisów gier czy ustawień.
| Funkcja | Opis |
|---|---|
File file = SD.open("/plik.txt") |
Otwiera plik do odczytu |
File file = SD.open("/plik.txt", FILE_WRITE) |
Otwiera plik do zapisu (tworzy, jeśli nie istnieje) |
file.println("tekst") |
Zapisuje linię tekstu do otwartego pliku |
file.read(), file.parseInt() |
Czyta dane z otwartego pliku |
file.close() |
Zamyka otwarty plik (zawsze wymagane!) |
SD.exists("/plik.txt") |
Sprawdza, czy plik istnieje |
SD.remove("/plik.txt") |
Usuwa wskazany plik |
File file = SD.open("/save.txt");
if (file) {
int value = file.parseInt(); // Odczytuje liczbę z pliku
file.close();
}File file = SD.open("/save.txt", FILE_WRITE);
if (file) {
file.println(123); // Zapisuje liczbę do pliku
file.close();
}if (SD.exists("/save.txt")) {
SD.remove("/save.txt"); // Usuwa plik
}- Ścieżki zawsze zaczynają się od
/, np."/highscore.txt" - System plików: FAT16 / FAT32
- Zawsze zamykaj plik po odczycie/zapisie (
file.close()) - Nie otwieraj/zamykaj plików zbyt często w
loop()— oszczędzaj RAM i cykle - Pliki są przechowywane na karcie SD w głównym katalogu
#include "ic.h"
void setup() {
ic.begin();
if(ic.SD_ok()) {
Serial.println("Karta SD gotowa!");
} else {
Serial.println("Brak karty SD!");
}
}
void loop() {
if(ic.readButtonA()) {
ic.beep(100); // sygnał buzzera po naciśnięciu A
}
}- Zainstaluj środowisko
Arduino IDE. - Pobierz bibliotekę
InConsoleLibi umieść folder wArduino/libraries. - Zainstaluj wymagane bibliotekę TFT_eSPI przez Menadżera bibliotek Arduino.
- Zastąpi plik
User_setup.hznajdujący się wAdruino/libraries/TFT_eSPIna ten dostarczony w tym projekcie. - Upewnij się, że masz zainstalowaną platformę ESP32 (esp32/arduino).
- Uruchom ponownie Arduino IDE.
- Podłącz ESP32 i skompiluj swoje projekty.
-
Dwa SPI:
- TFT używa HSPI (piny 21/22/16)
- SD używa VSPI (piny 23/19/18/5)
To jest kluczowe, bo mieszanie może powodować błędy komunikacji.
-
Przyciski: Są podciągnięte wewnętrznie (INPUT_PULLUP) – stan niski oznacza naciśnięcie.
-
Buzzer: prosty on/off na pin 33 sterowany tranzystorem.
-
Wyświetlacz: Ustawiony na rotację 3, by obraz był dobrze orientowany względem fizycznego montażu.
-
SD: Sprawdzaj stan przed odczytem/zapisem. Brak karty wyświetlany jest na TFT czerwonym kolorem.
Mateusz Lademann (InGraw Co.)
Ten projekt jest udostępniany na licencji Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0).
Oznacza to, że:
- możesz kopiować, modyfikować, rozpowszechniać i tworzyć na bazie tego projektu,
- musisz podać autora: Mateusz Lademann (InGraw Co.),
- nie możesz używać tego projektu do celów komercyjnych ani sprzedawać go.
🔗 Pełny tekst licencji dostępny jest pod adresem:
https://creativecommons.org/licenses/by-nc/4.0/deed.pl
Na podstawie projektu autorstwa Mateusza Lademanna (InGraw Co.)
Źródło: https://github.com/InGraw-Co/InConsoleLibLicencja: CC BY-NC 4.0
📈 Z InConsole nauczysz się lutowania, programowania i elektroniki krok po kroku – pełna kontrola sprzętu, zero magii, tylko jasny kod i działanie.

