こんな感じで結線します^^;
I2Cのクロックはi/o5とかだと動きません、
チップの制約だと思うのですがいまいち手探り、
この組み合わせならSPI/I2C同時使用出来ました
SSD1306の表示に使うライブラリはWeather Stationと同じくコレ
ピンアサインも変更出来ますので(Adafruitと違ってReset端子もいらず、I2Cな2線接続)

漢字ROMサンプルスケッチではグローバル変数 byte rowdata[32]; というのが冒頭に宣言されており、(rawdataの方がいいかもと思いましたが、オリジナルのままになっています)これをそのままポインタで渡します
メインのスケッチにはまず、インクルードを追加、OLEDを初期化
#include
#include "SSD1306.h"
#include "Adafruit_GFX.h"
SSD1306 display(0x3c, 2, 4);
Setup()の冒頭で
display.init();
その後は元々の漢字ROMテストスケッチのままですが、
シリアルコンソールへの出力をする都度(displayChar()を呼んだ直度)、
半角なら dislpay.drawKanji16(x座標, y座標, rowdata);
全角なら dislpay.drawKanji32(x座標, y座標, rowdata);
を呼ぶとrowdata[]の中のフォントデータをライブラリのsetPixelで指定の位置に描画します
書き終えたら、
display.display();
display.displayOn();
ライブラリのヘッダには、
void drawKanji16(int x, int y, byte*);
void drawKanji32(int x, int y, byte*);
を追加、コードの方には、
void SSD1306::drawKanji16(int x, int y, byte *rowdata) {
int z;
z = x - 8;
for (int i = 0; i < 8; i++) {
if (bitRead(rowdata[i], 0)) setPixel(x+i,y + 7);
if (bitRead(rowdata[i], 1)) setPixel(x+i,y + 6);
if (bitRead(rowdata[i], 2)) setPixel(x+i,y + 5);
if (bitRead(rowdata[i], 3)) setPixel(x+i,y + 4);
if (bitRead(rowdata[i], 4)) setPixel(x+i,y + 3);
if (bitRead(rowdata[i], 5)) setPixel(x+i,y + 2);
if (bitRead(rowdata[i], 6)) setPixel(x+i,y + 1);
if (bitRead(rowdata[i], 7)) setPixel(x+i,y + 0);
}
y = y + 8;
for (int i = 8; i < 16; i++) {
if (bitRead(rowdata[i], 0)) setPixel(z+i,y + 7);
if (bitRead(rowdata[i], 1)) setPixel(z+i,y + 6);
if (bitRead(rowdata[i], 2)) setPixel(z+i,y + 5);
if (bitRead(rowdata[i], 3)) setPixel(z+i,y + 4);
if (bitRead(rowdata[i], 4)) setPixel(z+i,y + 3);
if (bitRead(rowdata[i], 5)) setPixel(z+i,y + 2);
if (bitRead(rowdata[i], 6)) setPixel(z+i,y + 1);
if (bitRead(rowdata[i], 7)) setPixel(z+i,y + 0);
}
}
void SSD1306::drawKanji32(int x, int y, byte *rowdata) {
int z;
z = x - 16;
for (int i = 0; i < 16; i++) {
if (bitRead(rowdata[i], 0)) setPixel(x+i,y + 7);
if (bitRead(rowdata[i], 1)) setPixel(x+i,y + 6);
if (bitRead(rowdata[i], 2)) setPixel(x+i,y + 5);
if (bitRead(rowdata[i], 3)) setPixel(x+i,y + 4);
if (bitRead(rowdata[i], 4)) setPixel(x+i,y + 3);
if (bitRead(rowdata[i], 5)) setPixel(x+i,y + 2);
if (bitRead(rowdata[i], 6)) setPixel(x+i,y + 1);
if (bitRead(rowdata[i], 7)) setPixel(x+i,y + 0);
}
y = y + 8;
for (int i = 16; i < 32; i++) {
if (bitRead(rowdata[i], 0)) setPixel(z+i,y + 7);
if (bitRead(rowdata[i], 1)) setPixel(z+i,y + 6);
if (bitRead(rowdata[i], 2)) setPixel(z+i,y + 5);
if (bitRead(rowdata[i], 3)) setPixel(z+i,y + 4);
if (bitRead(rowdata[i], 4)) setPixel(z+i,y + 3);
if (bitRead(rowdata[i], 5)) setPixel(z+i,y + 2);
if (bitRead(rowdata[i], 6)) setPixel(z+i,y + 1);
if (bitRead(rowdata[i], 7)) setPixel(z+i,y + 0);
}
}
やっつけですが動きます^^; (文字間1pixel空けたら縦64pixelで納まらなかったので横並びです)

真面目にするなら以下の改良を...
1. 今はいちいちシリアルコンソールにビットパターンを表示させているが、
一旦コードが動いたらOLEDへの描画のみに変更する
2. 漢字ROMはJIS区分コード指定なので、
これをどうにかしないとネットから呼んだ非ASCIIな文字を表示出来ない
解決方法は2つのうちいずれか
a. UTF8とかからJIS区分コードに変換する
テーブルを使うしか無く、Arduinoではメモリの問題で難しかったがESP8266では容量はいけそう、
あと最近みつけたコレがあるので、UTF8-->Shift JISは出来ます
Shift JIS-->JIS区分コード はココ辺りを参考に計算出来ます
少し作業すればテーブルを直接、UTF8-->JIS区分コードに出来るでしょう
b. 漢字ROMをUTF8やらUNICODEで検索出来るよう再構築する
漢字ROMの再構築は作業中で、既にやった人もいるので今回は手持ちのROMを活用すべくコード変換で
そもそもESP8266のflash内にファイルシステムを作って(上述のテーブルで既にやってるし、IDEにプラグイン導入済み)フォント自体を持つ方法もあるが、それはそれということで^^;
おまけ

文字間隔 0pixelでもまあ大丈夫か
しかしスピードが駄目だ、1文字ずつdispaly.displayしてみたら、
感覚的には1文字0.5秒くらいかかってる^^;
やはりROMは内蔵か、アクセススピードは相当速いはず
追記
外付けSPI漢字ROMの読み込みの感じを見るのに、一回読み込んだフォントを
連続で画面一杯書いてみた

これだと目で追えるが大分早い
ROMの格納フォーマットがbitを縦方向にしてるので、素早く縦横入れ替えがしんどい
ROMを丸ごとESP8266のflashに入れてしまおうか...