Skip to main content

Python library to operate Alphasense OPC particle counters

Project description

py-opc-ng

A small python library to operate Alphasense OPC devices.

Supports most modern OPC devices: OPC-N2, OPC-N3, OPC-R1 and OPC-R2.

Installation

$ pip install py-opc-ng

Dependencies

The devices work with SPI interface. You can either connect them directly to a SPI bus using py-spidev (e.g. with the GPIO pins of a RaspberryPi) or use a SPI to USB device, like the one Alphasense provides, using the pyusbiss library.

Getting help

You can find full documentation, including API references, at http://py-opc-ng.readthedocs.io/

Usage

With a direct SPI connection:

from time import sleep
import spidev
import opcng as opc

spi = spidev.SpiDev()
spi.open(0, 0)
spi.mode = 1
spi.max_speed_hz = 500000
spi.lsbfirst = False

dev = opc.detect(spi)

print(f'device information: {dev.info()}')
print(f'serial: {dev.serial()}')
print(f'firmware version: {dev.serial()}')

# power on fan and laser
dev.on()

for i in range(10):
    # query particle mass readings
    sleep(1)
    print(dev.pm())

# power off fan and laser
dev.off()

or with a SPI to USB bridge:

from time import sleep
from usbiss.spi import SPI
import opcng as opc

spi = SPI('/dev/ttyACM0')
spi.mode = 1
spi.max_speed_hz = 500000
spi.lsbfirst = False

dev = opc.detect(spi)

print(f'device information: {dev.info()}')
print(f'serial: {dev.serial()}')
print(f'firmware version: {dev.serial()}')

# power on fan and laser
dev.on()

for i in range(10):
    # query particle mass readings
    sleep(1)
    print(dev.pm())

# power off fan and laser
dev.off()

Known issues

OPC N2 and N3 have a so-called autonomous mode where the device operates on its own saving data in the included sd-card. When you power on the devices and don't do anything for some time (about 65s for N3) the automatically enter this standalone mode and start acquiring data. See e.g. Chapter 9 in OPC N3 manual.

When this happens the device still listens for SPI commands but sometimes (most of the time?) fails to respond and behaves erratically.

When you try to access the device while in this mode you may get errors like:

>>> opc.detect()
ERROR:opcng:Error while reading bytes from the device: Received unexpected response 0x00 for command: 0x3F
ERROR:opcng:Something failed while reading byte sequence, expected size: 60, received: 0
ERROR:opcng:Could not detect a valid OPC device

I don't have a solution yet, see discussion in issue #1. The solution is do not let the device enter this mode. As soon as you power up your host or connect the OPC send some SPI command to prevent this autonomous mode. If it enters it before you have the chance to interact with it the best way out is to power cycle the device or reboot the host.

Not much of an issue as these are devices that should be operated continously so you should start them as soon as you boot your host.

Nonetheless, if you know a way to disable this mode please do let me know.

A note about the name

When this project was started the most popular library to operate Alphasense OPC devices was py-opc. At the time it only supported OPC-N2 and had a lot of code very specific to that device generation.

Adding support for next generation (hence the -ng) devices there seemed to require quite some effort. We wanted to abstract common characteristics of the different devices in a single interface right from the start. We also didn't want to support all the quirks they had for N2 different firmware versions as we were already moving away from N2 devices.

So we opted to start a completely new project. It's not a fork and doesn't share any code with py-opc.

License

This module is licensed under the GNU Lesser General Public License Version 3. Full text can be found in the LICENSE file.

Acknowledgement

This package was developed within the Cagliari2020 project with the support of Istituto Nazionale di Fisica Nucleare (INFN)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py-opc-ng-0.0.5.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

py_opc_ng-0.0.5-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file py-opc-ng-0.0.5.tar.gz.

File metadata

  • Download URL: py-opc-ng-0.0.5.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.8

File hashes

Hashes for py-opc-ng-0.0.5.tar.gz
Algorithm Hash digest
SHA256 8f045892f0b46a29f8d6be0e3a8e07e6f73d67c22530fff8a4d1c47338faf115
MD5 84090c428a9e8557bcbc223b4d1127ab
BLAKE2b-256 6669bcca5278c9fb06d0da2c66aa8facee475522c6ee6e8750a5a9b87ba53285

See more details on using hashes here.

File details

Details for the file py_opc_ng-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: py_opc_ng-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.8

File hashes

Hashes for py_opc_ng-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 f0fc40d4a960340e334bba6e6a72a254c01066bcecc6bd8af8a288edbac4763f
MD5 c481844fe632e52a4ea04defc9d811d5
BLAKE2b-256 db3c37645ed2e950a2b1d9163d130d3a085fbed0e3231dd15b3c1c4d6a94e024

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page