OLED i2c kutubxonasining tavsifi. Rastr tasvirlarni yaratish

OLED i2c kutubxonasining tavsifi.  Rastr tasvirlarni yaratish
OLED i2c kutubxonasining tavsifi. Rastr tasvirlarni yaratish

Kirish: OLED I2C displeyiga kirish 128*64 / 128*32.

Salom! Havaskor elektronika ishqibozi bo'lganim uchun, biz qilayotgan hamma narsa elektron o'yinchoqlar - uy qurilishi yoki katta loyihalar, bularning barchasi qiziquvchanlik va dangasalikdan. Qiziqish keng, noma'lum narsalarni tushunishga va tushunishga, u erda qanday ishlashini, nima qilishini, qanday harakat qilishini tushunishga intiladi. Dangasalik esa o'rnidan turmaslik, yaqinlashmaslik, ko'tarmaslik, ifloslanmaslik yoki boshqa muhim narsalarni o'ylab topadi.

Ma'lumotni ko'rish qurilmamizda nima sodir bo'layotganini yoki allaqachon sodir bo'lganini yoki sodir bo'layotganini aniqlashdan ko'ra yaxshiroq bo'lganligi sababli, biz buni aniq olishni xohlaymiz. foydali ma'lumotlar mikrokontrollerlarimiz, sensorlarimiz yoki boshqa qurilmalarimizdan. Va har qanday holatda, men savollar, ogohlantirishlar, eslatmalar, kulgichlar, yulduzlar, yuraklar va boshqalar kabi har qanday xabarlarni olishni xohlayman.

Shunga o'xshash istagi borlar uchun, bu erda tezkor qo'llanma kichik va arzon OLED displeylarini ulash va sinovdan o'tkazish bo'yicha.
Keyinchalik, biz SSD1306 chipi tomonidan boshqariladigan, 0,96 dyuymli ekran va 128 * 64 yoki 128 * 32 piksel o'lchamlari bilan radio havaskorlari uchun keng tarqalgan OLED displey modellaridan biri haqida gaplashamiz. Ushbu displeylar kichiklar uchun ideal havaskor radio dizaynlari va uy qurilishi mahsulotlari.

1-qadam: Asosiy tushunchalar

Biz unga bog'laymiz Arduino UNO/ NANO, biz uni Arduino orqali ham dasturlashtiramiz.
  • OLED - bu organik yorug'lik chiqaradigan diod, ya'ni. yarimo'tkazgichli qurilma dan organik birikmalar, u orqali elektr toki o'tganda yorug'lik chiqara boshlaydi.
  • ARDUINO - bu avtomatlashtirish va robototexnika tizimlarini o'qitish va qurish uchun platforma.
  • ArduinoIDE - ishlab chiqish muhiti. Bu bepul dastur Arduino dasturlash uchun.
  • I2C - Integratsiyalashgan sxemalar, chiplararo aloqa liniyasi.
  • Sketch, aka kod, aka dastur - Arduino terminologiyasi.
OLED displeyini Arduino-ga qanday qilib to'g'ri ulash va sozlashni va uning displeyida maxsus xabarni qanday ko'rsatishni tushunish uchun ko'rsatmalarga amal qiling.
Biz hamma narsani bosqichma-bosqich qilamiz.

2-qadam: Aksessuarlar

Bizga faqat to'rt narsa kerak:
  • 1. OLED displeyning o'zi 0,96 dyuymga teng (uni Aliexpress yoki Ebayda xarid qilishingiz mumkin, bu uzoq, lekin arzon!).
  • 2. Arduino UNO / Nano (displey bilan bir xil joy).
  • 3. Birlashtiruvchi simlar (o'sha erda).
  • 4. ArduinoIDE o'rnatilgan kompyuter yoki noutbuk.


Umuman olganda, ehtiyot qismlarni sotib olish turli loyihalar Aliexpress va Ebay - bu juda ajoyib narsa, siz bitta loyiha ustida ishlayotganingizda, boshqasi uchun tafsilotlar allaqachon yo'lda. Asosiysi, buyurtma berishni unutmang.

3-qadam: Displeyni ulash

Displey SSD1306 chipi tomonidan boshqariladi, u beshta aloqa protokollarini qo'llab-quvvatlaydi, ulardan biri I2C. Ushbu protokol yordamida ma'lumotlar faqat ikkita sim orqali uzatiladi va korpusdagi simlar qanchalik kam bo'lsa, shuncha yaxshi bo'ladi, shuning uchun u bizga juda mos keladi. Lekin! bilan modullar mavjud SPI protokoli va hatto protokollarni almashtirish, shuning uchun ushbu modulni sotib olayotganda ehtiyot bo'ling.


Ishlatilgan pinlar:
OLED displey - SCL/SCK (soat) va SDA (ma'lumotlar), "Plus" quvvat (VCC) va "Minus" quvvat (GND).


Ishlatilgan pinlar:
Arduino UNO - A5 da SCL/SCK va A4 da SSD, "Plyus" quvvati (+5V) va "Minus" quvvati (GND).
Displeyni Arduino-ga ulash:
  • Vcc - 5V
  • GND - GND
  • SDA-A4
  • SCL-A5

4-qadam: I2C skaneri

I2C avtobusidagi har bir qurilma o'n oltilik manzilga ega, uni o'zgartirib bo'lmaydi, u qattiq simga ulangan, har bir mas'ul ishlab chiqaruvchi uni korpusda yoki ko'rsatmalarda ko'rsatishi kerak. Manzilni o'zgartirish uchun ishlatilishi mumkin bo'lgan kalitlari va jumperlari bo'lgan modullar mavjud, ammo... agar qurilmalar sharmandalik darajasiga qadar arzon bo'lsa, unda ishlab chiqaruvchi bunday kichik tafsilot bilan shug'ullanishni bezovta qilmasligi mumkin, shuning uchun sizga kerak bo'ladi. buni o'zingiz aniqlang.

Avtobusda jami 127 tagacha manzildan foydalanish mumkin - 119 ta qurilmalar va 8 ta xizmat manzillari. Aloqa ushbu manzillarda amalga oshiriladi. Asosiysi bor, aka Usta, qul bor, aka Qul — Xo‘jayinlar so‘raydilar, qullar javob beradi, hammasi oddiy.
Bizning OLED displeyimiz I2C aloqa protokolidan foydalanganligi sababli va manzil ko'rsatilmagan bo'lishi mumkin, biz aynan shu manzilni o'zimiz aniqlashga harakat qilamiz.

Buni OLED ulangan Arduino platangizga qisqa eskizni yuklash orqali amalga oshirishingiz mumkin. LEKIN!
Eskizni darhol Arduino-ga yuklashga shoshilmang! Keling, avval "drayverlarni" yuklab olamiz, ya'ni. keling, kutubxonalarni ulaymiz va buning uchun biz darhol "5-bosqich" ga o'tamiz va keyin qaytib kelamiz va davom etamiz.

4-qadam: Davomi:

CODE Finder_I2C_Hex_Address.ino-ni yuklab oling, Arduino-ga yuklang.
"Port Monitor" ni oching, tezlikni 9600 ga o'rnating va agar hamma narsa to'g'ri ulangan bo'lsa, dastur qurilma manzilini ko'rsatadi, mening holimda OLED 0x3F manzili bilan.

5-qadam: Kutubxonalarni yuklab oling va ulang

Har bir narsa to'g'ri ishlashi uchun va g'ildirakni qayta ixtiro qilishingiz shart emas, siz ArduinoIDE muhitiga bir nechta kutubxonalarni ulashingiz kerak, xususan: ADAFRUIT GFX va ADAFRUIT SSD1306, ular Arduino mustaqil ravishda aloqa qila olishi uchun zarurdir. OLED displey bilan.
Ushbu bosqichlarni bajarish orqali ushbu kutubxonalarni qo'shishingiz mumkin.
  • 1. ArduinoIDE-da Sketch menyusiga o'ting.
  • 2. "Kutubxonalarni qo'shish" ni tanlang.
  • 3. “Kutubxonalarni boshqarish” bandini tanlang.
  • 4. ADAFRUIT GFX ni toping va ularni o'rnating.
  • 5. ADAFRUIT SSD1306 ni toping va ularni o'rnating.
Kutubxonalarning so'nggi versiyalarida displeyim egri ishladi, bu, albatta, qo'llarimning egriligi bilan bog'liq bo'lishi mumkin, lekin men ushbu kutubxonalarning birinchi versiyalarini o'rnatganimdan so'ng, hamma narsa silliq va chiroyli ko'rinishni boshladi. Negadir Pushkinning quyidagi satrlari yodimga tushadi:
...va tajriba, qiyin xatolarning o'g'li,
va daho, paradokslarning do'sti.

Kutubxonalarni o'rnatishning yana bir usuli bu kutubxonalarni o'zingiz topish, yuklab olish va o'rnatishdir.
Github misoli uchun:
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/adafruit/Adafruit_SSD1306

Bu bir xil Adafruit kutubxonalari, ammo shunga o'xshash kutubxonalarni OLED I2C talabiga binoan qidiruv tizimlarida osongina qidirish mumkin. Ko'pgina ishqibozlar kutubxonalarni "o'zlari uchun" yozadilar va keyin ularni Internetga joylashtiradilar. Qaysi kutubxonadan foydalanish sizga bog'liq.
Displeyda ruscha harflarni ko'rsatish uchun maxsus kutubxonalar ham kerak, ammo bu alohida maqola uchun alohida mavzu.
Kutubxonalar o'rnatilgandan so'ng, siz 4-bosqichga qaytishingiz va nihoyat displeyingizning o'n oltilik manzilini bilib olishingiz mumkin.

6-qadam: Displey sinovi

Hamma narsa kutilganidek ishlayotganligini tekshirish uchun ArduinoIDE dan test misolini ishga tushiring.
Buning uchun:
FILE > MISOLLAR > SSD 1306 > 128x64 i2c ni tanlang
Agar “Xato”ga duch kelsangiz, SSD 1306 > 128x32 i2c ni tanlab ko‘ring.
Agar "Xato" yana sodir bo'lsa, demo kodining 61-qatoridagi I2C manzilini o'zgartirib ko'ring va uni 4-bosqichda aniqlagan displey manzili bilan almashtiring.
Agar xato yana sodir bo'lsa, siz Adafruit_SSD1306.h faylini tahrirlashga urinib ko'rishingiz mumkin, u Arduino kutubxonalari papkasida joylashgan.


Adafruit_SSD1306.h faylini oching matn muharriri va qatorlarni toping:
//#aniqlash SSD1306_128_64 #aniqlash SSD1306_128_32 // #aniqlash SSD1306_96_16
Qatorni izohdan olib tashlang:
# SSD1306_128_64 ni aniqlang.
Bu shunday ko'rinishi kerak:
#aniqlash SSD1306_128_64 //#aniqlash SSD1306_128_32 // #aniqlash SSD1306_96_16
Xato yana takrorlansa, to'g'ri ulanishlarni tekshirishingiz kerak.
Yuklab olish tugallangandan so'ng siz ekranda test animatsiyasini ko'rasiz, ya'ni siz OLED displeyni muvaffaqiyatli o'rnatdingiz.

Agar siz ushbu animatsiyadan to'liq bahramand bo'lsangiz, keyingi bosqichga o'tishingiz mumkin.

7-qadam: O'z xabaringizni yozing

O'z xabaringizni yozish uchun avval ArduinoIDE dasturlash muhitida yangi eskiz yarating.
Sarlavhada biz 4 ta kutubxonani o'z ichiga olamiz:
#o'z ichiga oladi #o'z ichiga oladi #o'z ichiga oladi #o'z ichiga oladi
Keyin qayta tiklash protokolini yozamiz:
#define OLED_RESET 4 Adafruit_SSD1306 displey (OLED_RESET);
VOID SETUP-da biz 0x3C displeyimizning o'n oltilik manzilini ko'rsatamiz, biz "4-qadam" da bilib oldik.
Keyin biz displeyni ishga tushiramiz va uni tozalaymiz:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay();
Keyinchalik, VOID LOOP da biz asosiy kodni, ya'ni displeyda ko'rsatmoqchi bo'lgan xabarimizni yozamiz.
Buning uchun biz matn hajmini, matn rangini, kursor o'rnini tasvirlaymiz va nihoyat, println buyrug'i yordamida xabarni ko'rsatamiz:
display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Yaxshi!"); display.display();
Oxirida yozishni unutmang displey.display tasvir ekranda aks etishi uchun, aks holda siz bo'shliqqa ega bo'lasiz.
Agar siz hamma narsani to'g'ri bajargan bo'lsangiz, displeyda xabar paydo bo'ladi.

Maqolada 128x64 va 128x32 pikselli monoxrom OLED displeylari muhokama qilinadi.

Bu kichik ekranlar, ularning diagonali atigi 1 dyuym. Ularning asosiy ustunligi - OLED displeyning yuqori kontrasti tufayli o'qish qulayligi. Har bir OLED displey alohida 128x64 yoki 128x32 oq organik LED (OLED) dan tayyorlangan. Har bir LED nazorat chipi yordamida yoqiladi / o'chiriladi. Displeyning o'zi yorug'lik manbai bo'lganligi sababli, qo'shimcha yorug'lik talab qilinmaydi. Birinchidan, bu displeyning yuqori kontrastini ta'minlaydi, ikkinchidan, uni quvvatlantirish uchun zarur bo'lgan energiya xarajatlarini sezilarli darajada kamaytiradi.

Displey haydovchi sifatida SSD1306 chipidan foydalanadi, bu esa ma'lumotlarni I2C, SPI va 8 bitli parallel protokol orqali uzatish imkonini beradi. Odatda, interfeyslarning bunday keng tanlovi 128x64 pikselli displeyni taqdim etadi. 128x32 o'lchamli OLED displeylarida faqat SPI protokoli mavjud. Quyidagi maqola ulanish uchun SPI dan foydalanadi, chunki u eng universal bo'lib, oz sonli kontaktlarni talab qiladi.

OLED displeylari uchun quvvat manbai

OLED displeyi va drayveri ma'lumotlarni uzatish uchun mantiqni kuchaytirish uchun 3,3 V quvvat va 3,3 V talab qiladi. Displeylar uchun quvvat manbai ekran qanday yuklanganiga bog'liq, lekin odatda u taxminan 20 mA quvvat sarflaydi va 3,3 V kuchlanishni talab qiladi. O'rnatilgan drayver 3,3 V - 5 V kuchlanishni boshqaruv signaliga aylantiradigan oddiy kalitdir. OLED displey. Displeyni bitta 3,3V quvvat manbaidan ishga tushirishingiz yoki chipni quvvatlantirish uchun 3,3V va ekranning o‘zini quvvatlantirish uchun 4,5V gacha foydalanishingiz mumkin. Yoki siz chipga 3,3V ni ulashingiz va OLED displey quvvat piniga to'g'ridan-to'g'ri 7-9V quvvat berishingiz mumkin.

5V tayyor chiqishi bilan OLED 128x64 va 128x32

Agar sizda OLED displeyning v1 128x64 dan eski versiyasi bo'lsa, keyingi bo'limni o'qish shart emas. Siz allaqachon 5 V quvvatga egasiz. Hammasi 1,3" 128x64 va kichik 128x32 SPI va I2C bortida 5 V mavjud. Agar old tomonida 5 V belgisi bo'lgan v2 0,96" 128x64 OLED displeyingiz bo'lsa, uni ham ulash mumkin. 5 V gacha Agar sizda OLED displeyning eski versiyasi bo'lsa - 0,96" (pastga qarang), 5V mikrokontrollerga ulanishda ehtiyot bo'lishingiz kerak. OLED displey 5V quvvatga mos keladigan tarzda ishlab chiqilgan. Ya'ni, siz 3-5 V oralig'ida quvvatni ta'minlay olasiz va o'rnatilgan regulyator siz uchun qolgan barcha "iflos ishlarni" bajaradi.

Barcha OLED ekranlari 3,3V quvvat va mantiq bilan ishlatilishi mumkin.


Shunchaki GND pinini erga va Vin pinini 3-5V diapazonidagi quvvat manbaiga ulang, bu 3Vo pinini 3,3V ga olib keladi.

0,96 128x64 OLED

0,96 dyuymli 128x64 OLED displeylarning eski versiyalaridan foydalanish qiyinroq, chunki ular sukut bo‘yicha 5V ga mos kelmaydi. Ya’ni ular uchun 3,3V quvvatni ta’minlash kerak.


  • VDD - 3,3 V mantiqiy quvvat manbai uchun kuchlanish qiymati 3 yoki 3,3 V bo'lishi kerak.
  • VBAT - kuchlanishni 3,3 dan 4,2 V gacha o'zgartirish uchun kirish.
  • VCC - OLED ekrani uchun yuqori kuchlanishli pin. Agar siz o'rnatilgan kuchlanish konvertoridan foydalansangiz, bu kontaktni ulash shart emas. Agar siz ichki konvertordan foydalanmasangiz, uni 7-9V DC quvvat manbaiga ulang.

Arduino kutubxonasi va misollar

Kichik monoxrom OLED displeylardan foydalanish uchun Arduino kutubxonalarini o'rnatishingiz kerak bo'ladi. Quyidagi kutubxonadagi kod Arduino platalarining har qanday modellari bilan ishlashni qo'llab-quvvatlaydi. Bundan tashqari, u boshqa mikrokontrollerlarga osongina moslashtirilishi mumkin. Ma'lumotlarni uzatish uchun SPI ma'lumotlar uzatish standarti qo'llaniladi.

Github - Adafruit SSD1306 kutubxonasida OLED displey bilan ishlash uchun kutubxonani yuklab olishingiz mumkin. Chapdagi DOWNLOAD tugmasini bosing yuqori burchak, arxivni chiqarib oling va jildning nomini Adafruit_SSD1306 ga o'zgartiring. Jildda Adafruit_SSD1306.cpp va Adafruit_SSD1306.h fayllari hamda misollar papkasi mavjudligini tekshiring.

Adafruit_SSD1306 jildini Arduino/libraries jildiga ko'chiring. Agar jild mavjud bo'lmasa, uni yaratishingiz kerak. Windows-da yo'l quyidagicha bo'ladi: (uy papkasi)\My Documents\Arduino\libraries va Mac yoki Linux uchun: (uy papkasi)/Documents/Arduino/libraries. Agar siz kutubxonalar bilan bog'liq qiyinchiliklarga duch kelsangiz, bizning veb-saytimizda kutubxonalarni ishlash va o'rnatish bo'yicha to'liq qo'llanmani ko'rib chiqing.

Shunga o'xshash protsedurani Github - Adafurit_GFX kutubxonasi bilan bajarishingiz kerak bo'ladi.

Adafruit_SSD1306 va Adafruit_GFX kutubxonalarini o'rnatgandan so'ng, Arduino IDE-ni qayta ishga tushiring. Namuna eskizni menyu orqali yuklab olishingiz mumkin: File→Sketchbook→Libraries→Adafruit_SSD1306→SSD1306...

Yuqoridagi tavsiyalarga muvofiq displeyni ulashni tugatganingizdan so'ng, eskizni Arduino-ga yuklashingiz mumkin.

Kutubxona kod darajasida ekran o'lchamini aniqlay olmaydi. O'lcham sarlavha faylida ko'rsatilishi kerak. Kutubxonangiz jildiga o'ting va Adafruit_SSD1306.h faylini oching. Yuqori qismida kutubxonani turli displeylarga moslashtirish uchun tushuntirishlar mavjud.



Rastr tasvirlarni yaratish

LCD yordamchi dasturi yordamida OLED displeyda ko'rsatish uchun osongina bitmap tasvirlarni yaratishingiz mumkin. Birinchidan, har qanday foto muharriri (Photoshop, Paint va boshqalar) yordamida rasm yarating. Ushbu rasmni Monoxrom Bitmap (bmp) formatida saqlang:


Quyidagi variantlarni o'rnating:


Va monoxrom bitmapingizni import qiling. Uni cpp fayliga saqlang (chiqishni saqlang):

Natijadagi rasmni qayta ishlash uchun misolda keltirilgan koddan foydalanish mumkin


128x64 OLED displeyni ulash

Lehimlash kontaktlari

Ulanishdan oldin siz OLED displeyidagi kontaktlarni o'rnatishingiz va lehimlashingiz kerak. Kontaktlar simsiz ishlamaydi!

8 pinli relslarni o'rnatishdan boshlang elektron plata. Rey uzun oyoqlari bilan non taxtasiga o'rnatiladi.


OLED displeyingizni tepaga joylashtiring, shunda relslarning qisqa oyoqlari displey teshiklariga to'g'ri keladi


Endi 8 teshikli 8 ta pinni lehimlang!


I2C yoki SPI

Bittasi yaxshi xususiyatlar OLED ekranlari 128x64, chunki ular I2C yoki SPI protokollaridan foydalanishi mumkin. SPI I2C dan tezroq, lekin ulanish uchun ko'proq pin kerak. Bundan tashqari, ba'zi mikrokontrolörlarda SPI o'rnatish I2C ni o'rnatishdan ko'ra osonroqdir.

OLEDni I2C orqali ulash

Ekranni I2C protokoli orqali ushbu formatni qo'llab-quvvatlaydigan har qanday mikrokontrollerga ulash mumkin. I2C interfeysi faqat displeyni "ulash" uchun ishlatilganligi sababli, siz mikrokontrollerda 512 bayt operativ xotiraga ega bo'lasiz. Ammo OLED displeydan ma'lumotlarni uzatish mumkin bo'lmaydi.

Birinchidan, OLED ekran kartasining orqa tomonidagi ikkita pinni ulashingiz kerak. I2C ishlashi uchun ikkala pin ham "qisqartirilgan" (sim yordamida) bo'lishi kerak!


  • GND GND ga (yer) ketadi
  • Vin 5V ga o'tadi
  • I2C SDA ma'lumotlari (Uno-da bu A4, Mega-da - 20, Leonardoda esa raqamli 2)
  • Clk to I2C SCL (Unoda bu A5, Megada 21, Leonardoda esa raqamli 3)
  • RST dan 4 gacha (siz bu pinni keyinchalik dastur kodida o'zgartirishingiz mumkin)

Ushbu ulanish kutubxonadagi misolga mos keladi. Taklif etilgan variant ishlagandan so'ng, siz Reset uchun boshqa kontaktni sinab ko'rishingiz mumkin (siz SCA va SCL kontaktlarini o'zgartira olmaysiz).

Misol: Fayl → Sketchbook → Libraries → Adafruit_SSD1306 → SSD1306_128x64_i2c misolida

SPI orqali OLED ulanishi

Odatiy bo'lib, kengash SPI-dan foydalanadi, lekin agar siz ilgari I2C-dan foydalansangiz, oldingi xatboshida yopilgan kontaktlarni ochishingiz kerak!


Shundan so'ng, pinlarni Arduino-ga ulang

  • GND erga tushadi
  • Vin 5V ga o'tadi
  • Raqamli ma'lumotlar 9
  • CLK dan raqamli 10 ga
  • D/C dan raqamli 11 ga
  • RST dan raqamli 13 ga
  • CS raqamli 12

Ushbu ulanish kutubxonada taqdim etilgan eskiz namunasiga mos keladi. Ishga tushirish va tekshirishdan so'ng siz pinlar va dasturni o'zgartirishingiz mumkin.

Misol: Fayl → Sketchbook → Libraries → Adafruit_SSD1306 → SSD1306_128x64_spi misolida

128x32 OLED displeyni ulash

128x32 OLED ekranni SPI orqali ulash

128x32 OLED ekranni SPI orqali ulash juda oson, chunki u o'rnatilgan darajaga mos modulga ega. Avval 8 pinli 0,1 dyuymli relsni oling.


Pichoqlarni uzun tomoni va OLED ekrani tepada bo'lgan non taxtasiga joylashtiring. Shundan so'ng, temir yo'lni OLED PCBga lehimlang.


Shundan so'ng, Arduino-ni ulang - GND erga ulanadi, Vin 5V, DATA raqamli 9, CLK raqamli 10, D/C raqamli 11, RST raqamli 13 va CS raqamli 12 ga ulanadi.

Sketch qalqonni Arduinoga qanday ulaganligingizni ko'rsatadi. Funktsionallikni tekshirgandan so'ng, siz boshqa kontaktlarni ulashga urinib ko'rishingiz mumkin.

Misol: Fayl → Sketchbook → Libraries → Adafruit_SSD1306 → SSD1306_128x32_SPI misolida

Agar siz 128x32 OLED ekrandan foydalanayotgan bo'lsangiz, Adafruit_SSD1306.h eskizining yuqori qismidagi "#define SSD1306_128_32" qatorini izohdan olib tashlang. Ushbu qatorni izohlash orqali siz bufer hajmini o'zgartirasiz.

128x32 OLED ekranni I2C orqali ulash

128x32 OLED ekranni I2C orqali osongina ulash mumkin. Shunga qaramay, sabab - darajaga mos keladigan modul va regulyatorning mavjudligi. Avval 0,1 dyuymli 6 pinli relsni oling.

Reyni uzun pinlar bilan non taxtasiga o'rnating


Yuqoriga OLED ekranni o'rnating


Reyni OLED PCBga lehimlang


Endi pinlarni Arduino-ga ulang

  • GND dan GND ga
  • Vin dan 5V gacha
  • SDA to I2C Data (Unoda bu A4, Megada 20, Leonardoda esa raqamli 2)
  • SCL dan I2C soatgacha (Unoda bu A5, Megada 21, Leonardoda esa raqamli 3)
  • RST dan 4 gacha (siz bu pinlarni keyinroq eskizda o'zgartirishingiz mumkin)

Ushbu ulanish namunaviy eskiz ishlashi uchun zarur bo'lgan ulanishga mos keladi. Misol ishlagandan so'ng, siz RST pinini o'zgartirishingiz mumkin. Siz I2C pinlarini o'zgartira olmaysiz, chunki ular kontaktlarning zanglashiga olib o'rnatiladi.

Misol: Fayl → Sketchbook → Libraries → Adafruit_SSD1306 → SSD1306_128x32_i2c misolida

Eski 128x64 OLED ekranni ulash V 1.0

Ushbu ulanish sxemasi darajaga mos keladigan modul bilan birga kelgan eski 0,96 dyuymli OLED ekranlar uchun mo'ljallangan. Agar sizda V2.0 bo'lsa, boshqa ulanish sxemasidan foydalaning.

128x64 OLED ekranining V1 versiyasi 3,3V quvvatda ishlaydi va o‘rnatilgan darajadagi moslashtiruvchi modulga ega emas, shuning uchun bu ekranni 5V mikrokontroller bilan ishlatish uchun sizga tashqi konditsioner modul kerak bo‘ladi. Agar sizning mikrokontrolleringiz 3.3V ni qo'llab-quvvatlasa, keyingi bosqichlarni o'tkazib yuborishingiz mumkin.

Siz elektron platadan foydalanasiz deb taxmin qilinadi. 10 pinli 0,1 dyuymli relsni oling


Uzun oyoqli kontaktlarni non taxtasiga, so'ngra tepaga - OLED ekran kontaktlarining chap relslariga o'rnating.


Kontaktlarni lehimlang


VDD va VBAT ni ulang (ular 3.3V ga ulanadi). GND GND ga ulanadi.


1-pin tepada bo'lishi uchun CD4050 darajasiga mos keladigan modulni o'rnating


10-pinni D/C piniga, 12-pinni CLKga (SPI vaqti) va 15-pinni DATga (SPI ma'lumotlari) ulang.


2-pinni RES-ga (qayta tiklash) va 4-pinni CS-ga (chipni tanlash) ulang. 1-pin 3.3V ga, 8-pin esa erga tushadi.


Siz darajaga mos keladigan modulning kirishlarini har qanday kontaktlarga ulashingiz mumkin, lekin ichida Ushbu holatda biz raqamli 13 ni mos keladigan modulning 3-piniga, 12-ni 5-pinga, 11-ni 9-pinga, 10-ni 11-pinga va 9-pinni 14-ga uladik. Bu ulanish namunaviy eskizga mos keladi. Yuqoridagi ulanish ishlagandan so'ng, siz boshqa kontaktlar/pinlar bilan tajriba o'tkazishingiz mumkin.


Fikrlaringizni, savollaringizni qoldiring va baham ko'ring shaxsiy tajriba quyida. Yangi g'oyalar va loyihalar ko'pincha muhokamalarda tug'iladi!

(grafik), lekin bu darsda foydalanilmaydi.
Grafik kutubxona matn kutubxonasining barcha funktsiyalarini qo'llab-quvvatlaydi va tasvirlar va grafikalar bilan ishlash uchun qo'shimcha funktsiyalarga ega, lekin shu bilan birga u talab qiladi ko'proq xotira, ham RAM, ham dastur xotirasi.

Kutubxonalarni qanday o'rnatishni Wiki sahifasida topishingiz mumkin - Arduino IDE-da kutubxonalarni o'rnatish.

Ulanish diagrammasi:

Dastur kodi:

#o'z ichiga oladi // iarduino_OLED_txt kutubxonasini qo'shing. iarduino_OLED_txt myOLED(0x78); // I2C avtobusidagi displey manzilini ko'rsatgan holda myOLED ob'ektini e'lon qiling: 0x78 (RW=0 bitni hisobga olgan holda). // extern uint8_t SmallFontRus; // SmallFontRus shriftini ulang. // void setup())( // myOLED.begin(); // Displey bilan ishlashni boshlash myOLED.setFont(SmallFontRus); // Raqamlar va matnni ko‘rsatish uchun ishlatilishi kerak bo‘lgan shriftni belgilang. // myOLED .setCoding(TXT_UTF8) // Agar rus alifbosi ko'rsatilmagan bo'lsa, u holda... ) // setCoding funksiyasini izohlang va TXT_UTF8 parametrini TXT_CP866 yoki TXT_WIN1251 bilan almashtiring. // void loop())( // myOLED.clrScr(); // Ekranni tozalash myOLED.print("Bosh harflar:" , 0, 0); // Matnni 0-ustun, 0-qatordan boshlab chop eting. myOLED.print( "ABCDEFGHIJKLM" , OLED_C, 2 // Matnni 2 satr markazida ko'rsatish 5); // 5-qatorning o'rtasiga matnni chiqarish. myOLED.print("RSTUFXChShShShShShShHIUYa" , OLED_C, 6 // Matnni 6-qatorning o'rtasiga chiqarish. kechikish (3000); . (); // myOLED.print("Kichik harflar:" , 0, satrdan boshlab matnni chop eting. myOLED.print("abcdefghijklm" , OLED_C, 2) 2-satrning markazidagi matn ("nopqrstuvwxyz", OLED_C, 3-chi qatorning markazida matnni ko'rsatish ("rstufhchshshshyuya", 6); / 6-qatorning markazida matnni ko'rsatish (3000); // myOLED.clrScr(); // Ekranni tozalang. myOLED.print("Belgilar:" , 0, 0); // 0-ustun, 0-qatordan boshlab matnni chiqarish. myOLED.print("()()<>?!#$%&*" , OLED_C, 3); // Matnni 3-qatorning markazida ko'rsatish. myOLED.print("~`"\"^_-+=,.:;|/" , OLED_C, 5) // 5-satrning markazida matnni ko'rsatish. // 3 soniya kuting ("Raqamlar:" , 0); 0-ustun, 0-qatordan boshlanadigan matn. myOLED.print("1234567890" , 6, 2); // 6-ustun, 2-qatordan boshlab matnni chop eting. myOLED.print(1234567890, 6, 3 ta ustun); . myOLED.print(-1234567890 , 0, 4); 3000); // 3 soniya kuting) //

Dasturning ishlash algoritmi:

Setup() kodida displey ishga tushiriladi (displeyni ishlashga tayyorlash) va “SmallFontRus” shrifti ulanadi (kutubxonada foydalanishdan oldin ulangan bir nechta oldindan o'rnatilgan shriftlar mavjud). Shriftlar ro'yxati va iarduino_OLED va iarduino_OLED_txt kutubxonalarining barcha funktsiyalari tavsifini Wiki bo'limida topish mumkin - OLED ekrani 128×64 / 0,96”.

Loop() kodi 4 qismga bo'lingan. Har bir qism ekranni tozalash funksiyasidan boshlanadi Displey ekraniga matn yoki raqamlarni chop etish uchun clrScr() va undan keyin bir nechta print() funksiyalari. Barcha qismlar delay() funksiyalari tomonidan bajariladigan 3 soniya kechikish bilan birin-ketin bajariladi.

Natijada, displeyda navbatma-navbat quyidagilar paydo bo'ladi: katta harflar (shu jumladan rus), kichik harflar (shu jumladan rus) , belgilar va raqamlar .

Rus harflarini chiqarishda muammolar:

Kodlash:

Birinchi va asosiy muammo - bu eskiz kompilyatorga uzatiladigan kodlash. Arduino IDE ning turli versiyalari eskizni turli xil kodlashlarda saqlaydi. Hatto oxirgi versiya Windows OS uchun Arduino IDE 1.8.5 (ushbu darsni yozish vaqtida) eskizni UTF-8 kodlashda (agar eskiz *.ino faylida saqlangan bo'lsa) yoki Windows-1251 kodlashda (agar mavjud bo'lsa) kompilyatorga uzatadi. eskiz saqlanmadi). Ammo na eskiz, na unda ishlatiladigan kutubxonalar kompilyatorga qanday kodlashda uzatilishini bilishmaydi. Shunday qilib, rus harflaridan foydalangan holda bir xil eskiz turli yo'llar bilan ishlashi mumkinligi ma'lum bo'ldi.

Eslatma:

Kodlash nima?
Kompyuter, boshqaruvchi (jumladan, Arduino) kabi ma'lumotlarni 1 va 0 ko'rinishida saqlaydi, qabul qiladi va uzatadi. Kodlash - bu kompyuter yoki kontroller allaqachon ishlashi mumkin bo'lgan harflarni raqamlar bo'yicha (ularning seriya raqamiga ko'ra) ifodalash. Masalan, "A" - 1, "B" - 2, "C" - 3 va boshqalar, keyin "SAlom" so'zini raqamlar to'plami sifatida uzatish, qabul qilish yoki saqlash mumkin: 17,18,10,3 ,6 ,20. Harflar turli yo'llar bilan joylashtirilishi mumkinligi sababli (birinchi belgilar yoki raqamlar yoki boshqa tilning harflari va boshqalar), keyin harflarning seriya raqamlari (raqamlari) har xil bo'ladi, shuning uchun ko'plab kodlashlar ixtiro qilinganligi ma'lum bo'ldi. Tarixiy jihatdan lotin harflari aksariyat kodlashlarda bir xil seriya raqamlariga ega: “A”...“Z” = 65...90, “a”...“z” = 97...122, kirill harflari esa nafaqat. turli raqamlarga ega, lekin kodlashda tarqoq yoki umuman yo'q bo'lishi mumkin.

Iarduino_OLED va iarduino_OLED_txt kutubxonalarida biz setCoding funksiyasini taqdim etdik. (), bu bitta argument sifatida quyidagi qiymatlardan birini qabul qilishi mumkin: TXT_UTF8, TXT_CP866, TXT_WIN1251, bu eskizning joriy kodlanishini aniqlaydi. Ushbu funktsiya ushbu darsning sozlash kodining 3-qatorida izohlangan. Agar ruscha matn displeyda to'g'ri ko'rsatilmasa, qatorni setCoding funksiyasi bilan izohlang va TXT_UTF8 parametrini TXT_CP866 yoki TXT_WIN1251 bilan almashtiring. Aksariyat hollarda bu kodlash muammosini hal qiladi.

MyOLED.setCoding(TXT_WIN1251); // Biz eskiz matni Windows-1251 kodlashda taqdim etilganligini bildiramiz.

Agar setCoding funktsiyasi bo'lsa () Unda sizga yordam bermadim setCoding funksiyasini chaqiring () noto'g'ri parametr bilan va ushbu darsning keyingi qismida ko'rsatilganidek, rus harflarini ularning kodlari bilan ko'rsating: "Xotira yetarli emas". Agar xohlasangiz, dars sharhlarida OT versiyasini, Arduino IDE versiyasini va Arduino IDE qaysi kodlashdan foydalanishini ko'rsating (agar siz Arduino IDE qanday kodlashdan foydalanishini bilmasangiz, unda qaysi belgilar ko'rsatilishini yozing. kichik va katta rus harflari o'rniga displey). Biz sizning kodlashni kutubxonalarga qo'shishga harakat qilamiz.

Yetarli emas tasodifiy kirish xotirasi:

Ikkinchidan, lekin kam emas muhim muammo bu satrlar juda ko'p RAMni egallaydi. Satrning har bir harfi kamida 1 baytni egallaydi. Bu muammo, ayniqsa, turli xil menyu elementlarini yaratishda dolzarbdir.

Yechim:

Ko'pchilik samarali yechim Bu muammo satrlarni operativ xotira sohasida emas, balki dastur xotirasi sohasida saqlashdir, chunki dastur xotirasining hajmi ancha katta. Buning uchun F() funksiyasiga argument sifatida satrlarni taqdim eting. Shu tarzda belgilangan qatorlar dastur xotirasi sohasida saqlanadi:

MyOLED.print(F("Displey uchun chiziq")); // Displeyga satrni chiqaring. Serial.print(F("Monitor uchun chiziq")); // Seriyali port monitoriga satrni chiqarish.

RAM yoki dastur xotirasi yetarli emas:

Agar siz eskizni UTF-8 kodlashda saqlaydigan Arduino IDE-da rus tilida satrlar bilan ishlasangiz. Siz allaqachon satrlarni dastur xotirasida saqlaysiz (yoki RAM sohasida chap satrlarga ega). Siz hali ham satrlar egallagan xotiraning yarmini bo'shatishingiz mumkin!

Gap shundaki, UTF-8 kodlashda har bir ruscha harf 2 baytni egallaydi. Agar siz ruscha belgilarni kodlashda ular 1 baytni egallagan joyni ko'rsatsangiz, ular qaysi turdagi xotirada saqlanganidan qat'i nazar, satrlar egallagan xotiraning yarmini bo'shatishingiz mumkin.

Iarduino_OLED va iarduino_OLED_txt kutubxonalari uchun shriftlardagi belgilar CP866 kodlashiga muvofiq tartibga solingan, bu sizning satrlaringizni ushbu kodlashda displey ekranida saqlash va ko'rsatish mumkinligini anglatadi:

MyOLED.setCoding(noto'g'ri); // Joriy kodlashni bekor qiling, chunki biz rus harflarini kod bilan ko'rsatamiz. myOLED.print ("\200\340\244\343\250\255\256 iArduino"); // "Arduino iArduino" matnini ko'rsatish. Rus harflari o'rniga biz ularning kodini CP866 kodlashda ishlatamiz.

Eslatma:

Sketch satrlarida belgi yoki harfni uning kodi bilan qanday ko'rsatish mumkin?
Avval siz ularni ko'rsatmoqchi bo'lgan kodlashning barcha belgilarining kodlarini topishingiz kerak, ularda turli xil kodlashlarning belgilar jadvallarini Internetda topishingiz mumkin. CP866 kodlash uchun ruscha belgilar quyidagi kodlarga ega:

A 128
\200
VA 136
\210
R 144
\220
Sh 152
\230
A 160
\240
Va 168
\250
R 224
\340
w 232
\350
Yo 240
\360
B 129
\201
Y 137
\211
BILAN 145
\221
SCH 153
\231
b 161
\241
th 169
\251
Bilan 225
\341
sch 233
\351
e 241
\361
IN 130
\202
TO 138
\212
T 146
\222
Kommersant 154
\232
V 162
\242
Kimga 170
\252
T 226
\342
' 234
\352

242
\362
G 131
\203
L 139
\213
U 147
\223
Y 155
\233
G 163
\243
l 171
\253
da 227
\343
s 235
\353

243
\363
D 132
\204
P 140
\214
F 148
\224
b 156
\234
d 164
\244
m 172
\254
f 228
\344
b 236
\354

244
\364
E 133
\205
N 141
\215
X 149
\225
E 157
\235
e 165
\245
n 173
\255
X 229
\345
uh 237
\355

245
\365
VA 134
\206
HAQIDA 142
\216
C 150
\226
YU 158
\236
va 166
\246
O 174
\256
ts 230
\346
Yu 238
\356

246
\366
Z 135
\207
P 143
\217
H 151
\227
I 159
\237
h 167
\247
P 175
\257
h 231
\347
I 239
\357

247
\367

Har qanday belgini ko'rsatish uchun uning kodini sakkizlik sanoq sistemasida ko'rsatish kerak, undan oldin teskari chiziq bo'lishi kerak " \ ». Bu qoida Arduino IDE-dagi har qanday satrlar uchun amal qiladi. Yuqoridagi misoldagi "Arduino iArduino" qatorida birinchi harf "A" bo'lib, 128 kodiga ega. Agar 128 ni sakkizlikka aylantirsangiz, (200) 8 ni olasiz. Bu shuni anglatadiki, “A” harfi “\200”, “p” harfi “\340”, “d” harfi “\244” va hokazo.

Kirish: OLED I2C displeyiga kirish 128*64 / 128*32.

Salom! Havaskor - elektronika ishqibozi bo'lganimiz uchun, ishonchim komilki, biz qilayotgan hamma narsa - elektron o'yinchoqlar - uy qurilishi mahsulotlari yoki yirik loyihalar - bularning barchasi qiziquvchanlik va dangasalikdan kelib chiqadi. Qiziqish keng, noma'lum narsalarni tushunishga va tushunishga, u erda qanday ishlashini, nima qilishini, qanday harakat qilishini tushunishga intiladi. Dangasalik esa o'rnidan turmaslik, yaqinlashmaslik, ko'tarmaslik, ifloslanmaslik yoki boshqa muhim narsalarni o'ylab topadi.

Ma'lumotni ko'rish qurilmamizda nima sodir bo'layotganini yoki allaqachon sodir bo'lganini yoki sodir bo'layotganini aniqlashdan ko'ra yaxshiroq bo'lganligi sababli, biz ushbu eng foydali ma'lumotni mikrokontrollerlarimiz, sensorlar yoki boshqa qurilmalarimizdan olishni xohlaymiz. Va har qanday holatda, men savollar, ogohlantirishlar, eslatmalar, kulgichlar, yulduzlar, yuraklar va boshqalar kabi har qanday xabarlarni olishni xohlayman.

Xuddi shunday xohishga ega bo'lganlar uchun bu erda kichik va arzon OLED displeylarini ulash va sinab ko'rish bo'yicha qisqacha qo'llanma.

Keyinchalik, biz SSD1306 chipi tomonidan boshqariladigan, 0,96 dyuymli ekran va 128 * 64 yoki 128 * 32 piksel o'lchamlari bilan radio havaskorlari uchun keng tarqalgan OLED displey modellaridan biri haqida gaplashamiz. Ushbu displeylar kichik havaskor radio dizaynlari va uy qurilishi loyihalari uchun ideal.

1-qadam: Asosiy tushunchalar

Biz uni Arduino UNO / NANO ga ulaymiz va uni Arduino orqali ham dasturlaymiz.

  • OLED - bu organik yorug'lik chiqaradigan diod, ya'ni organik birikmalardan yasalgan yarim o'tkazgichli qurilma, u orqali elektr toki o'tganda yorug'lik chiqara boshlaydi.
  • ARDUINO - bu avtomatlashtirish va robototexnika tizimlarini o'qitish va qurish uchun platforma.
  • ArduinoIDE - bu rivojlanish muhiti. Bu bepul Arduino dasturlash dasturi.
  • I2C - Integratsiyalashgan sxemalar, chiplararo aloqa liniyasi.
  • Sketch, aka kod, aka dastur - Arduino terminologiyasi.

OLED displeyini Arduino-ga qanday qilib to'g'ri ulash va sozlashni va uning displeyida maxsus xabarni qanday ko'rsatishni tushunish uchun ko'rsatmalarga amal qiling.

Biz hamma narsani bosqichma-bosqich qilamiz.

2-qadam: Aksessuarlar

Bizga faqat to'rt narsa kerak:

  • 1. OLED displeyning o'zi 0,96 dyuymga teng (uni Aliexpress yoki Ebayda xarid qilishingiz mumkin, bu uzoq, lekin arzon!).
  • 2. Arduino UNO / Nano (displey bilan bir xil joy).
  • 3. Birlashtiruvchi simlar (o'sha erda).
  • 4. ArduinoIDE o'rnatilgan kompyuter yoki noutbuk.

Umuman olganda, Aliexpress va Ebay-da turli loyihalar uchun ehtiyot qismlarni sotib olish juda ajoyib narsa, siz bir loyiha ustida ishlayotganingizda, boshqasi uchun qismlar allaqachon yo'lda. Asosiysi, buyurtma berishni unutmang.

3-qadam: Displeyni ulash

Displey SSD1306 chipi tomonidan boshqariladi, u beshta aloqa protokollarini qo'llab-quvvatlaydi, ulardan biri I2C. Ushbu protokol yordamida ma'lumotlar faqat ikkita sim orqali uzatiladi va korpusdagi simlar qanchalik kam bo'lsa, shuncha yaxshi bo'ladi, shuning uchun u bizga juda mos keladi. Lekin! SPI protokoli va hatto protokolni almashtirish bilan modullar mavjud, shuning uchun ushbu modulni sotib olayotganda ehtiyot bo'ling.

Ishlatilgan pinlar:

OLED displey - SCL/SCK (soat) va SDA (ma'lumotlar), "Plyus" quvvat (VCC) va "Minus" quvvat (GND).

Ishlatilgan pinlar:

Arduino UNO - A5 da SCL/SCK va A4 da SSD, "Plus" quvvat manbai (+5V) va "Minus" quvvat manbai (GND).

Displeyni Arduino-ga ulash:

  • Vcc - 5V
  • GND - GND
  • SDA-A4
  • SCL - A5

4-qadam: I2C skaneri

I2C avtobusidagi har bir qurilma o'n oltilik manzilga ega, uni o'zgartirib bo'lmaydi, u qattiq simga ulangan, har bir mas'ul ishlab chiqaruvchi uni korpusda yoki ko'rsatmalarda ko'rsatishi kerak. Manzilni o'zgartirish uchun ishlatilishi mumkin bo'lgan kalitlari va jumperlari bo'lgan modullar mavjud, ammo... agar qurilmalar sharmandalik darajasiga qadar arzon bo'lsa, unda ishlab chiqaruvchi bunday kichik tafsilot bilan shug'ullanishni bezovta qilmasligi mumkin, shuning uchun sizga kerak bo'ladi. buni o'zingiz aniqlang.

Avtobusda jami 127 tagacha manzildan foydalanish mumkin - 119 ta qurilmalar va 8 ta xizmat manzillari. Aloqa ushbu manzillarda amalga oshiriladi. Asosiysi bor, aka Usta, qul bor, aka Qul — Xo‘jayinlar so‘raydilar, qullar javob beradi, hammasi oddiy.

Bizning OLED displeyimiz I2C aloqa protokolidan foydalanganligi sababli va manzil ko'rsatilmagan bo'lishi mumkin, biz aynan shu manzilni o'zimiz aniqlashga harakat qilamiz.

Buni OLED ulangan Arduino platangizga qisqa eskizni yuklash orqali amalga oshirishingiz mumkin. LEKIN!

Eskizni darhol Arduino-ga yuklashga shoshilmang! Keling, avval "haydovchilar" ni yuklab olamiz, ya'ni kutubxonalarni ulaymiz va buning uchun biz darhol "5-qadam" ga o'tamiz, keyin qaytib kelamiz va davom etamiz.

4-qadam: Davomi:

CODE Finder_I2C_Hex_Address.ino-ni yuklab oling, Arduino-ga yuklang.

"Port Monitor" ni oching, tezlikni 9600 ga o'rnating va agar hamma narsa to'g'ri ulangan bo'lsa, dastur qurilma manzilini ko'rsatadi, mening holimda OLED 0x3F manzili bilan.

5-qadam: Kutubxonalarni yuklab oling va ulang

Har bir narsa to'g'ri ishlashi uchun va g'ildirakni qayta ixtiro qilishingiz shart emas, siz ArduinoIDE muhitiga bir nechta kutubxonalarni ulashingiz kerak, xususan: ADAFRUIT GFX va ADAFRUIT SSD1306, ular Arduino mustaqil ravishda aloqa qila olishi uchun zarurdir. OLED displey bilan.

Ushbu bosqichlarni bajarish orqali ushbu kutubxonalarni qo'shishingiz mumkin.

  • 1. ArduinoIDE-da Sketch menyusiga o'ting.
  • 2. "Kutubxonalarni qo'shish" ni tanlang.
  • 3. “Kutubxonalarni boshqarish” bandini tanlang.
  • 4. ADAFRUIT GFX ni toping va ularni o'rnating.
  • 5. ADAFRUIT SSD1306 ni toping va ularni o'rnating.

Kutubxonalarning so'nggi versiyalarida displeyim egri ishladi, bu, albatta, qo'llarimning egriligi bilan bog'liq bo'lishi mumkin, lekin men ushbu kutubxonalarning birinchi versiyalarini o'rnatganimdan so'ng, hamma narsa silliq va chiroyli ko'rinishni boshladi. Negadir Pushkinning quyidagi satrlari yodimga tushadi:

... va tajriba, qiyin xatolarning o'g'li,

va daho, paradokslarning do'sti.

Kutubxonalarni o'rnatishning yana bir usuli bu kutubxonalarni o'zingiz topish, yuklab olish va o'rnatishdir.

Bu bir xil Adafruit kutubxonalari, ammo shunga o'xshash kutubxonalarni OLED I2C talabiga binoan qidiruv tizimlarida osongina qidirish mumkin. Ko'pgina ishqibozlar kutubxonalarni "o'zlari uchun" yozadilar va keyin ularni Internetga joylashtiradilar. Qaysi kutubxonadan foydalanish sizga bog'liq.

Displeyda ruscha harflarni ko'rsatish uchun maxsus kutubxonalar ham kerak, ammo bu alohida maqola uchun alohida mavzu.

Kutubxonalar o'rnatilgandan so'ng, siz 4-bosqichga qaytishingiz va nihoyat displeyingizning o'n oltilik manzilini bilib olishingiz mumkin.

6-qadam: Displey sinovi

Hamma narsa kutilganidek ishlayotganligini tekshirish uchun ArduinoIDE dan test misolini ishga tushiring.

Buning uchun:

FILE > MISOLLAR > SSD 1306 > 128x64 i2c ni tanlang

Agar “Xato”ga duch kelsangiz, SSD 1306 > 128x32 i2c ni tanlab ko‘ring.

Agar "Xato" yana sodir bo'lsa, demo kodining 61-qatoridagi I2C manzilini o'zgartirib ko'ring va uni 4-bosqichda aniqlagan displey manzili bilan almashtiring.

Agar xato yana sodir bo'lsa, siz Adafruit_SSD1306.h faylini tahrirlashga urinib ko'rishingiz mumkin, u Arduino kutubxonalari papkasida joylashgan.

Matn muharririda Adafruit_SSD1306.h faylini oching va qatorlarni toping:

//# SSD1306_128_64-ni aniqlang

# SSD1306_128_32 ni aniqlang

// # SSD1306_96_16ni aniqlang

Qatorni izohdan olib tashlang:

# SSD1306_128_64 ni aniqlang.

Bu shunday ko'rinishi kerak:

# SSD1306_128_64 ni aniqlang

//# SSD1306_128_32ni aniqlang

// # SSD1306_96_16ni aniqlang

Xato yana takrorlansa, to'g'ri ulanishlarni tekshirishingiz kerak.

Yuklab olish tugallangandan so'ng siz ekranda test animatsiyasini ko'rasiz, ya'ni siz OLED displeyni muvaffaqiyatli o'rnatdingiz.

Agar siz ushbu animatsiyadan to'liq bahramand bo'lsangiz, keyingi bosqichga o'tishingiz mumkin.

7-qadam: O'z xabaringizni yozing

O'z xabaringizni yozish uchun avval ArduinoIDE dasturlash muhitida yangi eskiz yarating.

Sarlavhada biz 4 ta kutubxonani o'z ichiga olamiz:

#o'z ichiga oladi<SPI.h >

#o'z ichiga oladi<Wire.h >

#o'z ichiga oladi<Adafruit_GFX.h >

#o'z ichiga oladi<Adafruit_SSD1306.h >

Keyin qayta tiklash protokolini yozamiz:

#define OLED_RESET 4 Adafruit_SSD1306 displey (OLED_RESET) ;

VOID SETUP-da biz 0x3C displeyimizning o'n oltilik manzilini ko'rsatamiz, biz "4-qadam" da bilib oldik.

Keyin biz displeyni ishga tushiramiz va uni tozalaymiz:

display.begin(SSD1306_SWITCHCAPVCC, 0x3C) ;

Buning uchun biz matn hajmini, matn rangini, kursor o'rnini tasvirlaymiz va nihoyat, println buyrug'i yordamida xabarni ko'rsatamiz:

display.setTextSize(2) ;

display.setTextColor(WHITE) ;

display.setCursor(0,0) ;

display.println("Yaxshi!) ;

display.display();

Oxirida yozishni unutmang displey.display tasvir ekranda aks etishi uchun, aks holda siz bo'shliqqa ega bo'lasiz.

Agar siz hamma narsani to'g'ri bajargan bo'lsangiz, displeyda xabar paydo bo'ladi.

OLED displeylari eng jozibali va zamonaviy displeylardan biridir kichik o'lchamlar va kam quvvat sarflaydigan OLED displey boy kontrastni ta'minlaydi. Displeylar asosan I2C interfeysida ishlaydigan SSD1306 chipida mavjud bo'lib, u ishlash uchun faqat 2 ta simni talab qiladi, bu sizga tezda ulanish va foydalanishni boshlash imkonini beradi. Ushbu maqolada sizga diagonali 0,96 dyuym va 128 x 64 piksel kengaytmali OLED displeyni qanday ulash kerakligini aytaman.

Texnik spetsifikatsiyalar

Displey texnologiyasi: OLED
Displey o'lchamlari: 128 x 64 piksel
Displey diagonali: 0,96 dyuym
Ko'rish diapazoni: 160 °
Ta'minot kuchlanishi: 2,8V ~ 5,5V
Quvvat: 0,08 Vt
Olchamlari: 27,3 mm x 27,8 mm x 3,7 mm

OLED displey haqida umumiy ma'lumot

Va bu nima, OLED texnologiyasi? Organik yorug'lik chiqaradigan diyotni anglatadi, displey quyidagilardan iborat katta raqam organik LEDlar, asosiy farq LCD displey, har bir LED o'z-o'zidan yonadi va alohida orqa yoritishni talab qilmaydi. Buning yordamida displey an'anaviy LCD displeylarga nisbatan kontrast, ko'rish burchagi va kam quvvat iste'moli kabi muhim afzalliklarga ega, albatta, kamchiliklari ham bor, qisqa xizmat muddati va yuqori narx.

128x64 (0,96 dyuym) kengaytmali OLED moduli ikki qismdan iborat bo'lib, displeyning o'zi o'z navbatida ikki qismga bo'linishi mumkin, grafik displey va SSD1306 boshqaruvchisi, undan moslashuvchan kabel ketadi. teskari tomon to'lovlar. Modulning ikkinchi qismi - bu bosilgan elektron plata (asosan adapter), uning ustiga minimal elektr simlari o'rnatilgan, 2,54 mm balandlikdagi bir qatorli ulagich va to'rtta o'rnatish teshigi.
OLED modullari 128 × 64, 128 × 32 va 96 × 16 o'lchamlari bilan mavjud (maqolada va misolda 128 × 32 kengaytmali displey ishlatilgan), SSD1306 kontroller o'zi maksimal kengayish bilan OLED matritsalari bilan ishlashi mumkin. 128 × 64, shuningdek, modullar oq, ko'k va ko'k-sariq (yuqorida, sariq chiziq, kengligi 15 piksel). Har bir ishlab chiqaruvchi o'zi ishlab chiqaradi bosilgan elektron plata turli maketlar bilan elektron komponentlar va chiqish interfeysi, chunki SSD1306 kontrolleri bir vaqtning o'zida uchta operatsion protokolni qo'llab-quvvatlaydi:

8 bitli 6800/8080 seriyali parallel interfeys
3/4 simli ketma-ket periferik interfeys
I2C

Operatsion protokolini o'zgartirish uchun uchta BS0, BC1 va BS2 qatorlari taqdim etiladi, ularning yordami bilan displey boshqaruvchisi qaysi protokoldan foydalanishini aniqlaydi. Mening holatimda, OLED displeyi bitta I2C protokoli yordamida ishlashga mo'ljallangan, boshqa variantlarda ish protokolini nol rezistorlar yoki DIP kalitlari yordamida o'zgartirish mumkin.

Quyida elektr sxemasi I2C interfeysi orqali ishlaydigan SSD1306 chipidagi OLED displeyda U2 chipi kuchlanish stabilizatori (3,3V) rolini o'ynashini ko'rish mumkin, C8 kondansatörü chiqish kuchlanishini yumshatish uchun zarur. R6 va R7 rezistorlari SCL va SAD liniyalarini tortib olish funktsiyasini bajaradi, agar I2C avtobusiga bir nechta qurilma ulangan bo'lsa, faqat bitta qurilmada tortishish rezistorlaridan foydalanish kerak. 0 Ohm rezistordan (belgilanmagan) foydalanib, siz 0x78 yoki 0x7A manzilini o'zgartirishingiz mumkin.

J2 pin tayinlash:
SCL: Seriyali soat
SDA: ma'lumotlar liniyasi (Serial Dfta)
VCC: "+" quvvat
GND: "-" quvvat manbai

Arduino-ga ulanish

Kerakli qismlar:
Arduino UNO R3 x 1 dona.
LCD displey 1602A (2×16, 5V, Moviy) x 1 dona.
DuPont sim, 2,54 mm, 20 sm, F-M (Ayol - Erkak) x 1 dona.
USB kabeli 2,0 A-B x 1 dona.

Ulanish:
Misolda men Arduino UNO R3 platasidan va OLED displeydan (128x64 kengaytma) foydalanaman, yuqorida aytganimdek, I2c interfeysi ishlatiladi, ulanish uchun faqat ikkita sim kerak, biz ekranning SDA-ni A4 piniga ulaymiz. (Arduino) va A5 (Arduino) ni ulash uchun SCL. Boshqa Mega yoki Nano platformalaridan foydalanganda, qulaylik uchun boshqa portlardan foydalanish kerak, men turli platalar uchun ulanishlar jadvalini taqdim etaman; Keyinchalik, quvvatni, GND ni GND ga va VCC ni 5 V yoki 3,3 V ga ulashingiz kerak, sxema yig'ilgan, endi faqat eskizni yuklash qoladi.


Ulanish jadvali

OLED displey bilan ishlash uchun sizga kutubxona kerak, chunki bir nechta kutubxonalar mavjud, men OLED_I2C kutubxonasidan foydalanish misolini ko'rsataman (siz kutubxonani maqola oxirida yuklab olishingiz mumkin)
Dastur faqat displeyda matnni ko'rsatadi va boshqa funksiyalarni ta'minlamaydi, eskizni yuklab oling va Arduino UNO R3 platasiga yuklang.

/* Arduino IDE 1.8.0 da sinovdan o'tgan Sinov sanasi 27/01/2017 */ #shu jumladan // OLED_I2C OLED kutubxonasini myOLED(SDA, SCL, 8) bilan ulash; // Port tanlash, UNO - SDA 8 pin, SCL - 9 pin. extern uint8_t SmallFont; // Shriftni ulang void setup() ( myOLED.begin(); // ekranni ishga tushirish myOLED.setFont(SmallFont); ) void loop() ( myOLED.clrScr(); // myOLED.print(" ekranini tozalash Salom!" , CENTER, 24); // Matnni chop eting: markazda, 24-qator myOLED.print("www.robotchip.ru", CENTER, 40); // Matnni chop eting: markazda, 40-qator myOLED.update(); / kechikish (500 // pauza 0,5 s);

Arduino IDE 1.8.0 da sinovdan o'tgan

Sinov sanasi: 27.01.2017

#o'z ichiga oladi // OLED_I2C kutubxonasini ulang

OLED myOLED (SDA, SCL, 8); // Port tanlash, UNO - SDA 8 pin, SCL - 9 pin.

extern uint8_t SmallFont; // Shriftni ulang

bekor o'rnatish()

myOLED. boshlanishi(); // ekranni ishga tushirish

myOLED. setFont(SmallFont);

void loop()

myOLED. clrScr(); // Ekranni tozalash

myOLED. print("Salom!", MARKAZ, 24); // Chiqish matni: markazda, 24-qator

myOLED. chop etish ("www.robotchip.ru" , CENTER , 40 ); // Chiqish matni: markazda, 40-qator

myOLED. yangilash (); //

kechikish (500); // pauza 0,5 s

Eskiz yuklab olish