🎛️ 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
⚡ 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 |
🔌 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_PULLUPog 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.