Hoe het OLED I2C-display op ARDUINO aan te sluiten

Inleiding: Inleiding tot OLED I2C-display 128*64 / 128*32.
Hoe het OLED I2C-display op ARDUINO aan te sluiten

Hallo! Als amateur-elektronica-liefhebber ben ik er zeker van dat alles wat we doen – elektronisch speelgoed, zelfgemaakte producten of grote projecten – allemaal uit nieuwsgierigheid en luiheid is. Nieuwsgierigheid streeft ernaar het grote, onbekende te begrijpen en te begrijpen, om erachter te komen hoe het daar werkt, wat het doet, hoe het beweegt. En luiheid bedenkt iets om te bedenken, om niet op te staan, niet te naderen, niet op te tillen, niet vies te worden of iets anders belangrijks.

Omdat het zien van informatie beter is dan uitzoeken wat er op het punt staat te gebeuren op ons apparaat, of al is gebeurd of gebeurt, zullen we deze uiterst nuttige informatie zeker willen ontvangen van onze microcontrollers, sensoren of andere apparaten. En ik wil in ieder geval alle berichten ontvangen, zoals vragen, waarschuwingen, herinneringen, emoticons, sterren, harten en dergelijke.

Voor degenen die ook een soortgelijke wens hebben, is hier een korte handleiding voor het aansluiten en testen van kleine en goedkope OLED-schermen.
Vervolgens zullen we het hebben over een van de OLED-displaymodellen die algemeen verkrijgbaar zijn voor radioamateurs, bestuurd door de SSD1306-chip, met een schermgrootte van 0,96 inch en een resolutie van 128 * 64 of 128 * 32 pixels. Deze displays zijn ideaal voor kleine amateurradio-ontwerpen en zelfgemaakte projecten.
Hoe het OLED I2C-display op ARDUINO aan te sluiten

Stap 1: Basisconcepten


We zullen hem verbinden met Arduino UNO / NANO, en we zullen hem ook programmeren via Arduino.
  • OLED is een organische lichtgevende diode, dat wil zeggen een halfgeleiderapparaat gemaakt van organische verbindingen dat licht begint uit te zenden wanneer er een elektrische stroom doorheen gaat.
  • ARDUINO is een platform voor training en gebouwautomatisering en roboticasystemen.
  • ArduinoIDE - ontwikkelomgeving. Dit is een gratis Arduino-programmeerprogramma.
  • I2C – Inter-geïntegreerde circuits, communicatielijn tussen chips.
  • Schets, oftewel code, oftewel programma - Arduino-terminologie.

Volg de instructies om te begrijpen hoe u het OLED-display op de juiste manier aansluit en configureert op de Arduino en hoe u een aangepast bericht op het display kunt weergeven.
Wij doen alles stap voor stap.

Stap 2: Accessoires


We hebben maar vier dingen nodig:
  • 1. Het OLED-display zelf is 0,96 inch (je kunt het kopen op AliExpress of Ebay, het is lang, maar goedkoop!).
  • 2. Arduino UNO / Nano (dezelfde plaats als het display).
  • 3. Draden aansluiten (ibid.).
  • 4. Computer of laptop waarop ArduinoIDE is geïnstalleerd.

Hoe het OLED I2C-display op ARDUINO aan te sluiten

Over het algemeen is het kopen van onderdelen voor verschillende projecten op AliExpress en Ebay heel cool, terwijl je aan het ene project werkt, zijn er al onderdelen voor een ander onderweg. Het belangrijkste is om niet te vergeten een bestelling te plaatsen.

Stap 3: Het beeldscherm aansluiten


Het display wordt aangestuurd door een SSD1306-chip, die vijf communicatieprotocollen ondersteunt, waarvan er één I2C is. Gegevens die dit protocol gebruiken, worden over slechts twee draden verzonden, en hoe minder draden er in de behuizing zitten, hoe beter, dus het bevalt ons prima.Maar! Er zijn modules met het SPI-protocol en zelfs met protocol-switching, wees dus voorzichtig bij de aanschaf van deze module.
Hoe het OLED I2C-display op ARDUINO aan te sluiten

