Product images are for informational purposes only and may vary slightly depending on the batch and supplier. Product specifications and prices may be subject to change without notice. We do our best to provide accurate and complete product specifications, but they may not be completely accurate. If you encounter any such situation, please let us know.
The product is intended for specialists and requires qualified and authorized personnel. The product does not include assembly/use instructions . Putting the product into operation by unqualified persons leads to the loss of the warranty according to the Terms and Conditions on the site.
The specified technical parameters (current, power, etc.) represent maximum allowable values under ideal operating conditions. For safe use and optimal lifespan, it is recommended to operate the product continuously at no more than 50% of the specified maximum values.
Module with 0.96 inch OLED screen and EC11 rotary encoder
Compact solution for HMI interfaces and DIY projects, combines a high-contrast 0.96 inch OLED and an EC11 rotary encoder for precise menu navigation and adjustments. I2C communication reduces wiring and allows for quick integration with Arduino and similar boards. Includes encoder push and confirm and return buttons for clear control and immediate visual feedback.
Shipping by Thursday 27 August
International fast shipping within EU. Free Shipping for orders above 100 EUR in most EU countries.
We ship from our stock within 24H
You earn points with every order, worth 5%.
This module combines a 0.96 inch OLED display with an EC11 rotary encoder, providing a compact solution for quickly creating a user interface.
Connecting the OLED via I2C allows for easy integration with Arduino and other development boards, with a reduced wire count. The OLED display provides high contrast and very good readability, and the rotary encoder provides precise control for menu navigation, selections and parameter adjustment.
The module also includes dedicated buttons for confirmation and return, making it suitable for control panels, simple HMI interfaces, and DIY projects where you need clear commands and immediate visual feedback.
Specifications:
Operating voltage: 3.3-5V
Display type: OLED
OLED driver: SSD1306
Screen size: 0.96 inch
Control type: rotary encoder EC11
Communication interface: I2C
Dimensions: 56 x 97mm
Pinout:
| Pine | Function |
|---|---|
| Cone | CONFIRM button |
| SDA | I2C data line for OLED |
| SCK | I2C clock line for OLED |
| PSH | Press encoder EC11 |
| TRA | Signal A encoder EC11 |
| GRT | Signal B encoder EC11 |
| BAK | RETURN button |
| GND | Mass |
| VCC | Feeding |
Use:
Connect the module to the Arduino board following the pinout and power it according to the specifications.
Programming the OLED is done like any other OLED 0.96.
Login:
| Module pin | Arduino UNO | Role |
|---|---|---|
| GND | GND | Common table |
| VCC | 3.3V | Module power supply |
| SCL | A5 | I2C clock |
| SDA | A4 | I2C data |
| TRA | D2 | Encoder channel A recommended on interrupt |
| GRT | D3 | Encoder channel B recommended on interrupt |
| PSH | D4 | Press encoder select |
| Cone | D5 | Optional CONFIRM button |
| BAK | 6 | Optional RETURN button |
Arduino UNO Test Code:
#include
#include
#define OLED_ADDR 0x3C
#define OLED_W 128
#define OLED_H 64
Adafruit_SSD1306 display(OLED_W, OLED_H, &Wire)
#define ENC_A 2
#define ENC_B 3
#define ENC_SW 4
#define BTN_CON 5
#define BTN_BAK 6
volatile int8_t encDelta = 0
volatile uint8_t lastA = 0
unsigned long tSw = 0
unsigned long tCon = 0
unsigned long tBak = 0
const unsigned long debounceMs = 180
const char* menuItems[] = {
"Status",
"Settings",
"Calibration",
"Info",
"Reset"
}
const uint8_t menuCount = sizeof(menuItems) / sizeof(menuItems[0])
int menuIndex = 0
int page = 0
int setSpeed = 10
int setThreshold = 50
void isrEncA() {
uint8_t a = digitalRead(ENC_A)
If (a == lastA) return
LastA = a
uint8_t b = digitalRead(ENC_B)
If (b != a) encDelta++
Else encDelta--
}
bool pressed(int pin, unsigned long &tLast) {
if (digitalRead(pin) == LOW) {
unsigned long now = millis()
if (now - tLast > debounceMs) {
TLast = now
Return true
}
}
Return false
}
void drawHeader(const char* title) {
Display.clearDisplay()
Display.setTextSize(1)
display.setTextColor(WHITE)
display.setCursor(0, 0)
Display.print(title)
display.drawLine(0, 10, 127, 10, WHITE)
}
void drawMenu() {
DrawHeader("SigmaNortec")
Int y = 14
for (uint8_t i = 0; i < menuCount; i++) {
If (i == menuIndex) {
display.fillRect(0, y - 1, 128, 10, WHITE)
display.setTextColor(BLACK)
} else {
display.setTextColor(WHITE)
}
display.setCursor(2, y)
Display.print(menuItems[i])
Y += 11
}
display.setTextColor(WHITE)
display.setCursor(0.56)
Display.print("Rotation: menu OK: select BAK: back")
Display.display()
}
void drawStatus() {
DrawHeader("Status")
display.setCursor(0, 16)
display.print("Encoder: OK")
display.setCursor(0, 28)
Display.print("Speed: ")
Display.print(setSpeed)
display.setCursor(0, 40)
Display.print("Threshold: ")
Display.print(setThreshold)
display.setCursor(0.56)
Display.print("BAK: back")
Display.display()
}
void drawSettings() {
DrawHeader("Settings")
display.setCursor(0, 16)
Display.print("Speed: ")
Display.print(setSpeed)
display.setCursor(0, 28)
Display.print("Threshold: ")
Display.print(setThreshold)
display.setCursor(0, 44)
Display.print("Rotation: adjustment")
display.setCursor(0.56)
Display.print("OK: switch BAK: back")
Display.display()
}
void drawInfo() {
DrawHeader("Info")
display.setCursor(0, 16)
display.print("OLED SSD1306 I2C")
display.setCursor(0, 28)
display.print("Encoder EC11")
display.setCursor(0, 40)
display.print("Menu: Sigmanortec")
display.setCursor(0.56)
Display.print("BAK: back")
Display.display()
}
void setup() {
pinMode(ENC_A, INPUT_PULLUP)
pinMode(ENC_B, INPUT_PULLUP)
pinMode(ENC_SW, INPUT_PULLUP)
pinMode(BTN_CON, INPUT_PULLUP)
pinMode(BTN_BAK, INPUT_PULLUP)
LastA = digitalRead(ENC_A)
attachInterrupt(digitalPinToInterrupt(ENC_A), isrEncA, CHANGE)
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)
Display.clearDisplay()
Display.setTextWrap(false)
display.dim(0)
Display.display()
DrawMenu()
}
void loop() {
Int8_t d = 0
NoInterrupts()
D = encDelta
EncDelta = 0
Interrupt()
bool ok = pressed(ENC_SW, tSw) || pressed(BTN_CON, tCon)
bool back = pressed(BTN_BAK, tBak)
If (page == 0) {
If (d != 0) {
menuIndex += (d > 0) ? 1 : -1
if (menuIndex < 0) menuIndex = menuCount - 1
if (menuIndex >= menuCount) menuIndex = 0
DrawMenu()
}
If (ok) {
if (menuIndex == 0) page = 1
if (menuIndex == 1) page = 2
if (menuIndex == 2) page = 3
if (menuIndex == 3) page = 4
if (menuIndex == 4) page = 5
if (page == 1) drawStatus()
if (page == 2) drawSettings()
if (page == 3) drawHeader("Calibration"), display.setCursor(0, 20), display.print("Calibration in progress"), display.setCursor(0, 56), display.print("BAK: back"), display.display()
if (page == 4) drawInfo()
If (page == 5) {
drawHeader("Reset")
display.setCursor(0, 20)
display.print("Reset values")
SetSpeed = 10
SetThreshold = 50
display.setCursor(0.56)
display.print("OK: menu")
Display.display()
}
}
} else if (page == 1) {
If (back) {
Page = 0
DrawMenu()
}
} else if (page == 2) {
static bool editSpeed = true
If (ok) {
editSpeed = !editSpeed
DrawSettings()
}
If (d != 0) {
If (editSpeed) {
setSpeed += (d > 0) ? 1 : -1
if (setSpeed < 0) setSpeed = 0
if (setSpeed > 99) setSpeed = 99
} else {
setThreshold += (d > 0) ? 1 : -1
if (setPrag < 0) setPrag = 0
if (setPrag > 999) setPrag = 999
}
DrawSettings()
}
If (back) {
Page = 0
DrawMenu()
}
} else if (page == 3 || page == 4) {
If (back) {
Page = 0
DrawMenu()
}
} else if (page == 5) {
If (ok || back) {
Page = 0
DrawMenu()
}
}}
}
Produs destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie si cercetare.
Produsul trebuie utilizat numai conform specificatiilor tehnice mentionate in descriere si/sau in documentatia produsului.
Avertismente generale de siguranta:
Nu utilizati produsul la tensiuni, curenti sau temperaturi peste valorile specificate.
Montajul si conectarea trebuie realizate de persoane cu cunostinte tehnice minime in domeniul electric/electronic.
Evitati scurtcircuitele, inversarea polaritatii si conectarea gresita a alimentarii.
Nu lasati produsul alimentat nesupravegheat in timpul testelor.
Produsul nu este jucarie si nu este destinat copiilor.
Pentru modulele electronice, se recomanda utilizarea in carcase, panouri sau montaje protejate, dupa caz.
Identificare produs:
Denumirea produsului, codul/SKU-ul si caracteristicile tehnice sunt mentionate in pagina produsului si/sau pe eticheta ambalajului.
Producator / Importator / Distribuitor:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Website: www.sigmanortec.ro
Persoana responsabila in UE:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Documentatie si siguranta:
Pentru informatii suplimentare, fise tehnice, declaratii de conformitate sau instructiuni, ne puteti contacta la [email protected].