ESP32: Display werkend krijgen

Pagina: 1
Acties:

Vraag


  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
Hoi


ik ben wat aan het spelen met een ESP32 en een goedkoop I2C OLED display van ali:
https://nl.aliexpress.com...042311.0.0.27424c4d9a210C

Gezien veel van dit soort displays kennelijk een SSD1306 bevatten ben ik ervanuit gegaan dat dat er ook een is (gevaarlijk aanname? denk het wel). Ik zie op ali niet terug welk IC erin zit, en als ik deze hier zie:
https://www.hobbyelectron...l0_R-CUpzfe8aAstGEALw_wcB
Dan is dat volgens mij dit display.


Echter krijg ik zowel met micropython als met een simpele arduino-tutorial de boel niet aan de praat. Voorbeeld: ik wil mijn framebuffer vullen met "aan" pixels en push die dan naar het device. Ik zie dan een groot deel (telkens hetzelfde deel!) van de pixels aan staan, maar ook een deel niet.
Volgens mij heb ik iets mis zitten in de communicatie tussen ESP32 en het display.


Het display is een I2C exemplaar , met als adres volgens Ali 0x78. Nou die werkt niet, als ik een I2C scan doe vind ik daarentegen wel wat op 0x3C. Prima.

het display is aangesloten zoals hier beschreven staat:
https://randomnerdtutoria...oled-display-arduino-ide/

Zodra ik de code draai krijg ik dit soort resultaten:
Afbeeldingslocatie: https://tweakers.net/ext/f/f0wQTFhYOKQoFIB6cMPCiMCw/medium.jpgDe meest rechter rij pixels beweegt en daar zie ik stukken geometrische patronen als ik de testcode uit die tutorial draai. Ik heb netjes de OLED_RESET op -1 gezet en het I2C adres aangepast.

Goed dan maar een simpeler voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(115200);

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    //for(;;);
  }
  delay(2000);
  display.clearDisplay();

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 10);
  // Display static text
  display.println("Hello, world!");
  display.display(); 
}

void loop() {}

Simpel toch?

Als ik deze draai krijg ik een statische soortgelijke output:
Afbeeldingslocatie: https://tweakers.net/ext/f/B6TW4hQAuv23ic0ivISVX3VK/medium.jpg
Goed, ik lees de comment ook in de code dat voor een 128x64 display ik 0x3D als adres moet hebben, dat helpt hier niet.


Ik ben aanvankelijk begonnen in microPython maar krijg daar exact hetzelfde resultaat als met de arduino omgeving op de ESP32. Die laatste heb ik erbij gepakt om uit te sluiten dat ik wat brakke code maak (zou mij als gediplomeerd software engineer nooit overkomen :+ ) .


Kan iemand me helpen? Is mijn display stuk? Is mijn aanname dat ik met een SSD1306 van doen heb niet juist? Is mijn code brak, of is het iets anders?

Dank je wel!

:)

i3 + moederbord + geheugen kopen?

Alle reacties


Acties:
  • +2 Henk 'm!

  • Sunderfield
  • Registratie: Januari 2010
  • Laatst online: 12-07 13:46
Probeer eens de u8glib voor de display

Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
Hmm inderdaad, dat werkt dan gewoon prima met deze code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <U8g2lib.h>

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, -1);

void setup() {
  u8g2.begin();
}

void loop() {
  u8g2.clearBuffer();
  u8g2.setFont(u8g_font_helvB10);
  u8g2.drawStr(0, 20, "Happy New Year");
  u8g2.setFont(u8g_font_helvB24);
  u8g2.drawStr(0, 60, "2018");
  u8g2.sendBuffer();
  delay(1000);  
}

Jaja niet heel mooi maar goed genoeg. Grappig.

Dank voor de tip, het ligt dus aan de libraries.

Punt is wel dat ik uit mag gaan zoeken hoe dit in micropython gaat werken.

i3 + moederbord + geheugen kopen?


Acties:
  • 0 Henk 'm!

  • Lennyz
  • Registratie: Januari 2010
  • Laatst online: 07-07 14:56
Probeer dit eens. Mogelijk moet je nog wel de pins aanpassen.

code:
1
2
3
4
5
6
import machine, ssd1306
i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(18))
oled = ssd1306.SSD1306_I2C(128, 64, i2c, 0x3c)
oled.fill(0)
oled.text("Hello World", 0, 0)
oled.show()

[ Voor 12% gewijzigd door Lennyz op 16-08-2019 08:32 ]