dvg-devices


Namedvg-devices JSON
Version 1.5.0 PyPI version JSON
download
home_pagehttps://python-dvg-devices.readthedocs.io
SummaryCollection of I/O interfaces to communicate with microcontroller boards and laboratory devices, with optional PyQt/PySide multithread support and graphical user-interfaces.
upload_time2024-06-27 10:36:25
maintainerNone
docs_urlNone
authorDennis van Gils
requires_python>=3.6
licenseMIT
keywords pyqt5 pyqt6 pyside2 pyside6 device i/o automation laboratory science control experiment multithread arduino serial visa
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            |pypi| |python| |readthedocs| |black| |license|

.. |pypi| image:: https://img.shields.io/pypi/v/dvg-devices
    :target: https://pypi.org/project/dvg-devices
.. |python| image:: https://img.shields.io/pypi/pyversions/dvg-devices
    :target: https://pypi.org/project/dvg-devices
.. |readthedocs| image:: https://readthedocs.org/projects/python-dvg-devices/badge/?version=latest
    :target: https://python-dvg-devices.readthedocs.io/en/latest/?badge=latest
.. |black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
    :target: https://github.com/psf/black
.. |license| image:: https://img.shields.io/badge/License-MIT-purple.svg
    :target: https://github.com/Dennis-van-Gils/python-dvg-devices/blob/master/LICENSE.txt

DvG_Devices
=============
*Collection of I/O interfaces to communicate with microcontroller boards and
laboratory devices, with optional PyQt/PySide multithread support and graphical
user-interfaces.*

Supports PyQt5, PyQt6, PySide2 and PySide6.

- Documentation: https://python-dvg-devices.readthedocs.io
- Github: https://github.com/Dennis-van-Gils/python-dvg-devices
- PyPI: https://pypi.org/project/dvg-devices

Installation::

    pip install dvg-devices

To be able to run the several provided graphical user-interfaces, one has to
install an additional Qt-library. This can be either PyQt5, PyQt6, PySide2 or
PySide6. Pick one. My personal recommendation is ``PyQt5 for Python <= 3.7``,
and ``PySide6 for Python >= 3.8``::

    pip install pyqt5
    pip install pyqt6
    pip install pyside2
    pip install pyside6

If you wish to interface with an GPIB device you need to additionally install a
Visa backend. See
https://pyvisa.readthedocs.io/en/latest/introduction/getting.html

Supported devices
-----------------

    =======================    ==============================
    Arduino, or similar        Microcontroller board
    Aim TTi QL series II       Power supply
    Bronkhorst EL-FLOW         Mass flow controller
    Julabo circulator          Recirculating bath
    Keysight 3497xA            Digital multimeter
    Keysight N8700             Power supply
    Novanta IMS MDrive         Stepper motor controller
    Parker Compax3             Servo controller
    Picotech PT104             Temperature logger
    PolyScience PD             Recirculating bath
    ThermoFisher ThermoFlex    Chiller
    Xylem Hydrovar HVL         Variable speed pump controller
    =======================    ==============================

Highlights
----------
* Class ``SerialDevice()`` offering higher-level general I/O methods for
  a serial device, such as ``auto_connect()``, ``write()`` and ``query()``.

* Class ``Arduino()`` which wraps around ``SerialDevice()``. In combination with
  `DvG_StreamCommand <https://github.com/Dennis-van-Gils/DvG_StreamCommand>`_ it
  allows for automatically connecting to your Arduino(-like) device and for easy
  serial I/O communication.

* Separate PyQt/PySide interfaces are provided for each of these devices,
  offering out-of-the-box multithreaded data acquisition and communication. It
  relies on `DvG_QDeviceIO <https://python-dvg-qdeviceio.readthedocs.io>`_.

* Ready-to-run PyQt/PySide demos to directly control many of the supported
  devices with a graphical user-interface.

Changelog
=========

