ESP32 With Integrated OLED (WEMOS/Lolin) - Getting Started Arduino Style

Published

Introduction: ESP32 With Integrated OLED (WEMOS/Lolin) - Getting Started Arduino Style

If you're like me, you jump at the chance to get your hands on the latest and greatest ESP8266/etc...and put it through its paces. The ESP32 is no different but I have found that there isn't too much out there yet with regards to documentation. The first 2 steps should pertain to most ESP32 flavors and not just the one depicted with the OLED. Hopefully these 'couple-of-steps' will get you started. Good Luck....Have Fun...Let me know if it worked for you. A few assumptions are that you know how to navigate the Arduino IDE and work with their libraries.

UPDATE: 05Jan18 - Be sure to check out some updated ESP32 videos at the end of this Instructable. Internet Clock and Bluetooth BLE in action. Look in the YouTube notes for links to sketches.

Step 1: What's Needed

ESP32 SOC

USB cable

Arduino IDE

Step 2: Assuming Arduino IDE Is Already Installed

By default, the ESP32 does not show yet with the standard boards manager entries pointing to http://arduino.esp8266.com/stable/package_esp8266c...

Because of this we need to manually add them for the time being.

Follow ALL steps at the following site to prepare your Arduino IDE for your new ESP32 board.

https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/windows.md

If you do have the integrated OLED, and would like to try and get it running, proceed to the next step.

Step 3: Get the OLED Working on Arduino

Now that you've probably loaded an Arduino sketch on your ESP32, the 'pretty' pictures that were running on it when you first plugged it in are probably gone.

This particular ESP32 uses the SSD1306 libraries to communicate with the OLED display. I have had luck getting started by loading the following Arduino library and testing one of the SSD1306's included Example sketches. If the sketch fails to compile with errors, make sure you change the address it failed on to (0x3c, 5,4).

This ESP’s dedicated I2C pins are on GPIO 5 and 4 for data and clock respectively.

The attached ESP32_Wemos_I2C_Scanner sketch will confirm if your pins are addressed correctly. Load it on your ESP32 and check out serial monitor.

https://github.com/squix78/esp8266-oled-ssd1306

Step 4: Functional OLED With Arduino LDR Analog Input

****UPDATE 28Dec17 Check out video of ESP32 with working Internet/NTP clock. Code download URL's available on YouTube below video.

I decided to just keep rolling with this and managed to get the OLED working with 'real' data and not just the examples. Analog LDR feed. I've attached the Arduino sketch to this to help. Take it for a spin and let me know how you make out! If you need a 'brush-up' on the workings of Arduino and Analog, head over to https://programmingelectronics.com/tutorial-21-ana...

I got started on my Arduino adventure with these guys...the course is definitely worthwhile.

Share

Recommendations

  • Casting Contest

    Casting Contest
  • Clocks Contest

    Clocks Contest
  • Woodworking Contest

    Woodworking Contest
user

We have a be nice policy.
Please be positive and constructive.

Tips

I bought one of these modules from a Chinese website. It has absolutely no instructions. It took me a while to figure out the device address and the I2C port is address. If you want to find the address of the OLED, the wire.begin should be wire.begin(5.4) instead of wire.begin().

2 Questions

I am following the instructions to add support for my ESP32 board at the page you list and, due to ignorance I do not know how to do this step:

open a Git Bash session pointing to ARDUINO_SKETCHBOOK_DIR and execute git submodule update --init --recursive

I did change the actual directory of the GIT Bash to the directory used as "ARDUINO_SKETCHBOOK_DIR" and the did enter the instruction. The error message made sense to me but I do not know how to do it right:
"No such file or directory". This directoy does not have any git content.

What do I have to do to be able to execute the instruction?

Hey Hellmut,
The folder mentioned "ARDUINO_SKETCHBOOK_DIR" in the example is just example. You need to add your specific folder structure for the target directory like they show in the screenshot on that same page. Please let me know if this helps or if you've already gotten it to work.
Have a good day!
Thanx,
JohnnyFRX

2 more answers

Thanks for responding. It is hard to learn how to present a question, sorry. When I tried I did replace "ARDUINO...DIR" with the correct path to the folder where the sketches are stored. Effectively I moved the working directory to my "ARDUINO...DIR" My problem was in executing the GIT Bash session:

git submodule update --init --recursive

I got the error message :

"No such file or directory"

So I do not know how to successfully do this step!

Try changing directories all the way into the esp32 subdirectory. See attached screenshot from my setup.

ScreenHunter 44.jpg

34 Comments

I can upload the code to the board,

but only got this on my serial :

ets Jun 8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:812
load:0x40078000,len:0
load:0x40078000,len:11404
entry 0x40078a28

nothing on my OLED display

