From 57308b3a8e749116916ab00825988b7c8224744a Mon Sep 17 00:00:00 2001 From: Dirk Jahnke Date: Mon, 22 Jan 2018 13:02:30 +0100 Subject: [PATCH] Modified to support Wemos mini shiled OLED 64x48 --- .gitignore | 5 ++ README.md | 3 +- ...no_ssd1306.js => api_arduino_ssd1306dj.js} | 7 +-- mos.yml | 6 +-- ...uit_SSD1306.cpp => Adafruit_SSD1306dj.cpp} | 54 +++++++++++++++++-- ...dafruit_SSD1306.h => Adafruit_SSD1306dj.h} | 16 +++--- src/library.properties | 10 ++-- src/mgos_arduino_adafruit_ssd1306_c.c | 5 -- ...arduino_ssd1306.cpp => mgos_ssd1306dj.cpp} | 3 +- ...gos_arduino_ssd1306.h => mgos_ssd1306dj.h} | 6 +-- src/mgos_ssd1306dj_c.c | 5 ++ 11 files changed, 88 insertions(+), 32 deletions(-) create mode 100644 .gitignore rename mjs_fs/{api_arduino_ssd1306.js => api_arduino_ssd1306dj.js} (96%) rename src/{Adafruit_SSD1306.cpp => Adafruit_SSD1306dj.cpp} (88%) rename src/{Adafruit_SSD1306.h => Adafruit_SSD1306dj.h} (94%) delete mode 100644 src/mgos_arduino_adafruit_ssd1306_c.c rename src/{mgos_arduino_ssd1306.cpp => mgos_ssd1306dj.cpp} (98%) rename src/{mgos_arduino_ssd1306.h => mgos_ssd1306dj.h} (95%) create mode 100644 src/mgos_ssd1306dj_c.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f68a4ce --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +lib +build +deps +*.a +*.bak diff --git a/README.md b/README.md index e014185..26114f4 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ -# Arduino Adafruit SSD1306 library for Mongoose OS +# Arduino Adafruit SSD1306 library for Mongoose OS and Wemos ESP8266 D1 mini OLED board (64x48) +# Origin: https://github.com/mongoose-os-libs/arduino-adafruit-ssd1306 diff --git a/mjs_fs/api_arduino_ssd1306.js b/mjs_fs/api_arduino_ssd1306dj.js similarity index 96% rename from mjs_fs/api_arduino_ssd1306.js rename to mjs_fs/api_arduino_ssd1306dj.js index e470627..03b80ff 100644 --- a/mjs_fs/api_arduino_ssd1306.js +++ b/mjs_fs/api_arduino_ssd1306dj.js @@ -1,5 +1,5 @@ // Arduino Adafruit_SSD1306 library API. Source C API is defined at: -// [mgos_arduino_ssd1306.h](https://github.com/mongoose-os-libs/arduino-adafruit-ssd1306/blob/master/src/mgos_arduino_ssd1306.h) +// [mgos_arduino_ssd1306dj.h](https://github.com/mongoose-os-libs/arduino-adafruit-ssd1306/blob/master/src/mgos_arduino_ssd1306.h) let Adafruit_SSD1306 = { _ci2c: ffi('void *mgos_ssd1306_create_i2c(int, int)'), @@ -44,6 +44,7 @@ let Adafruit_SSD1306 = { RES_96_16: 0, RES_128_32: 1, RES_128_64: 2, + RES_64_48: 3, EXTERNALVCC: 1, SWITCHCAPVCC: 2, @@ -212,7 +213,7 @@ let Adafruit_SSD1306 = { // Initialize Adafruit_SSD1306 library for I2C. // Return value: handle opaque pointer. // We set the reset pin and - // Resolution: 0 - RES_96_16, 1 - RES_128_32, 2 - RES_128_64. + // Resolution: 0 - RES_96_16, 1 - RES_128_32, 2 - RES_128_64, 3 - RES_64_48. obj.ssd = Adafruit_SSD1306._ci2c(rst, res); return obj; }, @@ -223,7 +224,7 @@ let Adafruit_SSD1306 = { // Initialize Adafruit_SSD1306 library for SPI. // Return value: handle opaque pointer. // We set DataCommand, ChipSelect, Reset and - // Resolution: 0 - RES_96_16, 1 - RES_128_32, 2 - RES_128_64. + // Resolution: 0 - RES_96_16, 1 - RES_128_32, 2 - RES_128_6, 3 - RES_64_484. obj.ssd = Adafruit_SSD1306._cspi(dc, rst, cs, res); return obj; }, diff --git a/mos.yml b/mos.yml index d7955f8..a5bd8c5 100644 --- a/mos.yml +++ b/mos.yml @@ -1,5 +1,5 @@ -author: mongoose-os -description: Arduino Adafruit SSD1306 library +author: Dirk Jahnke +description: Arduino Adafruit SSD1306 library modified for Wemos OLED 64x48 type: lib version: 1.0 @@ -16,5 +16,3 @@ tags: - c - js - hw - -skeleton_version: 2017-05-18 diff --git a/src/Adafruit_SSD1306.cpp b/src/Adafruit_SSD1306dj.cpp similarity index 88% rename from src/Adafruit_SSD1306.cpp rename to src/Adafruit_SSD1306dj.cpp index 032ca43..0ee2e9b 100644 --- a/src/Adafruit_SSD1306.cpp +++ b/src/Adafruit_SSD1306dj.cpp @@ -33,9 +33,35 @@ All text above, and the splash screen below must be included in any redistributi #include #include #include "Adafruit_GFX.h" -#include "Adafruit_SSD1306.h" +#include "Adafruit_SSD1306dj.h" static const uint8_t logo_buffer[] = { +#if defined SSD1306_64_48 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, +0xE0, 0xF0, 0xF8, 0xFC, 0xFC, 0xFE, 0xFF, 0xFC, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, +0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x80, 0xC0, 0xFC, 0xFF, 0xFF, +0xFF, 0xFF, 0x7F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC7, 0xC7, 0x87, 0x8F, 0x9F, 0x9F, 0xFF, 0xFF, +0xFF, 0xC1, 0xC0, 0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xFC, 0xFC, 0xFE, 0xFE, +0xFE, 0xFC, 0xFC, 0xF8, 0xF8, 0xF0, 0xE0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, +0xE0, 0xF1, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x0F, 0x0F, 0x87, 0xE7, 0xFF, 0xFF, +0xFF, 0x1F, 0x1F, 0x3F, 0xF9, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFE, 0xFF, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7E, 0x3F, 0x3F, 0x0F, 0x1F, 0xFF, 0xFF, +0xFF, 0xFC, 0xF0, 0xE0, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, +0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x1F, 0x03, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +#else 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -102,6 +128,7 @@ static const uint8_t logo_buffer[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +#endif }; #define ssd1306_swap(a, b) { int16_t t = a; a = b; b = t; } @@ -114,6 +141,8 @@ int Adafruit_SSD1306::getW(Adafruit_SSD1306::Resolution res) { return 128; case RES_96_16: return 96; + case RES_64_48: + return 64; } return 0; } @@ -127,6 +156,8 @@ int Adafruit_SSD1306::getH(Adafruit_SSD1306::Resolution res) { return 64; case RES_96_16: return 16; + case RES_64_48: + return 48; } return 0; } @@ -301,6 +332,12 @@ void Adafruit_SSD1306::begin(uint8_t vccstate, uint8_t i2caddr, bool reset) { else { ssd1306_command(0xAF); } break; + + case RES_64_48: + ssd1306_command(SSD1306_SETCOMPINS); // 0xDA + ssd1306_command(0x12); + ssd1306_command(SSD1306_SETCONTRAST); // 0x81 + ssd1306_command(0xCF); } ssd1306_command(SSD1306_SETPRECHARGE); // 0xd9 @@ -448,9 +485,15 @@ void Adafruit_SSD1306::dim(boolean dim) { } void Adafruit_SSD1306::display(void) { - ssd1306_command(SSD1306_COLUMNADDR); - ssd1306_command(0); // Column start address (0 = reset) - ssd1306_command(WIDTH-1); // Column end address (127 = reset) + if (WIDTH == 64 && HEIGHT == 48) { + ssd1306_command(SSD1306_COLUMNADDR); + ssd1306_command(0x20); // Column start address (0 = reset) + ssd1306_command(0x20 + WIDTH-1); // Column end address (127 = reset) + } else { + ssd1306_command(SSD1306_COLUMNADDR); + ssd1306_command(0); // Column start address (0 = reset) + ssd1306_command(WIDTH-1); // Column end address (127 = reset) + } ssd1306_command(SSD1306_PAGEADDR); ssd1306_command(0); // Page start address (0 = reset) @@ -458,6 +501,9 @@ void Adafruit_SSD1306::display(void) { case 64: ssd1306_command(7); // Page end address break; + case 48: + ssd1306_command(5); // Page end address + break; case 32: ssd1306_command(3); // Page end address break; diff --git a/src/Adafruit_SSD1306.h b/src/Adafruit_SSD1306dj.h similarity index 94% rename from src/Adafruit_SSD1306.h rename to src/Adafruit_SSD1306dj.h index 3840488..1593f6b 100644 --- a/src/Adafruit_SSD1306.h +++ b/src/Adafruit_SSD1306dj.h @@ -1,4 +1,5 @@ /********************************************************************* +DJ: Added RES_64_48 This is a library for our Monochrome OLEDs based on SSD1306 drivers Pick one up today in the adafruit shop! @@ -15,8 +16,8 @@ Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, check license.txt for more information All text above, and the splash screen must be included in any redistribution *********************************************************************/ -#ifndef _Adafruit_SSD1306_H_ -#define _Adafruit_SSD1306_H_ +#ifndef _Adafruit_SSD1306dj_H_ +#define _Adafruit_SSD1306dj_H_ #if ARDUINO >= 100 #include "Arduino.h" @@ -71,14 +72,15 @@ All text above, and the splash screen must be included in any redistribution -----------------------------------------------------------------------*/ // #define SSD1306_128_64 - #define SSD1306_128_32 + #define SSD1306_64_48 +// #define SSD1306_128_32 // #define SSD1306_96_16 /*=========================================================================*/ #if defined SSD1306_128_64 && defined SSD1306_128_32 #error "Only one SSD1306 display can be specified at once in SSD1306.h" #endif -#if !defined SSD1306_128_64 && !defined SSD1306_128_32 && !defined SSD1306_96_16 +#if !defined SSD1306_128_64 && !defined SSD1306_128_32 && !defined SSD1306_96_16 && !defined SSD1306_64_48 #error "At least one SSD1306 display must be specified in SSD1306.h" #endif @@ -88,6 +90,8 @@ All text above, and the splash screen must be included in any redistribution #define SSD1306_DEFAULT_RES Adafruit_SSD1306::RES_128_32 #elif defined SSD1306_96_16 #define SSD1306_DEFAULT_RES Adafruit_SSD1306::RES_96_16 +#elif defined SSD1306_64_48 + #define SSD1306_DEFAULT_RES Adafruit_SSD1306::RES_64_48 #endif #define SSD1306_SETCONTRAST 0x81 @@ -138,7 +142,7 @@ All text above, and the splash screen must be included in any redistribution class Adafruit_SSD1306 : public Adafruit_GFX { public: - enum Resolution { RES_96_16, RES_128_32, RES_128_64 }; + enum Resolution { RES_96_16, RES_128_32, RES_128_64, RES_64_48 }; Adafruit_SSD1306(int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, Resolution res = SSD1306_DEFAULT_RES); Adafruit_SSD1306(int8_t DC, int8_t RST, int8_t CS, Resolution res = SSD1306_DEFAULT_RES); @@ -186,4 +190,4 @@ class Adafruit_SSD1306 : public Adafruit_GFX { }; -#endif /* _Adafruit_SSD1306_H_ */ +#endif /* _Adafruit_SSD1306dj_H_ */ diff --git a/src/library.properties b/src/library.properties index 183a9ba..df9a3c4 100644 --- a/src/library.properties +++ b/src/library.properties @@ -1,9 +1,9 @@ -name=Adafruit SSD1306 +name=Adafruit SSD1306dj version=1.1.2 -author=Adafruit -maintainer=Adafruit -sentence=SSD1306 oled driver library for 'monochrome' 128x64 and 128x32 OLEDs! -paragraph=SSD1306 oled driver library for 'monochrome' 128x64 and 128x32 OLEDs! +author=Adafruit / Dirk Jahnke (mods 64x48) +maintainer=Dirk Jahnke +sentence=SSD1306 oled driver library for 'monochrome' 128x64 and 128x32 and 64x48 OLEDs! +paragraph=SSD1306 oled driver library for 'monochrome' 128x64 and 128x32 and 64x48 OLEDs! category=Display url=https://github.com/adafruit/Adafruit_SSD1306 architectures=* diff --git a/src/mgos_arduino_adafruit_ssd1306_c.c b/src/mgos_arduino_adafruit_ssd1306_c.c deleted file mode 100644 index 9fca625..0000000 --- a/src/mgos_arduino_adafruit_ssd1306_c.c +++ /dev/null @@ -1,5 +0,0 @@ -#include - -bool mgos_arduino_adafruit_ssd1306_init(void) { - return true; -} diff --git a/src/mgos_arduino_ssd1306.cpp b/src/mgos_ssd1306dj.cpp similarity index 98% rename from src/mgos_arduino_ssd1306.cpp rename to src/mgos_ssd1306dj.cpp index 932f82e..10aa7b6 100644 --- a/src/mgos_arduino_ssd1306.cpp +++ b/src/mgos_ssd1306dj.cpp @@ -5,7 +5,7 @@ * Arduino Adafruit_SSD1306 library API wrapper */ -#include "mgos_arduino_ssd1306.h" +#include "mgos_ssd1306dj.h" static Adafruit_SSD1306::Resolution mgos_ssd1306_get_res(int res) { Adafruit_SSD1306::Resolution r; @@ -13,6 +13,7 @@ static Adafruit_SSD1306::Resolution mgos_ssd1306_get_res(int res) { case 0: r = Adafruit_SSD1306::RES_96_16; break; case 1: r = Adafruit_SSD1306::RES_128_32; break; case 2: r = Adafruit_SSD1306::RES_128_64; break; + case 3: r = Adafruit_SSD1306::RES_64_48; break; default: r = SSD1306_DEFAULT_RES; } return r; diff --git a/src/mgos_arduino_ssd1306.h b/src/mgos_ssd1306dj.h similarity index 95% rename from src/mgos_arduino_ssd1306.h rename to src/mgos_ssd1306dj.h index 5a8ab5a..9649b96 100644 --- a/src/mgos_arduino_ssd1306.h +++ b/src/mgos_ssd1306dj.h @@ -8,7 +8,7 @@ #ifndef CS_MOS_LIBS_ARDUINO_ADAFRUIT_SSD1306_SRC_MGOS_ARDUINO_SSD1306_H_ #define CS_MOS_LIBS_ARDUINO_ADAFRUIT_SSD1306_SRC_MGOS_ARDUINO_SSD1306_H_ -#include "Adafruit_SSD1306.h" +#include "Adafruit_SSD1306dj.h" #ifdef __cplusplus extern "C" { @@ -17,12 +17,12 @@ extern "C" { // Initialize Adafruit_SSD1306 library for I2C. // Return value: handle opaque pointer. // We set the reset pin and -// Resolution: 0 - RES_96_16, 1 - RES_128_32, 2 - RES_128_64. +// Resolution: 0 - RES_96_16, 1 - RES_128_32, 2 - RES_128_64, 3 - RES_64_48. Adafruit_SSD1306 *mgos_ssd1306_create_i2c(int rst, int res); // Initialize Adafruit_SSD1306 library for SPI. // Return value: handle opaque pointer. // We set DataCommand, ChipSelect, Reset and -// Resolution: 0 - RES_96_16, 1 - RES_128_32, 2 - RES_128_64. +// Resolution: 0 - RES_96_16, 1 - RES_128_32, 2 - RES_128_64, 3 - RES_64_48. Adafruit_SSD1306 *mgos_ssd1306_create_spi(int dc, int rst, int cs, int res); // Close Adafruit_SSD1306 handle. Return value: none. void mgos_ssd1306_close(Adafruit_SSD1306 *ssd); diff --git a/src/mgos_ssd1306dj_c.c b/src/mgos_ssd1306dj_c.c new file mode 100644 index 0000000..276139e --- /dev/null +++ b/src/mgos_ssd1306dj_c.c @@ -0,0 +1,5 @@ +#include + +bool mgos_ssd1306dj_init(void) { + return true; +}