1.5.0 (2024-06-27)
------------------
* Support for Numpy 2.0
* Restore support for Python 3.6. Was removed by mistake. Version 1.4.0 and this
  version do support Python 3.6 actually, but only in combination with PyQt5.
  PySide2 will not work because the wrapper library `qtpy` still expects
  `app.exec_()` instead of `app.exec()`. That got fixed in the `qtpy` version
  for Python >= 3.7.

1.4.0 (2024-05-23)
------------------
Major clean-up and streamlining:

* Using `qtpy` library instead of my own Qt5/6 mechanism
* Changed all string formatting to f-strings
* Extended type hinting and checking
* Made demos uniform and passing `qdev` arguments to `MainWindow` now
* Individual source files now follow the PyPi package version
* Resolved nearly all Pylint / Pylance warnings
* Removed Python 3.6 support

New devices added:

* Xylem Hydrovar HVL - Variable speed pump controller
* Novanta IMS MDrive - Stepper motor controller

1.3.0 (2023-02-23)
------------------
* Added method ``BaseDevice.SerialDevice.query_bytes()``
* Fixed type hints in ``BaseDevice.SerialDevice``

1.2.0 (2022-09-14)
------------------
* Added support for PyQt5, PyQt6, PySide2 and PySide6

1.1.0 (2022-02-01)
------------------
* Added method ``BaseDevice.SerialDevice.readline()``

1.0.0 (2021-07-02)
------------------
* Stable release, identical to v0.2.6

0.2.6 (2021-03-02)
------------------
* Minor: Adjusted width of GUI control in ``Julabo_circulator_qdev.py``

0.2.5 (2021-03-02)
------------------
* Loosened dependence to ``pyserial~= 3.4``

0.2.4 (2021-03-02)
------------------
* Added device: Julabo circulator

0.2.3 (2020-08-27)
------------------
* Workaround for bug with unknown cause in ``Aim_TTi_PSU_protocol_RS232`` where
  the power supply occasionally will skew the serial input and output stream,
  such that the reply matches the second-previous query statement. Fixed by
  forcefully flushing the serial input and output buffers whenever a wrong reply
  is received. Hopefully, this will fix the skew when the next ``query()``
  operation gets executed.

0.2.2 (2020-08-27)
------------------
* Fixed bug in ``BaseDevice.query_ascii()``. The use of ``ast.literal_eval`` got
  removed because it chokes on ``nan``. Everything is now interpreted as a
  ``float`` instead.

0.2.1 (2020-08-12)
------------------
* Fix wrong import statement ``dvg-pyqt-controls``
* Fix wrong import statement ``dvg-pyqt-filelogger``

0.2.0 (2020-08-11)
------------------
* Added dependence ``dvg-pyqt-controls~=1.0``
* Added dependence ``dvg-pyqt-filelogger~=1.0``
* Added dependence ``dvg-pyqtgraph-threadsafe~=3.0``

0.1.0 (2020-07-23)
------------------
* Fixed bug in ``BaseDevice.py`` where ``inspect.getouterframes()`` would
  momentarily suspend the thread. Solved by ditching inspect. The new
  ``ID_validation_query`` mechanism now relies on a simple boolean flag that
  gets set to force ``query()`` to raise on timeout.
* Update dependence ``dvg-qdeviceio==0.3.0``

0.0.7 (2020-07-17)
------------------
* Update dependence ``dvg-qdeviceio==0.2.2``

0.0.6 (2020-07-16)
------------------
* Finished implementing ``BaseDevice.SerialDevice()``
* Update dependence ``dvg-qdeviceio==0.2.1``

0.0.5 (2020-07-07)
------------------
* Update dependence ``dvg-qdeviceio==0.2.0``
  Enum ``DAQ_trigger`` is now called ``DAQ_TRIGGER``
* Code style: Black

0.0.4 (2020-07-04)
------------------
* Update dependence ``dvg-qdeviceio==0.1.2``

0.0.3 (2020-07-02)
------------------
* Fixed broken packaging

0.0.2 (2020-07-02)
------------------
* Major restructuring PyPI package
* Implemented ``DvG_QDeviceIO``

0.0.1 (2020-07-01)
------------------
* First release on PyPI

            

