OLED Display in combination with Arduino and ESP8266

Hi folks,

I’m really getting frustrated and can’t find a solution. I’ve no idea, whats the problem:

I try to get the “0,96 Zoll I2C IIC SPI serielle 128 x 64 OLED LCD” running with my Arduino and an ESP8266 module.
The ESP module is running fine and I’m able to get serial output, an AP and so on.
Also the OLED display is working, when I use it directly from the Arduino board.

Now I want to get both modules working together. I tried it with the library esp8266-oled-ssd1306 (https://github.com/squix78/esp8266-oled-ssd1306) and also with ESP_SSD1106 (GitHub - somhi/ESP_SSD1306: SSD1306 display library for ESP8266 boards (Arduino IDE) (Adafruit_SSD1306 mod)).

Here is the code, that gets the following error:

SSD1306Brzo display (0x3c, D3, D5);

Error:

SSD1306UiDemo:60: error: 'D3' was not declared in this scope
  SSD1306Brzo display (0x3c, D3, D5);

I think, it has nothing to do with the display library itself, but I’m helpless, why the error occurs.

Thank you for any hints.
Stefan

Here is the whole sketch

#include <Wire.h> 
#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`
 #include <brzo_i2c.h> 
 #include "SSD1306Brzo.h"

// Include the UI lib
#include "OLEDDisplayUi.h"

// Include custom images
#include "images.h"


// Initialize the OLED display using brzo_i2c

SSD1306Brzo display (0x3c, D3, D5);
OLEDDisplayUi ui( &display );

void msOverlay(OLEDDisplay *display, OLEDDisplayUiState* state) {
  display->setTextAlignment(TEXT_ALIGN_RIGHT);
  display->setFont(ArialMT_Plain_10);
  display->drawString(128, 0, String(millis()));
}

void drawFrame1(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  // draw an xbm image.
  // Please note that everything that should be transitioned
  // needs to be drawn relative to x and y

  display->drawXbm(x + 34, y + 14, WiFi_Logo_width, WiFi_Logo_height, WiFi_Logo_bits);
}

void drawFrame2(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  // Demonstrates the 3 included default sizes. The fonts come from SSD1306Fonts.h file
  // Besides the default fonts there will be a program to convert TrueType fonts into this format
  display->setTextAlignment(TEXT_ALIGN_LEFT);
  display->setFont(ArialMT_Plain_10);
  display->drawString(0 + x, 10 + y, "Arial 10");

  display->setFont(ArialMT_Plain_16);
  display->drawString(0 + x, 20 + y, "Arial 16");

  display->setFont(ArialMT_Plain_24);
  display->drawString(0 + x, 34 + y, "Arial 24");
}

void drawFrame3(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  // Text alignment demo
  display->setFont(ArialMT_Plain_10);

  // The coordinates define the left starting point of the text
  display->setTextAlignment(TEXT_ALIGN_LEFT);
  display->drawString(0 + x, 11 + y, "Left aligned (0,10)");

  // The coordinates define the center of the text
  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->drawString(64 + x, 22 + y, "Center aligned (64,22)");

  // The coordinates define the right end of the text
  display->setTextAlignment(TEXT_ALIGN_RIGHT);
  display->drawString(128 + x, 33 + y, "Right aligned (128,33)");
}

void drawFrame4(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  // Demo for drawStringMaxWidth:
  // with the third parameter you can define the width after which words will be wrapped.
  // Currently only spaces and "-" are allowed for wrapping
  display->setTextAlignment(TEXT_ALIGN_LEFT);
  display->setFont(ArialMT_Plain_10);
  display->drawStringMaxWidth(0 + x, 10 + y, 128, "Lorem ipsum\n dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore.");
}

void drawFrame5(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {

}

// This array keeps function pointers to all frames
// frames are the single views that slide in
FrameCallback frames[] = { drawFrame1, drawFrame2, drawFrame3, drawFrame4, drawFrame5 };

// how many frames are there?
int frameCount = 5;

// Overlays are statically drawn on top of a frame eg. a clock
OverlayCallback overlays[] = { msOverlay };
int overlaysCount = 1;

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

	// The ESP is capable of rendering 60fps in 80Mhz mode
	// but that won't give you much time for anything else
	// run it in 160Mhz mode or just set it to 30 fps
  ui.setTargetFPS(60);

	// Customize the active and inactive symbol
  ui.setActiveSymbol(activeSymbol);
  ui.setInactiveSymbol(inactiveSymbol);

  // You can change this to
  // TOP, LEFT, BOTTOM, RIGHT
  ui.setIndicatorPosition(BOTTOM);

  // Defines where the first frame is located in the bar.
  ui.setIndicatorDirection(LEFT_RIGHT);

  // You can change the transition that is used
  // SLIDE_LEFT, SLIDE_RIGHT, SLIDE_UP, SLIDE_DOWN
  ui.setFrameAnimation(SLIDE_LEFT);

  // Add frames
  ui.setFrames(frames, frameCount);

  // Add overlays
  ui.setOverlays(overlays, overlaysCount);

  // Initialising the UI will init the display too.
  ui.init();

  display.flipScreenVertically();

}


void loop() {
  int remainingTimeBudget = ui.update();

  if (remainingTimeBudget > 0) {
    // You can do some work here
    // Don't do stuff if you are below your
    // time budget.
    delay(remainingTimeBudget);
  }
}

The regular Arduino environment will define A3, A5 for the Analog#3 and Analog#5 pins But it does NOT define D3, D5 for the Digital#3, Digital#5 pins.

So I suggest that you use

SSD1306Brzo display (0x3c, 3, 5);

I have no idea what your SSD1306Brzo class requires for its constructor. I just assume that it wanted the pin# for an external wiring connection.

I suggest that you look up the SSD1306Brzo documentation and place an explanatory comment.

David.