Here's the init code :

// Initialize the OLED display using Wire library
SSD1306 display(0x3c, D3, D5);
// SH1106 display(0x3c, D3, D5);


#define DEMO_DURATION 3000
typedef void (*Demo)(void);

int demoMode = 0;
int counter = 1;

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


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

display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);

Hi Johnny, thanks for elaborating and posting the info. So, I got my board up and running with WiFi and OLED examples.

Only thing that failed was your scan. Any idea ?

Thanks - Jochen.

scan-err.jpg
2 replies

Hi JochenH2,

Did the scan cause that reset? Your serial monitor should look something like my attached screenshot.

Are your I2C pins the same? Wire.begin(5,4);

ScreenHunter 25.jpg

The
reset was caused by me (button press). After boot message on monitor,
normally the sketch serial messages occur (e.g. with the WiFi scan
example). However, on the I2C scan example, no further messages appear. I
think this is caused by the flash read err 1000 in the beginning.

This
err occurs with your I2C scan example and with your LDR example too,
whereas the OLED examples (after the pin changes to 5,4) work fine. Can
not see what's the difference between these sketches causing that
behavior.

A search on the internet for flash read err 1000 gave hints on bootloader problems, but I'm not sure how to deal with this.

If you want to try something possibly even easier than the Arduino IDE, try the ESP32 for Lua web IDE to run your OLED from Lua on the ESP32. http://chilipeppr.com/esp32 is the site. I found it pretty easy once I had an XBM image converter widget built in ChiliPeppr workspace as seen in the attached images.

esp32-ws.pngesp32v2.jpgesp32 workspace.pngspjs.pngesp32firmware.png

Great tutorial, all worked fine. Thank you!

Did you try connecting other I2C devices to pins 4 and 5? I tried to connect BME280. and as soon as I connect the I2C pins the OLED stops working and the I2C scanner cannot find any devices on that pins (when I connect the same board to other pins, I2C scanner finds the devices).

2 replies

Good to hear it helped. I may tinker this weekend and see what I can break. Will let you know if I am successful in adding additional I2C devices.

Hi! Thanks for your response! It seems my BME280 boards were all damaged. I couldn't make them work on other pins either although I2C scanner seems to be finding all the I2C addresses. Seems to be manufacturer defect. I have ordered more boards from another seller, will try them out when they arrive and will write here.

Thank you mister for this tutorial, it helped me a lot !.

Here is what i have so far (based on a WEMOS Lolin 32 board ) :

a Wifi scanner and once connected to a given network

a simple http server on it that recieves some commands thanks to the URLs.

The commands are needed to control a motor.

so here is my question ( i am a developper but pretty new in the whole electonic world ;-) )

IS it possible to control a motor driver ( i have a BTS7960 43A link : https://www.instructables.com/id/Motor-Driver-BTS7960-43A/) with that wemos lolin board ?

or do i need an arduino for example ?

thanks for your help!

have a nice day

3 replies

Hi Kasras4,

I think the problem you could run into is that the voltage output of the ESP's GPIO pins is 3.6v. If you are working with a motor driver like the BTS7960 and using PWM, you 'may' need a reliable 5v output like the Uno/Mega have. All of the GPIO's on the ESP32 support PWM and the correct frequency so you should be OK in those respects.

Thank you.

Could you tell me where did you find the fact that this ESP’s dedicated I2C pins are on GPIO 5 and 4 for data and clock respectively ?

is it mentioned in the datasheet of the esp32 ? if yes which page please ? ( i am kind of lost with all the tables )

No datasheet...couldn't find decent docs for this particular board anywhere. I tracked down a comment buried in a vendors comment. Also, more info is at the link below at this time...wasn't there when I started working with this board. Hope it helps as a starting point at the least. https://www.esp32.com/viewtopic.php?t=2058

what is the value for D3 and D5?

i have this compiler error

'D3' was not declared in this scope

SSD1306 display(0x3c, D3, D5);

7 replies

This ESP’s dedicated I2C pins are on GPIO 5 and 4 for data and clock respectively.

I've attached ESP32_Wemos_I2C_Scanner sketch to step 3 which should confirm if your pins are addressed correctly. Load it on your ESP32 and check out serial monitor.

scan return:

I2C device found at address 0x3C !

if i set:

SSD1306 display(0x3c, 5, 4);

is blocked on "Hard resetting....."

Also...can you run any other simple Arduino sketches on it successfully? WiFi scanner or similar...to output to the serial monitor so you know that it is processing.

When you first powered it up 'out-of-the-box' without loading anything new to it, did the screen demo run?

When you first powered it up 'out-of-the-box' without loading anything new to it, did the screen demo run?

yes, demo pre-loaded worked fine

SimpleDemo example oled screen is empty