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).