Gebruikte pinnen:
OLED-display - SCL/SCK (klok) en SDA (data), “Plus” vermogen (VCC) en “Minus” vermogen (GND).
Hoe het OLED I2C-display op ARDUINO aan te sluiten

Gebruikte pinnen:
Arduino UNO - SCL/SCK op A5 en SSD op A4, “Plus” vermogen (+5V) en “Minus” vermogen (GND).
Het beeldscherm aansluiten op Arduino:
  • Vcc - 5V
  • GND - GND
  • SDA-A4
  • SCL-A5

Hoe het OLED I2C-display op ARDUINO aan te sluiten

Stap 4: I2C-scanner


Elk apparaat op de I2C-bus heeft een hexadecimaal adres, het kan niet worden gewijzigd, het is bedraad en elke verantwoordelijke fabrikant moet dit ergens op de behuizing of in de instructies aangeven. Er zijn modules met schakelaars en jumpers die kunnen worden gebruikt om het adres te wijzigen, maar... als de apparaten zo goedkoop zijn dat ze bijna belachelijk zijn, dan zal de fabrikant misschien niet de moeite nemen om met zo'n klein detail om te gaan, dus je zult moeten bepaal het zelf.

In totaal kunnen er maximaal 127 adressen op de bus worden gebruikt: 119 voor apparaten en 8 serviceadressen. Op deze adressen vindt communicatie plaats. Er is een hoofd, ook wel Meester genoemd, en er is een slaaf, ook wel Slave genoemd - de Meesters vragen, de slaven antwoorden, alles is eenvoudig.
Omdat ons OLED-display het I2C-communicatieprotocol gebruikt en het adres mogelijk niet is opgegeven, zullen we proberen dit adres zelf te achterhalen.

Je kunt dit doen door een korte schets naar je Arduino-bord te uploaden terwijl de OLED is aangesloten. MAAR!
Haast je niet om de schets meteen naar Arduino te uploaden! Laten we eerst de “stuurprogramma’s” downloaden, d.w.z. laten we de bibliotheken verbinden, en om dit te doen gaan we onmiddellijk naar “Stap nr. 5”, en komen dan terug en gaan verder.

Stap 4: Vervolg:


CODE Finder_I2C_Hex_Address.ino downloaden, uploaden naar Arduino.
Open “Port Monitor”, stel de snelheid in op 9600 en als alles goed is aangesloten toont het programma het apparaatadres, in mijn geval OLED met adres 0x3F.
Hoe het OLED I2C-display op ARDUINO aan te sluiten

Stap 5: Bibliotheken downloaden en verbinden


Om alles goed te laten werken, en je het wiel niet opnieuw hoeft uit te vinden, moet je een aantal bibliotheken aan de ArduinoIDE-omgeving koppelen, namelijk: ADAFRUIT GFX en ADAFRUIT SSD1306, deze zijn nodig om Arduino zelfstandig te kunnen laten communiceren met het OLED-display.
U kunt deze bibliotheken opnemen door deze stappen te volgen.
  • 1. Ga in ArduinoIDE naar het Sketch-menu.
  • 2. Selecteer “Inclusief bibliotheken”.
  • 3.Selecteer “Bibliotheken beheren”.
  • 4. Zoek ADAFRUIT GFX en installeer ze.
  • 5. Zoek ADAFRUIT SSD1306 en installeer ze.

Met de nieuwste versies van de bibliotheken werkte mijn beeldscherm scheef, dit kan natuurlijk te wijten zijn aan de kromming van mijn handen, maar nadat ik de allereerste versies van deze bibliotheken had geïnstalleerd, begon alles er soepel en mooi uit te zien. Om de een of andere reden komen de woorden van Poesjkin voor de geest:
...en ervaring, de zoon van moeilijke fouten,
en genie, vriend van paradoxen.

Een andere manier om bibliotheken te installeren is door deze bibliotheken zelf te zoeken, downloaden en installeren.
Voor Github-voorbeeld:
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/adafruit/Adafruit_SSD1306

Dit zijn dezelfde Adafruit-bibliotheken, maar vergelijkbare bibliotheken kunnen op verzoek van OLED I2C eenvoudig worden doorzocht in zoekmachines. Veel enthousiastelingen schrijven bibliotheken ‘voor zichzelf’ en plaatsen deze vervolgens op internet. Welke bibliotheek u wilt gebruiken, is aan u.
Om Russische letters weer te geven, zijn ook speciale bibliotheken nodig, maar dit is een apart onderwerp voor een apart artikel.
Nadat de bibliotheken zijn geïnstalleerd, kunt u terugkeren naar stap 4 en eindelijk het hexadecimale adres van uw beeldscherm achterhalen.

Stap 6: Displaytesten


Om te controleren of alles naar verwachting werkt, voert u het testvoorbeeld uit ArduinoIDE uit.
Voor deze:
Ga naar BESTAND > VOORBEELDEN > SSD 1306 > Selecteer 128x64 i2c
Als u een foutmelding krijgt, probeer dan SSD 1306 > 128x32 i2c te selecteren.
Als de "Fout" opnieuw optreedt, probeer dan het I2C-adres op regel 61 van de democode te wijzigen en vervang het door het adres van uw beeldscherm dat u in stap #4 hebt bepaald.
Als de fout opnieuw optreedt, kunt u proberen het bestand Adafruit_SSD1306.h te bewerken. Dit bevindt zich in de map Arduino-bibliotheken.
Hoe het OLED I2C-display op ARDUINO aan te sluiten

Open het bestand Adafruit_SSD1306.h in een teksteditor en zoek de regels:
//#define SSD1306_128_64

#define SSD1306_128_32

// #define SSD1306_96_16 

Verwijder commentaar op de regel:
#define SSD1306_128_64. 

Het zou er zo uit moeten zien:
#define SSD1306_128_64

//#define SSD1306_128_32

// #define SSD1306_96_16

Als de fout opnieuw optreedt, moet u de juiste aansluitingen controleren.
Zodra de download voltooid is, zie je een testanimatie op het scherm, wat betekent dat je je OLED-display succesvol hebt ingesteld.

Wanneer je enorm genoten hebt van deze animatie, kun je doorgaan naar de volgende stap.

Stap 7: Schrijf uw eigen bericht


Om uw eigen bericht te schrijven, maakt u eerst een nieuwe schets in de ArduinoIDE-programmeeromgeving.
In de header nemen we 4 bibliotheken op:
#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

Vervolgens schrijven we het resetprotocol:
#define OLED_RESET 4

Adafruit_SSD1306-weergave (OLED_RESET);

In VOID SETUP geven we het hexadecimale adres van ons display 0x3C aan, dat we hebben geleerd in “Stap nr. 4”.
Vervolgens initialiseren we het display en wissen het:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

display.clearDisplay();

Vervolgens schrijven we in VOID LOOP de hoofdcode, dat wil zeggen ons bericht dat we op het display willen weergeven.
Om dit te doen, beschrijven we de tekstgrootte, tekstkleur, cursorpositie en tenslotte geven we het bericht weer met behulp van de opdracht println:
display.setTextSize(2);

display.setTextColor(WIT);

display.setCursor(0,0);

display.println("Goed gedaan!");

weergave.weergave();

Vergeet aan het einde niet te schrijven tonen.weergevenzodat de afbeelding op het scherm wordt weergegeven, anders krijgt u een leegte.
Als je alles goed hebt gedaan, verschijnt er een melding op de displays.
Hoe het OLED I2C-display op ARDUINO aan te sluiten

