Added plugin and backend for VL53L1X laser ranger/distance sensor

This commit is contained in:
Fabio Manganiello 2019-08-15 00:24:57 +02:00
parent 8462f474f7
commit e60660b0e6
8 changed files with 115 additions and 0 deletions

View file

@ -32,6 +32,7 @@ Backends
platypush/backend/scard.rst
platypush/backend/sensor.accelerometer.rst
platypush/backend/sensor.bme280.rst
platypush/backend/sensor.distance.vl53l1x.rst
platypush/backend/sensor.envirophat.rst
platypush/backend/sensor.ir.zeroborg.rst
platypush/backend/sensor.leap.rst

View file

@ -0,0 +1,6 @@
``platypush.backend.sensor.distance.vl53l1x``
=============================================
.. automodule:: platypush.backend.sensor.distance.vl53l1x
:members:

View file

@ -0,0 +1,6 @@
``platypush.plugins.gpio.sensor.distance.vl53l1x``
==================================================
.. automodule:: platypush.plugins.gpio.sensor.distance.vl53l1x
:members:

View file

@ -27,6 +27,7 @@ Plugins
platypush/plugins/gpio.sensor.accelerometer.rst
platypush/plugins/gpio.sensor.bme280.rst
platypush/plugins/gpio.sensor.distance.rst
platypush/plugins/gpio.sensor.distance.vl53l1x.rst
platypush/plugins/gpio.sensor.envirophat.rst
platypush/plugins/gpio.sensor.ltr559.rst
platypush/plugins/gpio.sensor.mcp3008.rst

View file

@ -0,0 +1,30 @@
from platypush.backend.sensor import SensorBackend
class SensorDistanceVl53l1xBackend(SensorBackend):
"""
Backend to poll an `VL53L1x <https://www.st.com/en/imaging-and-photonics-solutions/vl53l1x.html>`_
laser ranger/distance sensor
Requires:
* ``smbus2`` (``pip install smbus2``)
* ``vl53l1x`` (``pip install vl53l1x``)
"""
def __init__(self, short=True, medium=True, long=True, **kwargs):
"""
:param short: Enable short range measurement (default: True)
:param medium: Enable medium range measurement (default: True)
:param long: Enable long range measurement (default: True)
"""
enabled_sensors = {
'short': short,
'medium': medium,
'long': long,
}
super().__init__(plugin='gpio.sensor.distance.vl53l1x', enabled_sensors=enabled_sensors, **kwargs)
# vim:sw=4:ts=4:et:

View file

@ -0,0 +1,67 @@
from platypush.plugins import action
from platypush.plugins.gpio.sensor import GpioSensorPlugin
class GpioSensorDistanceVl53l1xPlugin(GpioSensorPlugin):
"""
Plugin to interact with an `VL53L1x <https://www.st.com/en/imaging-and-photonics-solutions/vl53l1x.html>`_
laser ranger/distance sensor
Requires:
* ``smbus2`` (``pip install smbus2``)
* ``vl53l1x`` (``pip install vl53l1x``)
"""
def __init__(self, i2c_bus=1, i2c_address=0x29, **kwargs):
"""
:param i2c_bus: I2C bus number (default: 1)
:param i2c_address: I2C address (default: 0x29)
"""
super().__init__(**kwargs)
self.i2c_bus = i2c_bus
self.i2c_address = i2c_address
self._device = None
# noinspection PyUnresolvedReferences
def _get_device(self):
if self._device:
return self._device
import VL53L1X
self._device = VL53L1X(i2c_bus=self.i2c_bus, i2c_address=self.i2c_address)
return self._device
@action
def get_measurement(self, short=True, medium=True, long=True):
"""
:param short: Enable short range measurement (default: True)
:param medium: Enable medium range measurement (default: True)
:param long: Enable long range measurement (default: True)
:returns: dict. Example::
output = {
"short": 83, # Short range measurement in mm
"medium": 103, # Medium range measurement
"long": 43, # Long range measurement
}
"""
device = self._get_device()
device.open()
ret = {}
for i, r in enumerate(['short', 'medium', 'long']):
if eval(r):
device.start_ranging(i+1)
ret[r] = device.get_distance()
device.stop_ranging()
return ret
# vim:sw=4:ts=4:et:

View file

@ -159,3 +159,6 @@ pyScss
# Support for LTR559 light/proximity sensor
# ltr559
# Support for VL53L1X laser ranger/distance sensor
# smbus2
# vl53l1x

View file

@ -175,6 +175,7 @@ setup(
'Support for GPS': ['gps'],
'Support for BME280 environment sensor': ['pimoroni-bme280'],
'Support for LTR559 light/proximity sensor': ['ltr559'],
'Support for VL53L1X laser ranger/distance sensor': ['smbus2','vl53l1x'],
# 'Support for Leap Motion backend': ['git+ssh://git@github.com:BlackLight/leap-sdk-python3.git'],
# 'Support for Flic buttons': ['git+https://@github.com/50ButtonsEach/fliclib-linux-hci.git']
# 'Support for media subtitles': ['git+https://github.com/agonzalezro/python-opensubtitles#egg=python-opensubtitles']