Ahoj, vítám vás na stránkách mého ročníkového projektu

 

Téma projektu: Šachy

Úvod:
Protože jsem úplný začátečník v programování elektroniky a zároveň miluji šachy, rozhodl jsem se jako svůj úplně první projekt vytvořit prostředí pro hru dvou hráčů, kdy se na displeji bude zobrazovat šachovnice s rozehranou hrou. Díky použití displeje s dotykovou vrstvou se pohyb figurek po šachovnici bude ovládat jednoduše dotykem na displeji a druhý menší OLED displej bude sloužit jako šachové hodiny. Program nijak nekontroluje, zda hra probíhá podle pravidel, to je na hráčích.

Použité součástky:

Popis:
Jako základ projektu jsem použil desku s modulem ESP-WROOM-32 s připojeným 5" TFT displejem Nextion NX8048P050-011R s rozlišením 800 x 480 pixelů, který slouží k zobrazení hracího pole. Z řady displejů Nextion se musí použít displej Intelligent Series, protože u něj lze programově měnit souřadnice zobrazovaných komponent. K ESP-32 je dále připojený malý OLED displej k zobrazení šachových hodin a tlačítka pro ovládání hodin + tlačítko RESET. Zkoušel jsem šachové hodiny zobrazovat přímo na displeji Nextion, ale zde se projevila rychlost (přesněji "pomalost") sériové sběrnice a hodiny se špatně překreslovaly - čas neběžel plynule.

Vývoj zařízení:
Připravil jsem si obrázky s šachovnicí a figurkami - použil jsem volně dostupný zdroj z Creazilly. Z něj jsem v GIMPu vykopíroval jednotlivé figurky. Každá je potřeba ve 4 verzích - na bílém pozadí, na šedivém pozadí, označená na bílém pozadí a označená na šedém pozadí - celkem tedy 48 ikon. Rozměr jsem nastavil na 50x50px, viz příklad:
 
Jako podklad pro hru jsem připravil šachovnici o rozměru displeje 800x480px (čtvercová šachovnice 480x480px s bílými obdélníky na stranách, které doplňují šířku do celkových 800px):

Programování Nextion displeje se provádí v Nextion editoru. Do něj jsem nahrál všechny ikony a šachovnici. Pak jsem vytvořil nad každé pole šachovnice komponentu typu Hotspot, 32 komponent typu Dual-state button, které mají ve výchozím stavu přiřazený obrázek figurky, pole po stranách a dvě tlačítka "Menu" a "Nová hra":

Dual-state buttony jsem nastavil tak, aby se při jejich stisknutí změnil jejich obrázek na "označený", případně "neoznačený". Komponenty Hotspot jsem nastavil tak, aby se po jejich stisknutí našel označený Dual-state button a ten se změnou souřadnic přesunul na pozici stisknutého Hotspotu. Popis se zdá být komplikovaný, ale vše je vidět v programu, jedná se o podmínky if v Touch Press Eventu.

Když jsem měl hotovou logiku hry a vše mi fungovalo, rozhodl jsem se rozšířit možnosti o další typ hry Chess960, k tomu stačilo pouze zkopírovat hru Standard a změnit výchozí postavení figurek:

Jako výchozí obrazovka slouží pouze strana s několika tlačítky, kterými lze nastavit čas u šachových hodin, přečíst si některá pravidla hry a vybrat hru Standard nebo Chess960. Akce, spouštěné tlačítky, jsou zřejmé z programu.


Pro vývoj software jsem použil desku s ESP-WROOM-32 a dvě nepájivé kontaktní pole:

Nextion displej jsem připojil pomocí pinů RX a TX k ESP-32. Pokud jsem na ESP-32 použil piny RXD a TXD (34 a 35), nešel do ESP nahrávat program a vždy jsem musel displej odpojit. Proto jsem použil piny 16 a 17, na které je nastavena použitá knihovna Nextion.h. Program pro ESP-32 jsem se snažil důkladně okomentovat, proto jej nemá cenu zde rozebírat. K jeho funkčnosti potřebujete knihovny ITEALIB_Arduino_Nextion a Adafruit_SSD1306.

 

Zdrojový kód pro displej Nextion, do ESP-32 a soubory pro 3d tisk najdete na mém Githubu:

Github - Nextion Chess: https://github.com/Luxeaks/Nextion-Chess
 

Schéma zapojení:

 

Kompletace projektu:

Na 3D tiskárně jsem si nechal vytisknout krabičku, do které vše namontuji:



a menší box pro OLED displej:

Krabičku jsem osadil konektorem, tlačítky, bzučákem a vteřinovým lepidlem na ní přilepil box pro OLED displej:

Malý box jsem osadil OLED displejem:


a displej Nextion jsem se nakonec rozhodl přišroubovat 4 šrouby, pro které jsem musel vyvrtat díry:


Původně jsem chtěl Nextion displej přilepit (tavnou pistolí), ale protože je displej poměrně drahý a může se stát, že ho později použiji i na jiné projekty, rozhodl jsem se pro možnost snadné demontáže. Další důvod pro šrouby je ten, že po vložení displeje do krabičky není přístupný slot pro SD kartu a pokud by displej nešel vyjmout, musel by se případný upravený program nahrávat po sériové sběrnici, což je hodně pomalé. Připojení SD karty by šlo snadno vyřešit i prodlužovacím adaptérem.

Pak už jen stačí podle schématu pospojovat napájení, oba displeje, tlačítka a bzučák s ESP-32:

 

Ukázka hotového díla:


 

Poděkování:

Velké poděkování patří mému otci, který mi poskytl přístup ke svým zásobám součástek, připájel drátky, kde nešly použít konektory a který mi pomohl s konečnou podobou projektu. Vytiskl mi krabičku na 3D tiskárně. Také mi s kreslením schémat. V neposlední řadě mi nahrál videa na svůj YouTube kanál.


Použité zdroje: