Home Code Raspberry Pi and TSL2591 light-to-digital converter python example

Raspberry Pi and TSL2591 light-to-digital converter python example

by shedboy71

In this article we look at another light-to-digital converter – this time its the TSL2591 and we will connect it to our Raspberry Pi and we will use a python library and create an example to show the sensor in use

Sensor Information

The TSL2591 is a very high sensitivity light-to-digital converter that transforms light intensity into a digital signal output capable of direct I2C interface. The device combines one broadband photodiode (visible plus infrared) and one infrared-responding photodiode on a single CMOS integrated circuit.

Two integrating ADCs convert the photodiode currents into a digital output that represents the irradiance measured on each channel.

This digital output can be input to a microprocessor where illuminance (ambient light level) in lux is derived using an empirical formula to approximate the human eye response. The TSL2591 supports a traditional level style interrupt that remains asserted until the firmware clears it


  • Highest sensitivity to 188µLux
  • Patented dual-diode architecture
  • 600M:1 dynamic range
  • Programmable interrupt function
  • UV-rejection package

This is the breakout I bought

Parts Required

Here are the parts required to build this, there are various links you can choose from – I personally buy from Aliexpress as it is usually cheaper but you will probably have to wait 3+ weeks


Name Links
Raspberry Pi 4 Model B Development Board Aliexpress link

Amazon. com link

Ebay search

TSL2591 Optical Light Sensor Aliexpress link

Amazon.com link

Ebay link

Connecting wire Aliexpress link

Amazon.com link

Ebay link


Again being an I2C sensor this is easy to connect to any Raspberry Pi

pi and tsl2591

pi and tsl2591

Code Example

This code example uses an adafruit library, you can install this from the command line with the following line

sudo pip3 install adafruit-circuitpython-tsl2591

I then opened the Mu editor and entered the following code example

[codesyntax lang=”python”]

# Simple demo of the TSL2591 sensor.  Will print the detected light value
# every second.
import time
import board
import busio
import adafruit_tsl2591
# Initialize the I2C bus.
i2c = busio.I2C(board.SCL, board.SDA)
# Initialize the sensor.
sensor = adafruit_tsl2591.TSL2591(i2c)
# You can optionally change the gain and integration time:
# sensor.gain = adafruit_tsl2591.GAIN_LOW (1x gain)
# sensor.gain = adafruit_tsl2591.GAIN_MED (25x gain, the default)
# sensor.gain = adafruit_tsl2591.GAIN_HIGH (428x gain)
# sensor.gain = adafruit_tsl2591.GAIN_MAX (9876x gain)
# sensor.integration_time = adafruit_tsl2591.INTEGRATIONTIME_100MS (100ms, default)
# sensor.integration_time = adafruit_tsl2591.INTEGRATIONTIME_200MS (200ms)
# sensor.integration_time = adafruit_tsl2591.INTEGRATIONTIME_300MS (300ms)
# sensor.integration_time = adafruit_tsl2591.INTEGRATIONTIME_400MS (400ms)
# sensor.integration_time = adafruit_tsl2591.INTEGRATIONTIME_500MS (500ms)
# sensor.integration_time = adafruit_tsl2591.INTEGRATIONTIME_600MS (600ms)
# Read the total lux, IR, and visible light levels and print it every second.
while True:
	# Read and calculate the light level in lux.
	lux = sensor.lux
	print("Total light: {0}lux".format(lux))
	# You can also read the raw infrared and visible light levels.
	# These are unsigned, the higher the number the more light of that type.
	# There are no units like lux.
	# Infrared levels range from 0-65535 (16-bit)
	infrared = sensor.infrared
	print("Infrared light: {0}".format(infrared))
	# Visible-only levels range from 0-2147483647 (32-bit)
	visible = sensor.visible
	print("Visible light: {0}".format(visible))
	# Full spectrum (visible + IR) also range from 0-2147483647 (32-bit)
	full_spectrum = sensor.full_spectrum
	print("Full spectrum (IR + visible) light: {0}".format(full_spectrum))



Run this example and you should see the following

Total light: 82.64447999999997lux
Infrared light: 2320
Visible light: 152045440
Full spectrum (IR + visible) light: 152047760
Total light: 82.43558399999993lux
Infrared light: 2316
Visible light: 151783292
Full spectrum (IR + visible) light: 151785608





You may also like

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More