Chytrá WiFi zásuvka Sonoff S26
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
Arduino dotykový LCD display o velikosti 3,2" obsahuje TFT LCD modul s dotykovou obrazovkou a SD slotem. Tento LCD displej je řízen řadičem ILI9341 s 16 bitovým módem, umožňuje zobrazit až 262 tisíc barev a komunikuje po rozhraní SPI. Samotný displej pak disponuje rozlišením 240 x 320 pixelů. Pro detekci dotyku je použita rezistivní dotyková vrstva, která umožňuje detekovat najednou pouze jeden stisk, přičemž je doporučeno používat přibalený stylus pro přesnější dotyk. Dotyková vrstva pak stejně jako displej komunikuje po rozhraní SPI. Celý displej je možné napájet pouze napětím o velikosti 3,3 Voltů a proto je vhodné použít TFT Shield pro desku Arduino Mega 2560.
Pro úspěšné propojení dotykového displeje s Arduinem tedy stačí do desky Arduino Mega zapojit Arduino Mega TFT LCD shield a do něj poté zapojit samotný dotykový LCD displej. Druhá možnost zapojení je využití odporových děličů obdobně jako v tomto návodu, ale u displeje 3,2" bychom museli zapojit více než 20 datových vodičů pomocí jednotlivých děličů nebo využít specializované obvody pro převod napěťových úrovní, přičemž tyto obvody jsou přítomny právě v použitém TFT Shieldu.
Pro správnou funkci uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovny UTFT a TFT_Touch, návod jak na to je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven a deklaraci fontů pro použitá písma. Poté následuje vytvoření proměnných pro nastavení dotykového displeje a inicializace displeje s dotykovou vrstvou z příslušných knihoven. V podprogramu setup jako první provedeme kalibraci dotykové vrstvy a zahájíme komunikaci s displejem. Dále se v programu nachází vyčištění obrazovky a poté ukázka různých nastavení displeje a tisk různých typů dat. Nejprve je uvedena ukázka nastavení barvy pro kreslení pomocí RGB složek (R-červená, G-zelená, B-modrá), po které následuje nakreslení dvou plných obdélníků různých barev na daných souřadnicích. Dále pokračuje společně s nastavením barvy pozadí ukázka tisknutí textu na střed souřadnic osy X a danou souřadnici 1 osy Y. Zbytek podprogramu setup tedy ve zkratce vykoná prvotní tisk obrazovky jako přípravu na samotný běh nekonečné smyčky, protože pokud bychom tiskli všechny údaje každý běh loop smyčky, trval by tisk všech údajů zbytečně dlouho a zpožďoval nám program. Tisk různých tvarů a barev je důkladně popsán pomocí komentářů v kódu, můžeme se tedy přesunout na nekonečnou smyčku loop. V této smyčce probíhá detekce dotyku na displeji. Tato detekce pod podmínkou if obsahuje vytvoření proměnných pro uložení souřadnic stisku, do kterých jsou po jejich vytvoření ihned uloženy výsledky. Poté proběhne nastavení barvy a velikosti písma pro tisk výsledků a následně nejprve vymažeme předchozí výsledek pomocí vytištění mezer a poté na stejné souřadnice vytiskneme získané souřadnice stisku X a Y. Na konci této detekce pak ještě ověříme, zda nebyl detekován stisk ve vytvořeném obdélníku. Pokud je detekován stisk uvnitř, vypíšeme do obdélníka text, v opačném případě opět vyplníme místo mezerami. Pro získání detekčního rozsahu pro osu X a Y stačí „vyměřit“ obdélník pomocí stisku krajních bodů, kdy zjistíme krajové hodnoty a tyto zapíšeme do podmínky if (dotykX..). Na konci programu se nachází už jen pauza po dobu 20 milisekund, která slouží hlavně pro novou detekci stisku na displeji.
// Arduino dotykový LCD display 3,2" ILI9341 // připojení potřebných knihoven #include <UTFT.h> #include <TFT_Touch.h> // deklarace fontů pro použitá písma extern uint8_t SmallFont[]; extern uint8_t BigFont[]; extern uint8_t SevenSegNumFont[]; // vytvoření proměnných pro nastavení dotykového displeje #define HMIN 0 // minimum pro souřadnici X #define HMAX 4095 // maximum pro souřadnici X #define VMIN 0 // minimum pro souřadnici Y #define VMAX 4095 // maximum pro souřadnici Y #define XYSWAP 1 // nastavení pro správnou orientaci os X a Y // nastavení velikosti displeje pro správnou detekci dotyku #define HRES 320 // počet pixelů na ose X #define VRES 240 // počet pixelů na ose Y // inicializace LCD displeje z knihovny UTFT displej(ILI9341_16, 38, 39, 40, 41); // inicializace řadiče dotykové vrstvy z knihovny TFT_Touch dotyk = TFT_Touch(5, 6, 4, 3); void setup() { // kalibrace dotykové vrstvy dotyk.setCal(HMIN, HMAX, VMIN, VMAX, HRES, VRES, XYSWAP); // zahájení komunikace s displejem a vyčištění obrazovky displej.InitLCD(); displej.clrScr(); // nastavení barvy - R, G, B (červená, zelená, modrá) // každá barva má rozsah 0 až 255, v tomto případě tedy // budeme používat červenou displej.setColor(255, 0, 0); // nakreslení plného obdélníka, souřadnice ve tvaru [X, Y] // souřadnice krajních bodů [0, 0] a [319, 13] displej.fillRect(0, 0, 319, 13); // nastavení bílé barvy displej.setColor(255, 255, 255); // nakreslení plného obdélníka, // souřadnice krajních bodů [0, 226] a [319, 239] displej.fillRect(0, 226, 319, 239); // nastavení nejmenšího písma displej.setFont(SmallFont); // nastavení barvy pozadí na červenou displej.setBackColor(255, 0, 0); // vytištění textu na střed osy X a první pixel osy Y displej.print("* Navody.dratek.cz *", CENTER, 1); // nastavení světle šedé barvy na pozadí displej.setBackColor(64, 64, 64); // nastavení modré barvy displej.setColor(0, 0, 255); // nakreslení obrysu obdélníka na zadané souřadnice displej.drawRect(0, 14, 319, 225); // nastavení bílé barvy displej.setColor(255, 255, 255); // vytištění textu na střed osy X a 20. pixel osy Y displej.print("Arduino dotykovy LCD display 3,2\"", CENTER, 20); // nastavení písma ve stylu sedmisegmentového displeje displej.setFont(SevenSegNumFont); // vytištění čísla 123 na souřadnice [90, 110] displej.printNumI(123, 90, 110); // nastavení velkého písma displej.setFont(BigFont); // vytištění textu na střed osy X a zadané souřadnice osy Y displej.print("x:", CENTER, 40); displej.print("y:", CENTER, 80); // nakreslení čáry, spojení souřadnic [50, 100] a [150, 200] displej.drawLine(50, 100, 150, 200); // nakreslení obdélníkového tlačítka zelenou čárou, // souřadnice krajních bodů [20, 150] do [90, 210] displej.setColor(0, 255, 0); displej.drawRect(20, 150, 90, 210); // nakreslení plného červeného kruhu, // střed na souřadnici [250, 180], poloměr 20 displej.setColor(255, 0, 0); displej.fillCircle(250, 180, 20); // nakreslení obrysu žlutého kruhu, // střed na souřadnici [250, 180], poloměr 40 displej.setColor(255, 255, 0); displej.drawCircle(250, 180, 40); } void loop() { // pokud je detekován dotyk na displeji, provedeme následující příkazy if (dotyk.Pressed()) { // vytvoření proměnných pro uložení souřadnic stisku unsigned int dotykX; unsigned int dotykY; // načtení souřadnice X a Y dotyku do proměnných dotykX = dotyk.RawX(); dotykY = dotyk.RawY(); // nastavení bílé barvy písma a černé na pozadí displej.setColor(255, 255, 255); displej.setBackColor(0, 0, 0); // nastavení velkého písma displej.setFont(BigFont); // vymazání předchozího tisku pomocí vytištění mezer displej.print(" ", 180, 40); displej.print(" ", 180, 80); // vytištění souřadnic dotyku na zadané souřadnice displeje displej.printNumI(dotykX, 180, 40); displej.printNumI(dotykY, 180, 80); // nastavení malého písma displej.setFont(SmallFont); // pokud je detekován stisk uvnitř zeleného obdélníka, // vypíšeme do obdélníka text Stisk!, // jinak nahradíme nápis mezerami if (dotykX > 670 & dotykX < 1400 & dotykY > 740 & dotykY < 1500 ) { displej.print("Stisk!", 35, 175); } else { displej.print(" ", 35, 175); } } // pauza před další detekcí dotyku delay(20); }
Po nahrání ukázkového kódu do Arduino desky s připojeným LCD displejem 3,2" dostaneme například tento výsledek:
Arduino dotykový LCD display o velikosti 3,2" je velice šikovným zobrazovacím prvkem pro Arduino, který lze využít pro zobrazení nejrůznějších údajů. Lze ho tedy použít jako ovládací prvek, vlastní hodiny či třeba jako základ pro displej meteostanice. Je však nutné zdůraznit, že je doporučeno využít ho v kombinaci se zmíněným TFT Shieldem pro Arduino Mega a deskou Arduino Mega 2560. Shield je důležitý hlavně pro splnění napájení napětím 3,3 V a Arduino Mega deska pak kvůli obsazení většího počtu pinů a velikosti kódu. Pokud budete chtít využít také SD kartu, lze s ní pracovat obdobně jako v tomto návodu, stačí pouze změnit datový pin sd_CS na pin 53.
Seznam použitých komponent:
http://dratek.cz/arduino/989-arduino-dotykovy-lcd-display-3-2-1427736404.html
http://dratek.cz/arduino/988-arduino-mega-tft-lcd-shield-1427735951.html
http://dratek.cz/arduino/946-arduino-atmega2560-kabel-1423598706.html
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
e-Paper displeje už jsou dostupné i pro bastlení za rozumné ceny a pro jejich ovládání se hodí tento Driver.