Obsah:

OLED I2C Display Arduino/NodeMCU Tutorial: 15 Steps
OLED I2C Display Arduino/NodeMCU Tutorial: 15 Steps

Video: OLED I2C Display Arduino/NodeMCU Tutorial: 15 Steps

Video: OLED I2C Display Arduino/NodeMCU Tutorial: 15 Steps
Video: arduino oled i2c tutorial : 0.96" 128 X 32 for beginners 2024, Červenec
Anonim
Image
Image

Úplně první program, který napíšete, když se začnete učit a

nový programovací jazyk je: „Hello World!“.

Samotný program nedělá nic jiného než tisk textu „Hello World“na obrazovku.

Jak tedy zajistíme, aby naše Arduino zobrazovalo „Hello World!“?

V tomto videu vám ukážu, jak začít s malými displeji OLED I2C 0,91 (128x32) a 0,96 (128x64).

Na webu je 100 návodů vysvětlujících stejnou věc různými způsoby, ale nenašel jsem ten, který by mi řekl vše o OLED displeji a o tom, jak jej používat v různých scénářích. Trvalo mi nějaký čas, než jsem to všechno vyřešil. Takže jsem si řekl, že bych měl vytvořit tutoriál o tom, co jsem se naučil, a spojit všechny funkce a způsoby, jak lze displeje OLED použít v našich projektech.

Krok 1: Věci, které se dnes naučíme

Hardwarový požadavek
Hardwarový požadavek

V tomto videu budeme hovořit o:

- Co je to OLED displej?

- Poté se podíváme blíže na OLED displeje 0,91 (128x32) a 0,96 (128x64) I2C

- Dále si povíme o instalaci knihovny Adafruit do vašeho Arduino IDE

- Poté připojíme NodeMCU a Arduino k OLED displeji

- Dále se podíváme na kód a zobrazíme na něm grafiku a text

- Budeme také hovořit o používání vlastních písem a zobrazování obrázků

- Poté připojíme více OLED k mikrořadiči pomocí multiplexeru I2C

- Nakonec si povíme o několika běžných chybách, kterých se lidé při používání OLED displejů dopouštějí

Krok 2: Hardwarový požadavek

Pro tento tutoriál potřebujeme:

- Breadboard

- OLED displeje 0,91 "(128x32) a 0,96" (128x64) I2C

- Arduino UNO/NANO (co je po ruce)

- NodeMCU

- Multiplexor TCA9548A I2C

- Několik propojovacích kabelů

- a kabel USB pro nahrání kódu

Krok 3: Co je to OLED displej?

Co je to OLED displej?
Co je to OLED displej?
Co je to OLED displej?
Co je to OLED displej?

OLED nebo organická světlo emitující dioda je světlo emitující světlo

dioda (LED), ve které je emisní elektroluminiscenční vrstva filmem organické sloučeniny (miliony malých LED světel), která vyzařuje světlo v reakci na elektrický proud.

OLED se používají k vytváření digitálních displejů v zařízeních, jako jsou televizní obrazovky, počítačové monitory, přenosné systémy, jako jsou mobilní telefony, ruční herní konzole a PDA. OLED displej funguje bez podsvícení, protože vyzařuje viditelné světlo.

Krok 4:

obraz
obraz

V. Je k dispozici mnoho typů OLED displejů

trh založený na jejich

- Velikosti

- Barva

- Značky

- Protokol

- SPI (Serial Peripheral Interface) nebo I2C

-Schéma řízení pasivní matice (PMOLED) nebo aktivní matice (AMOLED)

V tomto tutoriálu budu mluvit o připojení

modrá barva 0,91 (128x32 OLED) a 0,96 (128x64 OLED) I2C OLDE zobrazuje na Arduino NANO a NodeMCU. Technologie sběrnice I2C využívá pouze 2 piny MCU, takže pro další senzory máme k dispozici hromady.

Krok 5: Bližší pohled

Bližší pohled
Bližší pohled
Bližší pohled
Bližší pohled
Bližší pohled
Bližší pohled

Pojďme si tyto dva displeje přiblížit.

Na zadní straně těchto displejů jsou hromady kondenzátorů SMD a odporů pájených na desce; ale protože se jedná o zařízení I2C, staráme se pouze o tyto 2 piny (SCL a SDA)

Displej se k Arduinu připojuje pouze pomocí čtyř vodičů - dvou pro napájení (VCC a GND) a dvou pro data (sériové hodiny SCL a

sériová data SDA), což činí zapojení velmi jednoduchým. Datové připojení je I2C (I²C, IIC nebo Inter-Integrated Circuit) a toto rozhraní se také nazývá TWI (Two Wire Interface).

- Palubní kolíky mohou být v různém pořadí, proto vždy proveďte trojí kontrolu, než je připojíte k projektu.

- Provozní napětí je mezi 3v až 5v, ale je nejlepší použít pokyny z datového listu výrobce.

- Někdy v našich projektech potřebujeme použít 2 displeje. Jak toho tedy můžeme dosáhnout?

Jde o to, mít na displeji konfigurovatelnou adresu. Tato jednotka má konfigurovatelnou adresu mezi 0x78 a 0x7A. Adresu můžeme změnit pouhým odpájením odporu 0Ohm z jedné strany a jeho zapnutím na druhou stranu nebo pouhým vložením globální pájky. Hovoříme o tom do hloubky, když připojíme více displejů k Arduinu v pozdější části tohoto tutoriálu.

Na obrázku tyto displeje vypadají velmi velké. Ale prakticky jsou malí. Jsou vyrobeny ze 128 x 32/64 jednotlivých OLED pixelů a nevyžadují žádné podsvícení. Podívejte se na to a uvidíte, jak je to malé. I když jsou malé, mohou být velmi užitečné v jakýchkoli elektronických projektech.

Krok 6: Knihovna

Knihovna
Knihovna
Knihovna
Knihovna
Knihovna
Knihovna

K jejich ovládání je k dispozici několik knihoven

zobrazí. V minulosti jsem používal „knihovnu u8glib“, ale knihovnu AdaFruit shledávám velmi snadno pochopitelnou a používanou v našich projektech. V tomto tutoriálu tedy použiji knihovnu AdaFruit.

K ovládání displeje OLED budete potřebovat knihovnu „adafruit_GFX.h“a knihovnu „adafruit_SSD1306.h“.

Existují dva způsoby, jak si můžete stáhnout a nainstalovat knihovnu do svého Arduino IDE.

Metoda 1

Přejděte na „Správce knihoven“a vyhledejte „adafruit_SSD1306“a „adafruit_gfx“

Vyberte nejnovější verzi a stiskněte tlačítko Instalovat.

Po instalaci můžete tyto knihovny ve svém programu používat.

Metoda 2

Tyto dvě knihovny lze také stáhnout z github (potřebujete obě):

Odkazy poskytnu v popisu níže.

Zobrazovací knihovna:

Knihovna GFX:

Po stažení zkopírujte složku Adafruit_SSD1306-master ze staženého souboru zip do složky knihoven Arduino. Tuto složku obvykle najdete v dokumentech> Arduino> knihovny v systémech Windows. V systému Linux se obvykle nachází v domovské složce> Arduino> knihovny. Nakonec ve složce knihovny Arduino přejmenujte složku Adafruit_SSD1306-master na Adafruit_SSD1306. I když to nepřejmenujete, je to v pořádku.

Krok 7:

obraz
obraz

Nyní se podívejme na „Adafruit_SSD1306.h“

soubor

V této knihovně potřebujeme vědět dvě věci:

1. Pokud chcete použít menší displej, použijte výchozí 128_32, jinak pro větší displej napište 128_32 a odkomentujte 128_64

2. Pokud jste na desku připájili adresu 0x7A (o které budeme hovořit později), použijte pro větší displeje 7bitovou adresu 0x3D, jinak použijte výchozí adresu 0x3C. Pro menší displeje je adresa 0x3C.

Krok 8: Zapojení 128 X 64/32 OLED

Zapojení 128 X 64/32 OLED
Zapojení 128 X 64/32 OLED

Začněme připojením NodeMCU k displeji.

První a nejdůležitější věc, kterou je třeba poznamenat, je, že některé displeje mohou mít zaměněné napájecí piny GND a VCC. Zkontrolujte displej a ujistěte se, že je stejný jako na obrázku. Pokud jsou piny prohozeny, nezapomeňte změnit připojení k Arduino nebo NodeMCU.

- OLED zapojení NodeMCU

OLED VCC - NodeMCU 3,3V

OLED GND - NodeMCU GND

OLED SCL - NodeMCU D1

OLED SDA - NodeMCU D2

- OLED zapojení Arduino Uno

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino Uno A5

OLED SDA - Arduino Uno A4

- Arduino MEGA 2560 OLED zapojení

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino MEGA 2560 pin 21

OLED SDA - Arduino MEGA 2560 pin 20

Krok 9: Kód

Kód
Kód
Kód
Kód
Kód
Kód
Kód
Kód

Knihovna Adafruit přichází s opravdu dobrými příklady pro oba

Displeje 128x32 a 128x64.

Knihovna je umístěna pod Soubor> Příklady> Adafruit SSD1306> a poté typ zobrazení v Arduino IDE.

Použijeme příklad 128x32 I2C a upravíme jej tak, aby fungoval nejprve s displeji 128x64 a 128x32 tak, že jej připojíte k Arduinu a poté k desce NodeMCU.

Kód začíná zahrnutím obou knihoven Adafruit. V tomto tutoriálu budu zdůrazňovat pouze ty části kódu, které jsou pro nás nezbytné k načtení na desky i displeje. Pokud se chcete o kódu dozvědět více, zanechte prosím komentář na mém blogu nebo v sekci komentáře níže a já se snažím vás kontaktovat.

- Nejprve načteme kód do Arduino Nano připojeného k displeji 128x32.

Můžeme použít kód tak, jak je, bez jakýchkoli úprav.

128x32 používá adresu 0x3C, takže tento bit zde vypadá dobře, umožňuje dvakrát zkontrolovat knihovnu záhlaví, ano, používá také adresu 0x3C a typ zobrazení je 128x32.

- Nyní připojte displej 128x64. Jak víme, ve výchozím nastavení používá adresu 0x3C, takže nepotřebujeme aktualizovat adresu v kódu ani v knihovně.

Potřebujeme pouze přidat komentář k 128_32 a odkomentovat 128_64 v knihovně záhlaví a změnit v našem kódu hodnotu LCDHEIGHT na 64.

- Nyní, abychom mohli spustit stejný kód na NodeMCU, musíme změnit ještě jeden řádek v našem kódu.

Zbytek kódu „#define OLED_RESET 4“> „#define OLED_RESET LED_BUILTIN“je stejný jako Arduino

Chcete -li zobrazit cokoli, musíme nejprve vymazat předchozí obrazovku pomocí

display.clearDisplay (); // Vymažte vyrovnávací paměť

Poté nakreslete předmět

testdrawline (); // Nakresli čáru

Ukažte to na hardwaru

display.display (); // Zviditelněte je na hardwaru displeje!

Před zobrazením další položky chvíli počkejte.

zpoždění (2000); // Počkejte 2 sekundy

V tomto příkladu zobrazujeme několik položek, jako je text, čáry, kruhy, rolovací text, trojúhelníky a další. Neváhejte a využijte svou představivost a zobrazte na těchto malých displejích, co chcete.

Krok 10: Přizpůsobení textu a přidávání obrázků

Přizpůsobení textu a přidávání obrázků
Přizpůsobení textu a přidávání obrázků
Přizpůsobení textu a přidávání obrázků
Přizpůsobení textu a přidávání obrázků
Přizpůsobení textu a přidávání obrázků
Přizpůsobení textu a přidávání obrázků

Někdy váš kód potřebuje k zobrazení vlastních písem a

snímky. Pokud jste velmi dobří v mapování bitů, stačí vytvořit bajtová pole zapnutím nebo vypnutím malých LED diod na displeji a vytvářet vlastní písma a obrázky.

Tyto mapování však příliš neumím a nechci trávit hodiny vytvářením tabulek bitových map.

Jaké mám tedy možnosti? Ke generování vlastních písem a obrázků obecně používám dva weby. Odkazy jsou uvedeny v popisu níže.

Vlastní písma

Přejděte na web převaděče písem, vyberte rodinu písem, styl, velikost, verzi knihovny jako „Písmo Adafruit GFX“a poté klikněte na tlačítko „Vytvořit“. Na pravé straně této stránky můžete vidět, jak bude vaše písmo vypadat na skutečném displeji.

Na základě vašeho výběru webová stránka vygeneruje soubor záhlaví písem. Vytvořte soubor s názvem „modified_font.h“ve stejné složce, kde je váš kód, a zkopírujte a uložte do něj vygenerovaný kód. Pak stačí do kódu zahrnout soubor záhlaví, abyste mohli použít vlastní písmo.

#include "modified_font.h"

Potom stačí před zobrazením textu nastavit písmo a použít na něj vlastní písmo.

display.setFont (& Your_Fonts_Name);

Název písma můžete získat ze souboru záhlaví, který jste právě přidali do projektu. To je snadné.

