OLED Spash Screen


Our IoT device is using an OLED screen through i2C to display information to the user about its current working configuration and displays realtime statistics helping the user determine the state of the device.

We are using 2 containers. One for the main application which runs Node.JS, and one for simple file access. Everything works as expected once the device has booted up, but we have a small problem of “user perception”. It takes 3 minutes for the OLED screen to appear with content, where as normally it would take 6 seconds if we run the app normally.

The first thing our Node.JS code does is load a splash-screen onto the OLED, but this take 3 minutes to appear if we cold boot the device.

What we would like to do is load an image (Splash or text) that informs the user that the device is loading.

  • Can we run a startup script in the HOST-OS that simply puts content on the OLED (Python Etc)?
  • Is there a way to speed up the cold boot.
  • Can we prioritise the containers and load the main container with the Node.JS first.
  • Any other ideas how to display a splash screen on the OLED module quickly.

Our IoT is headless, except for the OLED screen, so we want to show the user a message as quickly as possible, as 3 minutes, is a long time to wait with a blank screen.

Many thanks.

Hi there,

We don’t currently support the loading of scripts in the hostOS. The main reason for this is that it provides a stable, known environment; if custom scripts were run in the OS this could potentially lead to a situation where the OS might no longer be able to download updates or be accessed by support agents to help when things go wrong. This is also the reason for using containerisation for user applications.

That said, 3 minutes sounds like an awfully long time for a cold boot, and we do have other customers who use displays where the device quickly boots to displaying something via their application. Could you let us know which type of device your IoT node is? Most devices boot in a few seconds, and as soon as they do they begin running the service containers for an application. It sounds initially like the service dealing with the OLED is doing something that may be causing a delay. If you’re happy to discuss exactly how this works, we may be able to suggest a quicker way to deal with this.

We do allow the ability to customise the default balena splash screen on device boot, but it sounds in this instance like it wouldn’t help if you need to specifically initialise the OLED from your application (for clarity, if you do want to do this, you can change the splash/resin-logo.png in the boot partition of an image).

Best regards,


Thanks for the info. Here is some more info.

RaspberryPi Zero WiFi
SD: SanDisk Extreme 128GB
OLED: 128x64 1.3" connected via I2C
HDMI: disabled

Container 1:
Contains the application code.
NodeJS Version 11.15.0

Container 2:
Contains simple FTP server
NodeJS Version 11.15.0

Is it possible to analyse the boot sequence and look for where the time is being spent?

Help appreciated.


The Pi Zero W is not a fast booting device, and running Node could be the reason it’s slow. Perhaps, the script you mention, could be run in a seperate container with the bare essentials to make loading/running as quick as possible - and then in your compose file make these 2 service apps depend on that startup service. This should mean that your OLED is displaying a splash as fast as possible.

Try this, and let us know if it helped :+1: