Supplies
Hardware Required:
- Raspberry Pi zero w
- Sensors
- 128×64 OLED display module (SSD1306)
- Connecting Wires
If you already know how to setup the sensor, you only need the Python code below, if not, go to step by step instructions.
Python code
#!/usr/bin/python
# -*- coding:utf-8 -*-
import ctypes
import time
import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
import subprocess
RST = None # on the PiOLED this pin isnt used
# Note the following are only used with SPI:
DC = 23
SPI_PORT = 0
SPI_DEVICE = 0
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)
disp.begin()
# Clear display.
disp.clear()
disp.display()
# Create blank image for drawing.
# Make sure to create image with mode '1' for 1-bit color.
width = disp.width
height = disp.height
image = Image.new('1', (width, height))
# Get drawing object to draw on image.
draw = ImageDraw.Draw(image)
# Draw a black filled box to clear the image.
draw.rectangle((0,0,width,height), outline=0, fill=0)
# Draw some shapes.
# First define some constants to allow easy resizing of shapes.
padding = -2
top = padding
bottom = height-padding
# Move left to right keeping track of the current x position for drawing shapes.
x = 0
# Load default font.
font = ImageFont.load_default()
class SHTC3:
def __init__(self):
self.dll = ctypes.CDLL("./SHTC3.so")
init = self.dll.init
init.restype = ctypes.c_int
init.argtypes = [ctypes.c_void_p]
init(None)
def SHTC3_Read_Temperature(self):
temperature = self.dll.SHTC3_Read_TH
temperature.restype = ctypes.c_float
temperature.argtypes = [ctypes.c_void_p]
return temperature(None)
def SHTC3_Read_Humidity(self):
humidity = self.dll.SHTC3_Read_RH
humidity.restype = ctypes.c_float
humidity.argtypes = [ctypes.c_void_p]
return humidity(None)
if __name__ == "__main__":
shtc3 = SHTC3()
while True:
print('Temperature = %6.2f°C , Humidity = %6.2f%%' % (shtc3.SHTC3_Read_Temperature(), shtc3.SHTC3_Read_Humidity()))
draw.rectangle((0,0,width,height), outline=0, fill=0)
# Shell scripts for system monitoring from here : https://unix.stackexchange.com/questions/119126/command-to-display-memory-usage-disk-usage-and-cpu-load
cmd = "hostname -I | cut -d\ '\' -f1"
IP = subprocess.check_output(cmd, shell = True )
cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'"
CPU = subprocess.check_output(cmd, shell = True )
cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'"
MemUsage = subprocess.check_output(cmd, shell = True )
cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'"
cmd = "vcgencmd measure_temp | cut -f 2 -d '='"
temp = subprocess.check_output(cmd, shell= True )
Disk = subprocess.check_output(cmd, shell = True )
tempe = str('%6.2f°C'% shtc3.SHTC3_Read_Temperature())
hum = str('%6.2f%%' % shtc3.SHTC3_Read_Humidity())
# Write two lines of text. Choose whatever you want to view on the screen!
draw.text((x, top), "IP: " + str(IP, 'utf-8'), font=font, fill=255)
#draw.text((x, top+8), str(CPU, 'utf-8') + " " + str(temp,'utf-8'), font=font, fill=255)
#draw.text((x, top+16), str(MemUsage, 'utf-8'), font=font, fill=255)
#draw.text((x, top+25), str(Disk, 'utf-8'), font=font, fill=255)
#draw.text((x, top+8), "Temp:" + str(temp, 'utf-8'), font=font, fill=255)
draw.text((x, top+16), "Temperature:" + tempe, font=font, fill=255)
draw.text((x, top+25), "Humidity: " + hum, font=font, fill=255)
disp.image(image)
disp.display()
time. Sleep(.1)
Below are the connections of OLED module with Raspberry zero w:
- SDA ==> GPIO 2(pin 3)
- SCL ==> GPIO 3(pin 5)
- VCC ==> 3.3V(pin 1)
- GND ==> GND(pin 14)

Step by step Instructions
Step 1- Install OS
Install Raspberry Pi OS lite or Desktop environment, instruction here
Step 2- Enable SHH in raspberry Pi
To enable SSH access on your headless Raspberry Pi, simply create an empty file called ssh at the root of your SD card.
Then, create a file at the root of the SD card called wpa_supplicant.conf. Replace WIFI_NAME and WIFI_PASSWORD with the actual name and password for your WiFi network.
Code:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=<US>
network={
ssid="YOUR WIFI_NAME"
psk="YOUR WIFI_PASSWORD"
}
Find the IP Address of Raspberry Pi, how? In windows terminal type:
ping raspberrypi.local
Connecting to pi via terminal
In windows terminal type: ssh pi@”your_ip_address_here”. The default Raspberry Pi username is pi and the default password is raspberry.
ssh pi@xxx.xxx.x.xxx
Step 3 setting up the sensor
Open the Raspberry Pi terminal and enter the following command to enter the configuration interface.
sudo raspi-config
In the interface enable iC2: Choose Interfacing Options -> I2C ->yes start i2C kernel driver and, reboot Raspberry Pi with the command:
sudo reboot
If you want to use WiringPi library instead of Python read this first and then install the libraries following these instructions.
Installing Python and libraries.
sudo apt-get update
#python2
sudo apt-get install python-pip
sudo pip install RPi.GPIO
sudo pip install spidev
sudo apt-get install python-smbus
#python3
sudo apt-get install python-pip3
sudo pip3 install RPi.GPIO
sudo pip3 install spidev
sudo apt-get install python3-smbus
Open Python and write the program describe above save it with the name you want, in my case was th.py
To run the program, type on terminal:
sudo python3 th.py
Step 4 working with the display
To find a list of the devices connected to the I2C bus on the Raspberry Pi you can use the following command:
sudo i2cdetect -y 1
Install Adafruit Python Library for OLED Display Module
git clone https://github.com/adafruit/Adafruit_Python_SSD13...
Once completes navigate to the library’s directory:
cd Adafruit_Python_SSD1306
sudo python3 setup.py install
Step 5: Running “xxx.py” on Startup
You can easily make it, so this program runs every time you boot your Raspberry Pi.
The fastest and easiest way is to put it in /etc/rc.local. Run the bellow command on terminal:
sudo nano /etc/rc.local
Scroll down, and just before the exit 0 line, enter the following (replace xxx with the name of your file):
sudo python /home/pi/xxx.py &
- Save and exit.
- Reboot to verify that the screen comes up on boot!