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.
OLED displej s bílými znaky má v porovnání s alfanumerickými LCD displeji mnoho výhod. Patří mezi například vyšší rozlišení (v tomto případě 128x64 bodů) či nižší spotřeba. Právě nižší spotřeby je dosaženo tím, že u OLED displeje svítí pouze ty body, které jsou aktivovány. Pro článek vybraný OLED displej obsahuje řídící obvod SSD1306, který obstarává komunikaci s Arduinem po rozhraní I2C či SPI, v tomto případě je použita sběrnice I2C. Co se týká velikosti, tak tento displej má úhlopříčku 0,96 palce a celková velikost modulu je 2,7 x 2,7 cm.
Pro propojení OLED displeje s Arduino deskou je nutné propojit celkem 4 vodiče. Propojíme Vcc s +5V pinem na Arduinu, GND se zemí, SCL s pinem A5 a SDA s pinem A4. Piny SDA a SCL jsou ovládací piny I2C sběrnice a uvedené propojení s A4 a A5 platí pro desky založené na UNO, tedy Atmega328. Například Arduino Mega2560 obsahuje samostatné piny SDA a SCL.
Pro správné přeložení a nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu U8Glib_OLED, návod jak na to je uveden zde. Ukázkový kód obsahuje na začátku připojení potřebné knihovny a jako další krok inicializaci OLED displeje z knihovny U8glib. Jako další je vytvořena proměnná prepis pro uchování času poslední obnovy displeje a podprogram setup v tomto případě obsahuje pouze možné otočení displeje o 180 stupňů skryté v komentáři. V nekonečné smyčce loop se nachází funkce if, která kontroluje rozdíl mezi aktuálním časem a časem posledního vykreslení displeje, kdy změnou čísla za porovnáním (v příkladu 100) můžeme volit rychlost překreslování displeje v milisekundách. Tělo této funkce pak obsahuje skupinu příkazů, které zaručí překreslení displeje a poté ještě uložení posledního času obnovení do proměnné prepis. Ve skupině příkazů překreslení OLED displeje se nachází důležité volání podprogramu vykresli, který obsahuje samotný obsah displeje. Tento podprogram je uveden pod smyčkou loop. Je v něm uvedeno nastavení písma na univerzální font a dále vypsání čtyř řádků s textem. Jak je uvedeno v komentářích, pomocí funkce setPrintPos(x,y) si vždy nastavíme souřadnici, odkud se bude tisknout a poté funkcí print vytiskneme požadovaný text.
// OLED displej přes I2C // řadič SSD1306 // připojení knihovny U8glib #include "U8glib.h" // inicializace OLED displeje z knihovny U8glib U8GLIB_SSD1306_128X64 mujOled(U8G_I2C_OPT_NONE); // proměnná pro uchování času poslední obnovy displeje long int prepis = 0; void setup(void) { // pro otočení displeje o 180 stupňů // stačí odkomentovat řádek níže // mujOled.setRot180(); } void loop(void) { // porovnání uloženého a aktuálního času // při rozdílu větším než 100 ms se provede // obnovení displeje, čas můžeme nastavit dle potřeby if (millis()-prepis > 100) { // následující skupina příkazů // obnoví obsah OLED displeje mujOled.firstPage(); do { // funkce vykresli vykreslí žádaný obsah vykresli(); } while( mujOled.nextPage() ); // uložení posledního času obnovení prepis = millis(); } // zde je místo pro další příkazy pro Arduino // volitelná pauza 10 ms pro demonstraci // vykonání dalších příkazů delay(10); } // funkce vykresli pro nastavení výpisu informací na OLED void vykresli(void) { // nastavení písma, toto písmo umožní vypsat // přibližně 15x4 znaků mujOled.setFont(u8g_font_unifont); // nastavení pozice výpisu v pixelech // souřadnice jsou ve tvaru x, y // souřadnice 0, 0 je v levém horní rohu // OLED displeje, maximum je 128, 64 mujOled.setPrintPos(0, 10); // výpis textu na zadanou souřadnici mujOled.print("Arduino navody"); mujOled.setPrintPos(0, 25); mujOled.print("dratek.cz"); mujOled.setPrintPos(0, 40); mujOled.print("Cas od zapnuti:"); mujOled.setPrintPos(40, 55); mujOled.print(millis()/1000); mujOled.print(" vterin"); }
Po nahrání programu do Arduino desky s připojeným OLED displejem uvidíme například tento výpis:
Pokud zakoupíte OLED displej ve variantě připojení přes SPI rozhraní, stačí zapojit displej podle následujícího schématu:
A do Arduina nahrát tento program, změna je pouze na začátku programu, kde je navíc nastavení čísel propojovacích pinů pomocí proměnných a změněná inicializace displeje z knihovny:
// OLED displej přes SPI // řadič SSD1306 // připojení knihovny U8glib #include "U8glib.h" // nastavení propojovacích pinů #define D0 13 #define D1 11 #define DC 9 #define CS 8 #define RES 10 // inicializace OLED displeje z knihovny U8glib U8GLIB_SSD1306_128X64 mujOled(D0, D1, CS, DC, RES); // proměnná pro uchování času poslední obnovy displeje long int prepis = 0; void setup(void) { // pro otočení displeje o 180 stupňů // stačí odkomentovat řádek níže // mujOled.setRot180(); } void loop(void) { // porovnání uloženého a aktuálního času // při rozdílu větším než 100 ms se provede // obnovení displeje, čas můžeme nastavit dle potřeby if (millis()-prepis > 100) { // následující skupina příkazů // obnoví obsah OLED displeje mujOled.firstPage(); do { // funkce vykresli vykreslí žádanou obsah vykresli(); } while( mujOled.nextPage() ); // uložení posledního času obnovení prepis = millis(); } // zde je místo pro další příkazy pro Arduino // volitelná pauza 10 ms pro demonstraci // vykonání dalších příkazů delay(10); } // funkce vykresli pro nastavení výpisu informací na OLED void vykresli(void) { // nastavení písma, toto písmo umožní vypsat // přibližně 15x4 znaků mujOled.setFont(u8g_font_unifont); // nastavení pozice výpisu v pixelech // souřadnice jsou ve tvaru x, y // souřadnice 0, 0 je v levém horní rohu // OLED displeje, maximum je 128, 64 mujOled.setPrintPos(0, 10); // výpis textu na zadanou souřadnici mujOled.print("Arduino navody"); mujOled.setPrintPos(0, 25); mujOled.print("dratek.cz"); mujOled.setPrintPos(0, 40); mujOled.print("Cas od zapnuti:"); mujOled.setPrintPos(40, 55); mujOled.print(millis()/1000); mujOled.print(" vterin"); }
OLED displej připojený přes I2C či SPI rozhraní lze použít v různých zařízeních, kde je žádoucí zobrazovat různé údaje pro uživatele bez nutnosti používat počítač pro čtení informací ze sériové linky a podobně. Tento displej vyniká dobrou čitelností a zároveň malými rozměry a je tedy vhodný pro různá ruční zařízení. Díky uvedené nízké spotřebě je také vhodný pro bateriově napájená zařízení.
Seznam použitých komponent:
http://dratek.cz/arduino/891-arduino-oled-display-bily-1420663108.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
http://dratek.cz/arduino/1227-7-ks-mini-nepajive-pole-25-kontaktu-1458405292.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.