HaniMandl: ESP32 Dev Kit statt Heltec Wifi Kit 32

Hintergrund

  • Heltec manchmal schwierig verfügbar bzw. werden verschiedene Versionen und Kopien verkauft.
  • wenn man ein großes OLED verwenden möchte braucht man das onboard-OLED des Heltec auch nicht.

Verwendetes Board: AZDelivery ESP32 Dev Kit C V4 NodeMCU

Plan

  • Display-Bus von I2C auf SPI ändern
  • ansonsten Hardware-Pins möglichst wie beim Heltec verwenden, damit am code nicht zu viel geändert werden muss

Empfehlungen Pins beim ESP32: ESP32 Pinout Reference: Which GPIO pins should you use? | Random Nerd Tutorials

OLED pin connection: SSD1306 based OLED connected to Arduino · jandelgado/arduino Wiki · GitHub

SPI statt I2C fürs OLED

Diese Anschüsse habe ich für das 2.42" OLED von DiyMore verwendet, das default SPI spricht, für I2C müssten zwei, drei Widerstände / Brücken umgelötet werden, s. Großes OLED-Display am HaniMandl anschließen

Test-wirings

       ESP32 SPI
OLED   H     V       HaniMandl
------------------------------
CS    15     5       15
DC    26    26       21
RES   27    27       16
SDA   13    23        4
SCL   14    18       18
VCC   3.3V
GND   GND

Die ersten beiden Spalten sind pin-Zuordnungen, die ich mit der U8g2 getestet habe und die funktionierten, mit der Verwendung von SW_SPI in der Lib ist man anscheinend flexibel in der Pinauswahl. Mit Hardware-SPI wäre das anders, da wird in der lib SDA und SCL (clock / data) nicht mehr als Parameter verwendet und man muss die default-Pins von V-SPI nehmen!

Bisher verwendete pins beim Heltec mit dem aktuellen HaniMandl-Code:

// Rotary Encoder
outputA  = 33
outputB  = 26
outputSW = 32

// Servo
servo_pin = 2

// 3-fach Schalter (HARDWARE_LEVEL == 2)
switch_betrieb_pin = 23
switch_vcc_pin     = 19     // <- Vcc
switch_setup_pin   = 22
vext_ctrl_pin      = 21     // Vext control pin Heltec V2

// Taster
button_start_vcc_pin = 13  // <- Vcc
button_start_pin     = 12
button_stop_vcc_pin  = 14  // <- Vcc
button_stop_pin      = 27

// HX711
hx711_sck_pin = 17
hx711_dt_pin  =  5

// Buzzer und LED 
buzzer_pin = 25

// OLED
clock = 15
data  =  4
reset = 16

Finales Ergebnis fürs SPI-OLED

Das könnte funktionieren:

// HaniMandl
// ggf. pin 16 noch tauschen, da beim WROVER der fürs externe SPI RAM verwendet wird
U8G2_SSD1309_128X64_NONAME0_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18, /* data=*/ 4, /* cs=*/ 15, /* dc=*/ 21, /* reset=*/ 16);

Schaut etwas unübersichtlich aus, Ziel bei der Verdrahtung war aber die ursprünglich vom Heltec genutzten pins auch hier zu verwenden, um am code möglichst wenig ändern zu müssen.

1 Like

Und? Funktioniert der Aufbau?

RES könnte IMHO eingespart werden, wenn der Display-Pin über Pullup-Widerstand auf VCC gelegt und gegen GND mit einem ausreichend dimensionierten Kondensator versehen würde.
Ich bin mir auch nicht sicher, ob DC wirklich benötigt wird.

Ja, der Anschluss des OLEDs per SPI wie oben dargestellt funktioniert, siehe das Video in Taster durch touch-Sensoren / touch-Pins ersetzen? dort wurde das Display so wie oben dokumentiert angeschlossen. Wollte es erst einmal zum Laufen bringen, pin-optimiert habe ich noch gar nichts. Würde sicher nicht schaden noch ein paar pins “freizuschaufeln”, wenn möglich.

Mindestens CS wird doch benötigt.
Um den DC-Pin kommt man anscheinend mit 3W_SW herum.

Hast Du irgendwelche für die Praxis relevante Performance-Einbußen bei Deinen Test mit 3W_SW gegenüber 4W_HW bemerkt?

Habe bisher 3W nicht getestet, nur das

1 Like