Small Sunday afternoon project: Make the ESP8266 with Espruino work with the OLED display I have. NodeMCU has no issues. Time to try Espruino+JavaScript instead of NodeMCU+Lua.
Ingredients:
- Firmware image from https://github.com/MaBecker/esp8266/tree/master/firmware/espruino_1v91.2150_esp8266 as this one does have the Graphics library installed (see the Espruino forum here) where the default one does not.
 - Flash via
 
~/.local/bin/esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_freq 80m --flash_mode qio --flash_size 32m \ 0x0000 "boot_v1.6.bin" \ 0x1000 espruino_esp8266_user1.bin \ 0x3FC000 esp_init_data_default.bin \ 0x37E000 blank.bin
- and then this little program will use it (if you have configured everything correctly and I2C works as it should):
 
I2C1.setup({sda: NodeMCU.D2, scl: NodeMCU.D1});
function start(){
 // write some text
 g.drawString("Hello World!",2,2);
 // write to the screen
 g.flip(); 
}
var g = require("SSD1306").connect(I2C1, start, {height:64});
Took me some tries to get it working and very helpful was the ability to scan the I2C bus:
function isDeviceOnBus(i2c,id) {
  try {
    return i2c.readFrom(id,1);
  }
  catch(err) {
    return -1;
  }
}
function detect(i2c,first, last) {
  first = first | 0;
  last = last | 0x77;
  var idsOnBus = Array();
  for (var id = first; id <= last; id++) {
    if ( isDeviceOnBus(i2c,id) != -1) {
      idsOnBus.push("0x"+id.toString(16));
    }
  }
  return idsOnBus;
}
I2C1.setup({sda: NodeMCU.D2, scl: NodeMCU.D1});
console.log('I2C detect as array:',detect(I2C1));
Note that I could not make the Wemos OLED work as its size (64×48) seems not supported. The 128×64 display I have worked out of the box. 128×32 is supposed to work too (see here).