Hier is de Starting_with_Arduino_OLED.ino CODE van ons programma:
code.zip [946 b] (downloads: 4908)
terugkomen
Opmerking
  • vlinderdasglimlachlachendblozensmileyontspannen ontspannengrijns
    hart ogenkussend hartkussende_gesloten_ogengespoeldopgeluchttevredengrijns
    knipoogvastgezette_uit_tong_knipogende_ooguitgestoken tong gesloten ogengrijnzendkussenvastzittende_uit_tongslapen
    bezorgdfronsengekweldopen mondgrimmigverwardstil
    uitdrukkingsloosniet geamuseerdzweet_glimlachzweetteleurgesteld_opgeluchtvermoeidheidpassief
    teleurgesteldverwardangstigkoud zweetvolhoudenschreeuwsnik
    vreugdeverbaasdschreeuwvermoeid gezichtbooswoedetriomf
    slaperigjammiemaskerzonnebrilduizelig gezichtimpglimlachend_imp
    neutraal_gezichtgeen_mondonschuldig
4 min één =
Opmerkingen (10)
  1. Tatoshka
    #1 Tatoshka Gasten 14 november 2018 21:18
    9
    Bedankt vriend! Dit is mijn eerste geüploade schets en introductie tot Arduino. Afgezien van knipperen Knipperen))
  2. Alisher
    #2 Alisher Gasten 28 juli 2019 19:35
    8
    Waar kan ik deze Finder_I2C_Hex_Address.ino-code downloaden?
    1. Al
      #3 Al Gasten 14 augustus 2019 12:51
      11
      onder de afbeelding staat een link "Hier is de Starting_with_Arduino_OLED.ino CODE van ons programma:"
  3. Alex
    #4 Alex Gasten 13 november 2019 20:01
    9
    Niet VOID SETUP of VOID LOOP, maar void setup(); en lege lus(); De C-taal is een hoofdlettergevoelige taal.
  4. Gast Alex
    #5 Gast Alex Gasten 14 januari 2020 03:00 uur
    6
    >Stap 4: ...in mijn geval OLED met adres 0x3F.
    en dan
    >In VOID SETUP... het adres van ons display 0x3C, wat we hebben geleerd in “Stap #4”.
    Hoe is dat?
  5. Gast Alex
    #6 Gast Alex Gasten 14 januari 2020 03:10
    9
    Bedankt! Ik deed alles volgens de instructies op de Atmega328 Pro Mini en controleerde de gekochte 0.96". Beide bleken te werken. Arduino IDE 1.8.10
  6. Lezer
    #7 Lezer Gasten 3 maart 2020 21:50
    4
    Bedankt, leerzaam, alles werkt!
  7. Ildar Xafizov
    #8 Ildar Xafizov Gasten 19 april 2020 19:15
    5
    Ik heb een vraag. Er zijn 2 OLED-schermen identiek aan die van jou op de foto (tweede foto). Ik weet niet welke jumpers ik moet gebruiken om het adres te wijzigen?
  8. Gast Maxim
    #9 Gast Maxim Gasten 31 oktober 2020 18:53
    11
    Bedankt voor het artikel.Maar ik heb een probleem: de pixels in de letters gloeien om elkaar heen en het lettertype is groter dan zou moeten. Blijkbaar herkent de Arduino de schermresolutie niet. Als iemand hetzelfde probleem heeft, kunt u dit als volgt oplossen:
    #define SCREEN_WIDTH 128 // OLED-weergavebreedte, in pixels
    #define SCREEN_HEIGHT 64 // OLED-weergavehoogte, in pixels
    Adafruit_SSD1306-weergave (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
  9. Dmitri
    #10 Dmitri Gasten 9 mei 2021 19:35
    7
    Bedankt! Niet alles lukte meteen. Het adres op het display was inderdaad 128*64, niet 0x3D, maar 0x3C. En ik herschikte de bibliotheken “vanuit het midden” van de versies. Niet de nieuwste, want... er was een bericht over de kritische waarde van geheugen (ik heb een Arduino Uno).