Při používání vlastních písem je vždy problém s pamětí, proto vždy zvažte bajty, které budou spotřebovány pamětí. Nezapomeňte, že Arduino UNO má pouze 32 kB paměti.

Vlastní obrázky

Chcete -li zobrazit bitmapový obrázek na obrazovce, musíte nejprve vytvořit obrázek o velikosti 128 x 64/32.

Používám starý dobrý „MS Paint“k vytvoření bitmapového obrázku o rozměrech 128 x 64, který poté nahraji na tuto webovou stránku převaděče obrázků. Web převádí obrázky na bajtové řetězce, které lze použít s displeji Arduino a OLED.

Začněte nahráním obrázku na web. Poté zaškrtněte políčko „Invertovat barvy obrázku“a změňte „Formát výstupního kódu“na „Kód Arduino“, dále vyberte orientaci a stisknutím tlačítka „Generovat kód“vygenerujte bajtové pole. Sekce „Náhled“ukazuje, jak bude váš obrázek vypadat na skutečném displeji.

Zahrnul jsem kód spolu s tímto tutoriálem, který můžete použít k zobrazení obrázků. Stačí nahradit pole v mém kódu tím, které jste právě vygenerovali, a poté jej načíst do svého Arduina.

Krok 11: Připojení 2 displejů

Připojení 2 displejů
Připojení 2 displejů
Připojení 2 displejů
Připojení 2 displejů

Připojení dvou displejů 128 x 64 k vašemu projektu je snadné.

Potřebujete pouze odpájet odpor 0Ohm z adresy 0x78 a dát jej na 0x7A a poté použít adresu 0x3D v kódu namísto výchozí 0x3C.

Určitě se ptáte, proč používáme adresu 0x3C a 0x3D a ne skutečnou 0x78 a 0x7A. Arduino přijímá 7bitovou adresu, nikoli 8bitovou hardwarovou adresu. Nejprve tedy musíme převést 8bitovou adresu na binární a potom odříznout nejméně významný bit, abychom získali 7 bitů. Poté převeďte 7 bitů na HEX, abyste získali adresy 0x3C nebo 0x3D, které zadáte do kódu.

Nejprve inicializujte displej zadáním jedinečného názvu:

Adafruit_SSD1306 display1 (OLED_REST);

Adafruit_SSD1306 display2 (OLED_REST);

Potom ve svém kódu použijte displej 1 a displej 2 k volání příkazů begin s adresami zařízení v nich:

display1.begin (SSD1306_SWITCHCAPVCC, 0x3C); // zobrazí 1 operační adresu 0x3C

display2.begin (SSD1306_SWITCHCAPVCC, 0x3D); // zobrazení 2 operační adresy 0x3D

To je vše, nyní můžete pokračovat a dělat, co chcete, pomocí displeje 1 nebo displeje 2 ve zbytku kódu. V tomto tutoriálu jsem poskytl příklad.

Zapojení je úplně stejné jako to, co jsme dělali dříve, do značné míry stačí přidat další displej ke stejným I2C pinům Arduina nebo NodeMCU. Na základě adres pak MCU odešle data na datovou linku I2C.

Krok 12: Připojení více než 2 displejů

Připojení více než 2 displejů
Připojení více než 2 displejů
Připojení více než 2 displejů
Připojení více než 2 displejů
Připojení více než 2 displejů
Připojení více než 2 displejů

A co když chcete připojit více než 2 displeje?

Arduino má omezený počet pinů, a proto k němu nemůžete mít připojeno více než určité množství štítů. Navíc má pouze jeden pár autobusů I2C.

Jak tedy můžeme k Arduinu připojit více než 2 displeje I2C? Jde o to použít multiplexor TCA9548.

TCA9548 umožňuje jedinému mikrokontroléru komunikovat až s '64 senzory ', všechny se stejnou nebo odlišnou adresou I2C, a to přiřazením jedinečného kanálu každé sub-sběrnici senzoru.

Když mluvíme o odesílání dat přes 2 dráty na více zařízení, potřebujeme způsob, jak je řešit. Je to stejné, jako když pošťák přijíždí po jediné silnici a odhodí poštovní pakety do různých domů, protože na nich mají napsané různé adresy.

