Loading

Need some help with an OLED on ESP3D using a NodeMCU-32S

Please Login to Comment

I just setup ESP3D on a NodeMCU-32s-Wroom module, but have an external SSD1306 128x64 oled laying around that I am not using and saw that 2.0 now supports oled's, but I can NOT get this to work at all. The code is a bit confusing because I am not seeing this type of reference in any other ssd1306 sketches I have worked with. I haven't had any problems getting this oled to work with any other Arduino sketches, so it definitely works.

Here is the code they have in the config.h:

//Pins where the screen is connected

ifdef ESP_OLED_FEATURE

define OLED_PIN_A 21

define OLED_PIN_B 22

define OLED_ADDR 0x3c

define HELTEC_EMBEDDED_PIN 0 //0 to disable

define OLED_FLIP_VERTICALY 1 //0 to disable

endif

My SCL is pin 22 and my SDA is pin 21 on this board, but usually, it just references i2c or scl and sda, never seen pin_a and pin_b. I have swapped the pins around and no luck, tried inputting sda and scl in place of the pin numbers, but just errored. I looked through the rest of the files and no other references to this popped up and they have no documentation for it, and well, very little for esp3d in general... I have attached the 2 OLED files and the config.h from esp3d 2.0.

Here is where I got this: https://github.com/luc-github/ESP3D/tree/2.0

Earlier versions don't have oled support, and this was the only version to work with my board, all the others caused a core 1 panic and reset loop. So, anyone have any idea? I have SCL, SDA and vcc/gnd all hooked up, I reflashed a few ssd1306 samples to be sure the module works, and no issue with other code. I have foregone connecting the DHT11 for temp/humidity until I get OLED working.

For those that are curious or clueless, ESP3D is a printer server/controller kinda like Octo/Astro that runs on the $5 ESP8266 and ESP32 boards, which have Wifi & Bluetooth included. It looks like they yanked the web interface straight from Repetier, but it is getting better, Beyond being a wifi/bluetooth enabled print server they have been adding in external temp monitoring, power monitoring, and a bunch of other monitoring tools, and the future looks like it will become a remote printer helper that does everything you could ever need, of course, it'll be useless once a RAMPS style board for ESP32 hits the consumer market :) Yet can't beat adding in Wifi, BT, and a print server for $5. I'm done rambling :)

Many thanks!

You have specified this correctly:

"ifdef ESP_OLED_FEATURE
define OLED_PIN_A 21
define OLED_PIN_B 22
define OLED_ADDR 0x3c
define HELTEC_EMBEDDED_PIN 0 //0 to disable
define OLED_FLIP_VERTICALY 1 //0 to disable
endif"

Not trying to sound condescending, but make sure the i2c address of the screen is 0x3c. I have one sceeen that isnt and it pissed me off for a couple of days until i looked at the back of it.

Then:
Make sure this library is installed:

https://github.com/ThingPulse/esp8266-oled-ssd1306/releases

The esp_oled.h and .cpp are using version 3.* I think. If you look at the ESP3D readme, he is referencing the library as "oled-ssd1306 from @squix78." squix78 has since rolled his libraries into his companys github account (Thingpulse link above) and the library has had several revisions since.

But, that being said... test that the oled works with the library:

Open the SSD1306DrawingDemo

Change line 65 to:

SSD1306Wire display(0x3c, 21, 22);

And then upload. if this works, then it will simply come down to finding the correct version oif the library that was used for ESP3D or chasing down all of the compiling errors and correcting the library you have installed to match.

I cant get ESP3D v2.0 to compile for my esp32 so I cant test any further, but I do know that if you use version 4 of the oled library, you will have to change the bitmap array from const char to const uint8_t. Hope that helps