This post show how to program NodeMCU (ESP8266) on Arduino IDE (with ESP8266 core for Arduino), to display on 0.96 inch 128X64 I2C OLED (base on SSD1306), using Adafruit SSD1306 and Adafruit GFX Libraries.
- It's assumed you are programming NodeMCU on Arduino Software, with ESP8266 core for Arduino installed.
- Connect I2C OLED to NodeMCU.
OLED VCC - NodeMCU 3v3
OLED GND - NodeMCU GND
OLED SCL - NodeMCU D1
OLED SDA - NodeMCU D2
(reamrk: the Fritzing parts of can OLED_SSD1306_I2C_128x64 can be download HERE)
- Add OLED library to Arduino Software:
* Open Library Manager in Arduino IDE, search SSD1306. You can find Adafruit SSD1306 library, SSD1306 OLED driver library for 'monochrome' 128x64 and 128x32 OLEDs. Install it.
* Install Adafruit GFX Library also.
- Open SSD1306 example:
File > Examples > Adafruit SSD1306 > ssd1306_128x64_i2c.
If you get error of "Height incorrect, please fix Adafruit_SSD1306.h!":
Open Adafruit_SSD1306.h file, in the path like "C:\Users\user\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.h". Un-comment "#define SSD1306_128_64", and comment "#define SSD1306_128_32".
- Return to the Adafruit SSD1306 library again. Visit the web site of the library, https://github.com/adafruit/Adafruit_SSD1306. It's Tested Works on ESP8266 (Adafruit Huzzah), but have to change OLED_RESET to different pin if using default I2C pins D4/D5.
There are no RESET signal on my I2C OLED, so I assign it to any pin, LED_BUILTIN (the on-board LED).
- Make sure the I2C address is correct:
My I2C OLED have address 3C, correct the code display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
- Finished.
more:
- Hello World NodeMCU (ESP8266) + 128x64 I2C OLED
Related:
- Another library of I2C OLED for ESP8266 core for Arduino - esp8266-OLED
- esp8266-oled-ssd1306 library
Thanks for documenting this. I was pulling my hair out until I came across your blog post. Turns out I was using the wrong pins AND the wrong I2C address.
ReplyDelete--Aaron
Nice Work Eric,
ReplyDeleteIs there any way to change the default I2C pins for ESP8266 & boot logo of adafruit library ?
Attrish
Yes you can remove Adafruit library logo - it's default content of buffer array coded at the beginning of cpp file (starts @ line ~40) - just put all zeros. However it is not allowed to remove it if You redistribute Your app.
DeleteBig thanks ! I try all day and almost give up until I found this.
ReplyDeleteBIG thanks ... you solved the issue i faced while shifting from UNO to WEMOSd1 .
ReplyDeleteChanging RESET pin to LED_BUILTIN did the trick, just before I put the MCU and the display in the meat grinder :-)
ReplyDeleteThank you
With the new NodeMCU I had to change RESET to 1 (not LED_BUILTIN) and then it worked.
ReplyDeletesame here, I was just about to give up, thanks for the tip.
Deletecan i used SD0,SD1,SD2 pins of node mcu?
ReplyDeletethanks mate!!
ReplyDeleteGracias por el aporte, muy interesante...
ReplyDeleteare you facing some issues with Arduino 1.8.2 ??? it is not uploading the firmware to my esp8266 nodemcu ...
ReplyDeleteExcellent. Worked like a dream!
ReplyDeleteWorked like a charm, thx!
ReplyDeleteI'm still having problems here: the graphical part of the demo works just fine.
ReplyDeleteAs soon as the code hits the "text" part I get an 'Exception (3)'.
Anyone here encountered that one?
I'm using a Wemos D1 mini, SCL and SDA are connected as I was told ;).
Reset goes to the "builtin LED" (in some other context there was the advice to set it to '-1' ...)
Thanks,
Christoph
Very helpful!! I spent hours solving the i2c connection and then I found your tutorial and it is working now!!
ReplyDeleteThanks!!
ReplyDeleteThanks, the address almost screw me up! luckily you mentioned above
ReplyDelete