Multiplexer se připojuje k linkám 3V3, GND, SDA a SCL mikrořadiče. Podřízené senzory jsou připojeny k jednomu z osmi SCL/SDA podřízených portů na desce. Kanály jsou vybrány odesláním TCA9548A jeho I2C adresy (0x70 {výchozí} - 0x77) následované číslem kanálu (0b00000001 - 0b10000000). Můžete mít maximálně 8 těchto multiplexorů spojených dohromady na adresách 0x70-0x77, abyste mohli ovládat 64 stejných adresovaných částí I2C. Připojením tří adresových bitů A0, A1 a A2 k VIN můžete získat různé kombinace adres. Toto podrobně vysvětlím v mém dalším tutoriálu na oddělovací desce TCA9548A. Prozatím stačí připojit 8 OLED k této desce a rychle se podívat na kód.

Spojení:

VIN až 5 V (nebo 3,3 V)

GND k zemi

Hodiny SCL na I2C

Data SDA až I2C

Poté připojte senzory k VIN, GND a použijte jednu z multiplexovaných sběrnic SCn / SDn

Nyní kód Int umožňuje začít zahrnutím knihovny „Wire“a definováním adresy multiplexerů.

#include "Wire.h"

#zahrnout

#define Adresa MUX_Address 0x70 // TCA9548A Adresa kodéru

Poté musíme vybrat port, se kterým chceme komunikovat, a odeslat na něj data pomocí této funkce:

void tcaselect (uint8_t i) {

if (i> 7) return;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Dále budeme inicializovat zobrazení v sekci nastavení voláním „u8g.begin ();“pro každý displej připojený k MUX "tcaselect (i);"

Po inicializaci si pak můžeme dělat, co chceme, jen zavoláním funkce „tcaselect (i);“kde „i“je hodnota multiplexované sběrnice a podle toho odesílá data a hodiny.

Krok 13: Výhody a nevýhody

Výhody a nevýhody
Výhody a nevýhody

Obraz OLED je nádherný. OLED však také mají

nevýhody. Protože OLED obrazovky obsahují organický materiál, je jejich životnost kratší než u LCD displejů. Mnoho OLED displejů se navíc po delší době zobrazování stejného obrazu zapálí. Po vypálení zůstane obrázek na obrazovce i po zobrazení dalšího obrázku. Ujistěte se tedy, že obrazovku obnovujete každých několik sekund. Voda může okamžitě poškodit organické materiály těchto displejů.

Výhody

Není potřeba podsvícení

Displeje jsou velmi tenké a lehké

Nízká spotřeba energie

Pozorovací úhly jsou širší než u LCD

Jas a kontrast jsou skvělé

Vysoká rychlost a nízká doba odezvy

Hluboká černá barva

Nevýhody

Nákladná technologie

Krátký životní cyklus

OLEDS pravděpodobněji shoří

Poškození vodou

Krok 14: Běžné chyby

Časté chyby
Časté chyby

Na závěr si tutoriál povíme o několika běžných chybách

lidé dělají při používání těchto displejů:

- Před použitím ve svém projektu vždy třikrát zkontrolujte kolíky

- Vyberte správnou adresu knihovny v souboru záhlaví a v kódu

#define SSD1306_I2C_ADDRESS 0x3C // v Adafruit_SSD1306.h

a

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // ve vašem kódu

Pokud je adresa špatná, OLED nic nezobrazí

- Před použitím musíte v ovladači změnit velikost displeje. Pokud se nezmění, při pokusu o ověření kódu se zobrazí chybová zpráva

#error ("Výška nesprávná, opravte prosím Adafruit_SSD1306.h!");

- Pokud používáte NodeMCU, ujistěte se, že jste vyměnili OLED_RESET ze 4 na LED_BUILTIN

#define OLED_RESET LED_BUILTIN

Mám lidi scény, kteří pomocí tohoto OLED displeje vyrábějí nejrůznější věci. Někteří dokonce vyrobili videohry a vše. Opravdu nemám zájem vytvářet videohru pomocí tohoto malého displeje. Nyní vás však nechám prozkoumat vaši představivost a vyjít s úžasnými nápady.

Krok 15: Odkazy

- Blog:

- Přidat obrázek:

- Vlastní text:

- Zobrazovací knihovna Adafruit:

-Knihovna Adafruit GFX:

- knihovna u8glib: https://code.google.com/archive/p/u8glib/ nebo

Pokud chcete použít menší displej, použijte výchozí 128_32, jinak pro větší displej napište 128_32 a odkomentujte 128X64 NO_ACK v kódu (stačí odkomentovat typ obrazovky, kterou používáte) (písma jsou v knihovně písem)

Doporučuje: