Python library for the Spectral UV Sensor?

As I continue to build an environmental sensing setup with my Raspberry Pi, I stumbled on the Mini Spectral UV Sensor using the AS7331 sensor. Does a python library exist for this sensor? The information page only references an Arduino library.

Thanks!

Rich

Not ready-made, but you have 2 options:

A. Just run the arduino code/sketch on the Pi if it’s a non-RP2040 (micropython-focused) model

B. Convert the library manually and test:

  1. First, let’s clone the repository and take a look at its contents:

git clone https://github.com/sparkfun/SparkFun_AS … ibrary.git

cd SparkFun_AS7331_Arduino_Library

ls -la

  1. The library consists of two main files: SparkFun_AS7331.cpp and SparkFun_AS7331.h. We will need to convert these into Python code.

  2. Open the .cpp file in a text editor and start converting it to Python. The first thing we’ll do is remove all C+±specific syntax, such as #include, namespace, class, and function prototypes:

import smbus

import time

Constants

AS7331_ADDRESS = 0x4B

Register addresses

REG_STATUS = 0x00

REG_CONFIG = 0x01

REG_DATA_CH1_LOW = 0x02

REG_DATA_CH1_HIGH = 0x03

REG_DATA_CH2_LOW = 0x04

REG_DATA_CH2_HIGH = 0x05

REG_DATA_CH3_LOW = 0x06

REG_DATA_CH3_HIGH = 0x07

  1. Next, we’ll convert the constructor and member functions to Python class methods:

class AS7331:

def init(self, bus=1):

self._bus = smbus.SMBus(bus)

self._config = 0x00

self.set_integration_time(50)

self.enable()

def enable(self):

self._config |= 0x80

self._write_register(REG_CONFIG, self._config)

def disable(self):

self._config &= ~0x80

self._write_register(REG_CONFIG, self._config)

… (other functions will go here)

  1. Convert the private helper methods to Python class methods as well:

def _read_register(self, register):

return self._bus.read_byte_data(AS7331_ADDRESS, register)

def _write_register(self, register, data):

self._bus.write_byte_data(AS7331_ADDRESS, register, data)

  1. Convert the remaining functions:

def set_integration_time(self, time_ms):

if time_ms < 2:

time_ms = 2

elif time_ms > 512:

time_ms = 512

self._config &= ~0x78

self._config |= ((time_ms / 2) - 1) << 3

self._write_register(REG_CONFIG, self._config)

def read_channel(self, channel):

if channel < 1 or channel > 3:

return None

low_reg = REG_DATA_CH1_LOW + (2 * (channel - 1))

high_reg = low_reg + 1

while self._read_register(REG_STATUS) & 0x80:

time.sleep(0.001)

low_data = self._read_register(low_reg)

high_data = self._read_register(high_reg)

return (high_data << 8) | low_data

  1. Save the file as SparkFun_AS7331.py. You now have a Python library that can be used with the SparkFun AS7331 sensor!

Please note that this is just a basic conversion and there may be some additional work required to fully test and optimize the library for Python use. However, it should give you a good starting point.

That’s awesom! Thanks so much. I’ll give the conversion a try.

Rich

Worth looking at [GitHub - iorodeo/iorodeo-as7331: Circuitpython library for the AS7331 Spectral UV sensor](iorodeo/iorodeo-as7331: Circuitpython library for the AS7331 Spectral UV sensor). After removing the “Const” declarations this “just worked” for me connecting the Sparkfun AS7331 to a Raspberry Pi 5.

1 Like