Setup and use the 1.3" OLED Display HAT for Raspberry Pi by Waveshare
The 1.3" OLED Display HAT for Raspberry Pi is a display the same size of a Raspberry Pi Zero. The information provided by the manufacturer Waveshare Electronics is somewhat awkward, so I decided to document my journey here, along with the Python script I adopted to control the display.
The display attaches to a Pi via the GPIO. It is a 128x64 1.3" blue OLED display with a 5-way joystick on one side, and 3 buttons on the other:
- Driver: SH1106
- Interface: 4-wire SPI, 3-wire SPI, I2C
- Operating voltage: 3.3V
The display has some jumpers at the back to be soldered to enable/disable the interfaces it uses. It is a no-brainer to use the default 4-wire SPI which require no soldering at all.
I decided to use Python to control my display. There are other options from the manufacturer but I haven't explore them.
Note: The following steps are deduced from the documents provided by the manufacturer. I performed them in the exact order listed below, but I'm not sure if that is absolutely necessary...
sudo apt-get update
sudo apt-get install python-dev
- Download RPi.GPIO from https://pypi.python.org/pypi/RPi.GPIO to somewhere.
- Extract the content (
tar xvfz RPi.GPIO-x.y.z.tar.gz
) cd RPi.GPIO-x.y.z
sudo python setup.py install
- Download spidev from https://pypi.python.org/pypi/spidev to somewhere.
- Extract the content (
tar xvfz spidev-x.y.tar.gz
) sudo apt-get install python-smbus
sudo apt-get install python-serial
cd spidev-x.y
sudo python setup.py install
sudo apt-get install python-imaging
sudo raspi-config
- Go to '5 Interfacing Options'
- Go to 'P4 SPI'
- Choose 'Yes'
Not sure if this is necessary, but well what the hack...
sudo raspi-config
- Go to '5 Interfacing Options'
- Go to 'P5 I2C'
- Choose 'Yes'
Well I'm not too sure about what is the point to install python-pip then remove it......
sudo apt-get install python-pip libfreetype6-dev libjpeg-dev
sudo -H pip install --upgrade pip
sudo apt-get purge python-pip
sudo -H pip install --upgrade luma.oled
sudo apt-get install ifstat
That's it, the display is ready to use.
- Download the sample apps from https://www.waveshare.com/wiki/File:1.3inch-OLED-HAT-Code.7z to somewhere.
- Extract the content somehow, I'm too lazy to find out how to handle 7z on Linux... 😝
cd
to the subfolder containing the Python samples.sudo python demo.py
The Python code in this repo (monitor.py
) display system information of the Pi:
- Button 1 - Display system information of the Pi, such as Disk space, WiFi status, IP Address, CPU Idle %, Memory usage, Network status and System temperature, in 2 pages; use the Left/Right Joystick to toggle between these pages.
- Button 3 - Display the system action dialog, use the Up/Down/Left/Right Joystick to select the options between Reboot, Shutdown, Re-mount Samba and Reload the USB driver. Press Button 3 to confirm your choice.
- The screen will turn off after idling for around 20 seconds.
- The shell script (
usb_drive.sh
) referenced in the Python code is also included in this repo.
The original version was adopted directly from demo.py
provided by the manufacturer, which is no good for 'production' use. Because your Pi will be too busy looking for button inputs instead of doing anything else useful.
The latest version utilize GPIO input detection instead of busy wait, which is much more reasonable CPU-wise.
sudo vi /etc/rc.local
- Add the following line at the end of the file, assuming
monitor.py
is in /home/pi/: python /home/pi/monitor.py &
- IMPORTANT Don't forget the
&
character at the end!
- Add the following line at the end of the file, assuming