Datasheet & Pinout: 1.3" OLED Display med EC11 Drejeknap (SH1106)

🎛️ 1.3" OLED + EC11 Drejeknap (SH1106)

Skærm og betjening i ét: et 1.3" OLED (128x64) med en EC11 drejeknap med trykfunktion og – på den udbredte version – to ekstra knapper (CON og BAK). Lige til at bygge menuer, hvor man drejer, trykker og fortryder.

Vigtigt: Skærmen bruger SH1106-controlleren, ikke SSD1306. Det betyder, at du skal bruge et SH1106-bibliotek (fx U8g2 eller Adafruit SH110X), ellers får du et skævt billede med støj i kanten.

🛒 Køb 1.3" OLED + EC11📄 SH1106 datasheet (Sino Wealth)🎓 Sådan virker et breadboard

Sino Wealth lægger ikke selv datasheetet ud – linket går til Crystalfontz' controller-bibliotek, hvor det officielle SH1106-datasheet (rev. 2.3) kan hentes.

⚡ Hurtige specifikationer

Parameter Værdi
Skærmstørrelse 1.3 tommer, 128 x 64 pixels, hvid OLED
Controller-chip SH1106 (Sino Wealth) – internt 132 kolonner bred
Interface (skærm) I2C
I2C-adresse 0x3C
Drejeknap EC11 rotary encoder, uden endestop, med indbygget trykknap (ca. 20 klik pr. omgang)
Ekstra knapper CON (bekræft) og BAK (tilbage) på den mest udbredte version
Knapper/encoder Aktiv lav – trækker benet til GND når de aktiveres
Forsyning 3.3V (mange forhandlere angiver 3.3–5V – brug 3.3V hvis du er i tvivl)

📌 Pinout

Den mest udbredte 9-pins version har denne rækkefølge på stiftlisten:

Pin Navn Funktion Forbindes til
1 CON (KEY1) Bekræft-knap, aktiv lav Digital pin (INPUT_PULLUP)
2 SDA I2C-data til skærmen SDA
3 SCL I2C-clock til skærmen SCL
4 PSH Tryk på drejeknappen, aktiv lav Digital pin (INPUT_PULLUP)
5 TRA Encoder fase A Digital pin med interrupt
6 TRB Encoder fase B Digital pin
7 BAK (KEY0) Tilbage-knap, aktiv lav Digital pin (INPUT_PULLUP)
8 GND Stel GND
9 VCC Forsyning 3.3V
Der findes flere varianter af dette modul – nogle har kun 7 ben (VCC, GND, SCL, SDA, A, B, SW / ENCA, ENCB, SW) og ingen ekstra knapper, og rækkefølgen er forskellig. Følg altid silketrykket på dit print.

🔌 Sådan forbinder du den

Modul Arduino UNO / Nano ESP32 (DevKit)
VCC 3.3V 3.3V
GND GND GND
SDA A4 GPIO 21
SCL A5 GPIO 22
TRA D2 (interrupt) GPIO 32
TRB D3 GPIO 33
PSH D4 GPIO 25
CON D5 GPIO 26
BAK D6 GPIO 27

Alle knap- og encoderben sættes som INPUT_PULLUP i koden. Har modulet egne pull-up-modstande, skader det ikke.

💻 Eksempelkode

Installér "U8g2" (af oliver) via Bibliotekshåndteringen. Sketchen viser et tal, der tæller op og ned, når du drejer, og nulstilles med tryk på knappen. Den bruger U8g2's side-mode (_1_), så den også kører på en UNO med kun 2 KB RAM.

#include <Wire.h>
#include <U8g2lib.h>

// SH1106 128x64 over hardware-I2C, side-mode (sparer RAM)
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

const byte PIN_TRA = 2;   // skal være en interrupt-pin på UNO (2 eller 3)
const byte PIN_TRB = 3;
const byte PIN_PSH = 4;

volatile int position = 0;
int visPos = 1;            // tvinger første opdatering

void encoderISR() {
  // TRA er lige gået LOW - TRB fortæller retningen
  if (digitalRead(PIN_TRB) == HIGH) position++;
  else position--;
}

void setup() {
  pinMode(PIN_TRA, INPUT_PULLUP);
  pinMode(PIN_TRB, INPUT_PULLUP);
  pinMode(PIN_PSH, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(PIN_TRA), encoderISR, FALLING);
  u8g2.begin();             // adresse 0x3C er standard
}

void loop() {
  if (digitalRead(PIN_PSH) == LOW) position = 0;   // tryk = nulstil

  noInterrupts();
  int pos = position;
  interrupts();

  if (pos != visPos) {      // tegn kun når noget har ændret sig
    visPos = pos;
    u8g2.firstPage();
    do {
      u8g2.setFont(u8g2_font_ncenB14_tr);
      u8g2.drawStr(0, 20, "KompoNemt");
      u8g2.setCursor(0, 50);
      u8g2.print(pos);
    } while (u8g2.nextPage());
  }
}

💡 KompoNemt-tip fra værkstedet

  • SH1106 ≠ SSD1306: Prøver du et SSD1306-bibliotek, kan der godt komme noget frem, men billedet bliver forskudt med en stribe støj i højre side. Vælg en SH1106-constructor i U8g2 eller brug "Adafruit SH110X".
  • Encoderen prellar: Mekaniske encodere hopper lidt i kontakten. Tæller den dobbelt eller i ryk, så sæt en 10–100 nF kondensator fra TRA og TRB til GND, eller brug et encoder-bibliotek med debounce.
  • Lås ikke loopet: En hel skærmopdatering over I2C tager tid. Tegn kun når tallet ændrer sig (som i eksemplet), og brug interrupt til encoderen, så du ikke mister klik.
  • Fast I2C-adresse: Skal du bruge to af modulerne på samme bus, skal du have en I2C-multiplexer (fx TCA9548A).

🔧 Fejlfinding

  • Billedet er forskudt eller har støj i kanten: Du bruger en SSD1306-driver. Skift til SH1106.
  • Drejeknappen tæller den forkerte vej: Byt TRA og TRB (eller byt ++ og -- i koden).
  • Knapperne reagerer ikke: Husk INPUT_PULLUP og at knapperne giver LOW når de trykkes.
  • Intet på skærmen: Tjek pin-rækkefølgen på dit eksemplar (der findes flere varianter) og kør en I2C-scanner.
  • Board dukker ikke op i Arduino IDE? Se vores CH340-driver guide.

Sidder du fast? Skriv til os – vi hjælper gerne.