Raw data

            {
    "_id": null,
    "home_page": "https://python-dvg-devices.readthedocs.io",
    "name": "dvg-devices",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": null,
    "keywords": "PyQt5, PyQt6, PySide2, PySide6, device I/O, automation, laboratory, science, control, experiment, multithread, Arduino, serial, VISA",
    "author": "Dennis van Gils",
    "author_email": "vangils.dennis@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/88/45/bdd0a2507db7148eb8ab177f2c51acabfa9cf1193670e4766f3f095f0a5b/dvg_devices-1.5.0.tar.gz",
    "platform": null,
    "description": "|pypi| |python| |readthedocs| |black| |license|\r\n\r\n.. |pypi| image:: https://img.shields.io/pypi/v/dvg-devices\r\n    :target: https://pypi.org/project/dvg-devices\r\n.. |python| image:: https://img.shields.io/pypi/pyversions/dvg-devices\r\n    :target: https://pypi.org/project/dvg-devices\r\n.. |readthedocs| image:: https://readthedocs.org/projects/python-dvg-devices/badge/?version=latest\r\n    :target: https://python-dvg-devices.readthedocs.io/en/latest/?badge=latest\r\n.. |black| image:: https://img.shields.io/badge/code%20style-black-000000.svg\r\n    :target: https://github.com/psf/black\r\n.. |license| image:: https://img.shields.io/badge/License-MIT-purple.svg\r\n    :target: https://github.com/Dennis-van-Gils/python-dvg-devices/blob/master/LICENSE.txt\r\n\r\nDvG_Devices\r\n=============\r\n*Collection of I/O interfaces to communicate with microcontroller boards and\r\nlaboratory devices, with optional PyQt/PySide multithread support and graphical\r\nuser-interfaces.*\r\n\r\nSupports PyQt5, PyQt6, PySide2 and PySide6.\r\n\r\n- Documentation: https://python-dvg-devices.readthedocs.io\r\n- Github: https://github.com/Dennis-van-Gils/python-dvg-devices\r\n- PyPI: https://pypi.org/project/dvg-devices\r\n\r\nInstallation::\r\n\r\n    pip install dvg-devices\r\n\r\nTo be able to run the several provided graphical user-interfaces, one has to\r\ninstall an additional Qt-library. This can be either PyQt5, PyQt6, PySide2 or\r\nPySide6. Pick one. My personal recommendation is ``PyQt5 for Python <= 3.7``,\r\nand ``PySide6 for Python >= 3.8``::\r\n\r\n    pip install pyqt5\r\n    pip install pyqt6\r\n    pip install pyside2\r\n    pip install pyside6\r\n\r\nIf you wish to interface with an GPIB device you need to additionally install a\r\nVisa backend. See\r\nhttps://pyvisa.readthedocs.io/en/latest/introduction/getting.html\r\n\r\nSupported devices\r\n-----------------\r\n\r\n    =======================    ==============================\r\n    Arduino, or similar        Microcontroller board\r\n    Aim TTi QL series II       Power supply\r\n    Bronkhorst EL-FLOW         Mass flow controller\r\n    Julabo circulator          Recirculating bath\r\n    Keysight 3497xA            Digital multimeter\r\n    Keysight N8700             Power supply\r\n    Novanta IMS MDrive         Stepper motor controller\r\n    Parker Compax3             Servo controller\r\n    Picotech PT104             Temperature logger\r\n    PolyScience PD             Recirculating bath\r\n    ThermoFisher ThermoFlex    Chiller\r\n    Xylem Hydrovar HVL         Variable speed pump controller\r\n    =======================    ==============================\r\n\r\nHighlights\r\n----------\r\n* Class ``SerialDevice()`` offering higher-level general I/O methods for\r\n  a serial device, such as ``auto_connect()``, ``write()`` and ``query()``.\r\n\r\n* Class ``Arduino()`` which wraps around ``SerialDevice()``. In combination with\r\n  `DvG_StreamCommand <https://github.com/Dennis-van-Gils/DvG_StreamCommand>`_ it\r\n  allows for automatically connecting to your Arduino(-like) device and for easy\r\n  serial I/O communication.\r\n\r\n* Separate PyQt/PySide interfaces are provided for each of these devices,\r\n  offering out-of-the-box multithreaded data acquisition and communication. It\r\n  relies on `DvG_QDeviceIO <https://python-dvg-qdeviceio.readthedocs.io>`_.\r\n\r\n* Ready-to-run PyQt/PySide demos to directly control many of the supported\r\n  devices with a graphical user-interface.\r\n\r\nChangelog\r\n=========\r\n\r\n1.5.0 (2024-06-27)\r\n------------------\r\n* Support for Numpy 2.0\r\n* Restore support for Python 3.6. Was removed by mistake. Version 1.4.0 and this\r\n  version do support Python 3.6 actually, but only in combination with PyQt5.\r\n  PySide2 will not work because the wrapper library `qtpy` still expects\r\n  `app.exec_()` instead of `app.exec()`. That got fixed in the `qtpy` version\r\n  for Python >= 3.7.\r\n\r\n1.4.0 (2024-05-23)\r\n------------------\r\nMajor clean-up and streamlining:\r\n\r\n* Using `qtpy` library instead of my own Qt5/6 mechanism\r\n* Changed all string formatting to f-strings\r\n* Extended type hinting and checking\r\n* Made demos uniform and passing `qdev` arguments to `MainWindow` now\r\n* Individual source files now follow the PyPi package version\r\n* Resolved nearly all Pylint / Pylance warnings\r\n* Removed Python 3.6 support\r\n\r\nNew devices added:\r\n\r\n* Xylem Hydrovar HVL - Variable speed pump controller\r\n* Novanta IMS MDrive - Stepper motor controller\r\n\r\n1.3.0 (2023-02-23)\r\n------------------\r\n* Added method ``BaseDevice.SerialDevice.query_bytes()``\r\n* Fixed type hints in ``BaseDevice.SerialDevice``\r\n\r\n1.2.0 (2022-09-14)\r\n------------------\r\n* Added support for PyQt5, PyQt6, PySide2 and PySide6\r\n\r\n1.1.0 (2022-02-01)\r\n------------------\r\n* Added method ``BaseDevice.SerialDevice.readline()``\r\n\r\n1.0.0 (2021-07-02)\r\n------------------\r\n* Stable release, identical to v0.2.6\r\n\r\n0.2.6 (2021-03-02)\r\n------------------\r\n* Minor: Adjusted width of GUI control in ``Julabo_circulator_qdev.py``\r\n\r\n0.2.5 (2021-03-02)\r\n------------------\r\n* Loosened dependence to ``pyserial~= 3.4``\r\n\r\n0.2.4 (2021-03-02)\r\n------------------\r\n* Added device: Julabo circulator\r\n\r\n0.2.3 (2020-08-27)\r\n------------------\r\n* Workaround for bug with unknown cause in ``Aim_TTi_PSU_protocol_RS232`` where\r\n  the power supply occasionally will skew the serial input and output stream,\r\n  such that the reply matches the second-previous query statement. Fixed by\r\n  forcefully flushing the serial input and output buffers whenever a wrong reply\r\n  is received. Hopefully, this will fix the skew when the next ``query()``\r\n  operation gets executed.\r\n\r\n0.2.2 (2020-08-27)\r\n------------------\r\n* Fixed bug in ``BaseDevice.query_ascii()``. The use of ``ast.literal_eval`` got\r\n  removed because it chokes on ``nan``. Everything is now interpreted as a\r\n  ``float`` instead.\r\n\r\n0.2.1 (2020-08-12)\r\n------------------\r\n* Fix wrong import statement ``dvg-pyqt-controls``\r\n* Fix wrong import statement ``dvg-pyqt-filelogger``\r\n\r\n0.2.0 (2020-08-11)\r\n------------------\r\n* Added dependence ``dvg-pyqt-controls~=1.0``\r\n* Added dependence ``dvg-pyqt-filelogger~=1.0``\r\n* Added dependence ``dvg-pyqtgraph-threadsafe~=3.0``\r\n\r\n0.1.0 (2020-07-23)\r\n------------------\r\n* Fixed bug in ``BaseDevice.py`` where ``inspect.getouterframes()`` would\r\n  momentarily suspend the thread. Solved by ditching inspect. The new\r\n  ``ID_validation_query`` mechanism now relies on a simple boolean flag that\r\n  gets set to force ``query()`` to raise on timeout.\r\n* Update dependence ``dvg-qdeviceio==0.3.0``\r\n\r\n0.0.7 (2020-07-17)\r\n------------------\r\n* Update dependence ``dvg-qdeviceio==0.2.2``\r\n\r\n0.0.6 (2020-07-16)\r\n------------------\r\n* Finished implementing ``BaseDevice.SerialDevice()``\r\n* Update dependence ``dvg-qdeviceio==0.2.1``\r\n\r\n0.0.5 (2020-07-07)\r\n------------------\r\n* Update dependence ``dvg-qdeviceio==0.2.0``\r\n  Enum ``DAQ_trigger`` is now called ``DAQ_TRIGGER``\r\n* Code style: Black\r\n\r\n0.0.4 (2020-07-04)\r\n------------------\r\n* Update dependence ``dvg-qdeviceio==0.1.2``\r\n\r\n0.0.3 (2020-07-02)\r\n------------------\r\n* Fixed broken packaging\r\n\r\n0.0.2 (2020-07-02)\r\n------------------\r\n* Major restructuring PyPI package\r\n* Implemented ``DvG_QDeviceIO``\r\n\r\n0.0.1 (2020-07-01)\r\n------------------\r\n* First release on PyPI\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Collection of I/O interfaces to communicate with microcontroller boards and laboratory devices, with optional PyQt/PySide multithread support and graphical user-interfaces.",
    "version": "1.5.0",
    "project_urls": {
        "Homepage": "https://python-dvg-devices.readthedocs.io",
        "Issue Tracker": "https://github.com/Dennis-van-Gils/python-dvg-devices/issues"
    },
    "split_keywords": [
        "pyqt5",
        " pyqt6",
        " pyside2",
        " pyside6",
        " device i/o",
        " automation",
        " laboratory",
        " science",
        " control",
        " experiment",
        " multithread",
        " arduino",
        " serial",
        " visa"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "aa97aef125bbd09161a9bd90ecf6b3fe9f180d1f4c3ccefd8d8ec021963abf48",
                "md5": "44e7a8e16819d4703cd913219da67b4c",
                "sha256": "2cb0c58c192391461c74df284122cc8376e7ad3fcb1481a2e7ab7e4ce774b412"
            },
            "downloads": -1,
            "filename": "dvg_devices-1.5.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "44e7a8e16819d4703cd913219da67b4c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 163931,
            "upload_time": "2024-06-27T10:36:24",
            "upload_time_iso_8601": "2024-06-27T10:36:24.183553Z",
            "url": "https://files.pythonhosted.org/packages/aa/97/aef125bbd09161a9bd90ecf6b3fe9f180d1f4c3ccefd8d8ec021963abf48/dvg_devices-1.5.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8845bdd0a2507db7148eb8ab177f2c51acabfa9cf1193670e4766f3f095f0a5b",
                "md5": "0d1a2f09ffdc04b163a07fac9a079457",
                "sha256": "9317051d198191a87d5b58ffc99d86237dcb696528aec59d4203b3c7e191045b"
            },
            "downloads": -1,
            "filename": "dvg_devices-1.5.0.tar.gz",
            "has_sig": false,
            "md5_digest": "0d1a2f09ffdc04b163a07fac9a079457",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 145547,
            "upload_time": "2024-06-27T10:36:25",
            "upload_time_iso_8601": "2024-06-27T10:36:25.912064Z",
            "url": "https://files.pythonhosted.org/packages/88/45/bdd0a2507db7148eb8ab177f2c51acabfa9cf1193670e4766f3f095f0a5b/dvg_devices-1.5.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-06-27 10:36:25",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Dennis-van-Gils",
    "github_project": "python-dvg-devices",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "dvg-devices"
}
        
Elapsed time: 0.26662s