# ft-Explore
> ft-Explore allows to control motors and to check inputs by GUI and user-provided Python code.
<!-- <a href="https://www.henrici.name/projects/ftexplore.html"><img src="https://www.henrici.name/projects/images/ftexplore1_401.gif" title="ft-Explore GUI" alt="ft-Explore GUI"></a> -->
[](https://www.henrici.name/projects/ftexplore.html)
ft-Explore was implemented to interface with hardware of technical models for educational purposes. It is open-source and contains interface modules for widely available hardware (RaspberryPi with Adafruit Motor HAT).
---
## Features
- Graphical user interface for controlling four motors/lights and showing the state of eight digital inputs
- Platform independent, tested on Windows and Linux (Debian and Raspbian)
- No dependencies except hardware drivers when operating locally
- Controlling motors/lights and getting the state of the inputs can be done by user-provided Python scripts
- The user-provided Python scripts can be executed and interrupted in the GUI. Script output and exceptions are shown there
- Manual control via GUI and script-based control is possible simultaneously
- GUI and hardware can be distributed to multiple machines, e.g. hardware on a headless RaspberryPi can be controlled via GUI on a Windows notebook
---
## Installation
ft-Explore can be installed easily. See the sections below depending on your platform.
### Windows
- Download msi installer file (can be found "dist_msi" folder in the repository)
- Install using the msi installer
- Afterwards the application can be started via shortcut "ft-Explore" in start menu
Alternatively, you can download the source code and run it after installing Python (e.g. via https://www.anaconda.com/distribution/). See the Linux section below for required Python packages.
### Linux
- Make sure that you use Python version 3.5 or newer
- Install Python libraries as needed:
> in case the application shall not just be used locally and shall use the network
```shell
$ pip install cffi pynng
```
> in case you are running on a RaspberryPi and want to access the GPIOs as inputs
```shell
$ pip install RPi.GPIO
```
> in case you are running on a RaspberryPi with an Adafruit Motor HAT
```shell
$ pip install adafruit_motorkit
```
> in case you want to be able to watch for keyboard events
```shell
$ pip install keyboard
```
- Install ft-Explore:
```shell
$ pip install ftexplore
```
- Run ft-Explore
> run and show help page
```shell
$ python -m ftexplore --help
```
---
### Clone (for developers only)
- Clone this repo to your local machine using `https://www.towalink.de/gitea/HNET/ftexplore.git`
---
## Usage
- Demo usage
> Show GUI and use no real hardware for demo purposes (the default):
```shell
$ python -m ftexplore
```
> This is equivalent to
```shell
$ python -m ftexplore --loglevel info --hardware demo
```
In this mode, there is just emulated hardware. When you control the motors, depending on the direction of the motors the inputs are set.
- Show GUI and use the locally available default hardware (Adafruit Motor HAT and eight RaspberryPi GPIOs as inputs)
```shell
$ python -m ftexplore --hardware default
```
Use this mode if you're working locally on a RaspberryPi with an Adafruit Motor HAT shield.0
- Distributed operation with local GUI and remote hardware
> Listening side with the hardware (adapt port as needed)
```shell
$ python -m ftexplore --hardware default --listen 2201
```
> Client side with the GUI (adapt IP address and port as needed)
```shell
$ python -m ftexplore --hardware 192.168.1.1:2201
```
- Show help page for details on command line arguments
```shell
$ python -m ftexplore --help
```
## Documentation
### Writing Usercode
See the separate documentation for writing usercode in the doc directory:
[Documentation on writing user code](https://www.towalink.de/gitea/HNET/ftexplore/src/branch/master/doc/usercode.md)
### Source Code Organization
- src/ftexplore/eventprocessor
This folder contains code for event processing and event distribution to the applications submodules. The application works by broadcasting events between the different application modules.
- src/ftexplore/gui
This folder contains the code for the graphical user interface. That interface is based on Tk.
- src/ftexplore/hardware
This folder contains modules to communicate with different types of hardware. A special hardware is "remote" hardware that resides on another machine and is accessed via network. Adapt the demo hardware to quickly implement support for your special hardware.
- src/ftexplore/listener
This folder contains the module that provides access to the local hardware via the network. One or more clients can be connected.
- src/ftexplore/usercode
This folder contains the code controlling the execution of user-provided code.
---
## License
[](http://opensource.org/licenses/gpl-license.php)
- **[GPL3 license](http://opensource.org/licenses/gpl-license.php)**
- Copyright 2019-2025 <a href="https://www.henrici.name/projects/ftexplore.html" target="_blank">Dirk Henrici</a>
Raw data
{
"_id": null,
"home_page": "https://www.henrici.name/projects/ftexplore.html",
"name": "ftexplore",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.5",
"maintainer_email": null,
"keywords": "motorhat raspberrypi fischertechnik education",
"author": "Dirk Henrici",
"author_email": "ftexplore@henrici.name",
"download_url": "https://files.pythonhosted.org/packages/6f/56/2ac7d6c34961ab9f10212427326ce11c40372c963b5b1188cfc28863eeb4/ftexplore-2.5.0.tar.gz",
"platform": null,
"description": "# ft-Explore\r\n\r\n> ft-Explore allows to control motors and to check inputs by GUI and user-provided Python code.\r\n\r\n<!-- <a href=\"https://www.henrici.name/projects/ftexplore.html\"><img src=\"https://www.henrici.name/projects/images/ftexplore1_401.gif\" title=\"ft-Explore GUI\" alt=\"ft-Explore GUI\"></a> -->\r\n\r\n[](https://www.henrici.name/projects/ftexplore.html)\r\n\r\nft-Explore was implemented to interface with hardware of technical models for educational purposes. It is open-source and contains interface modules for widely available hardware (RaspberryPi with Adafruit Motor HAT).\r\n\r\n---\r\n\r\n## Features\r\n\r\n- Graphical user interface for controlling four motors/lights and showing the state of eight digital inputs\r\n- Platform independent, tested on Windows and Linux (Debian and Raspbian)\r\n- No dependencies except hardware drivers when operating locally\r\n- Controlling motors/lights and getting the state of the inputs can be done by user-provided Python scripts\r\n- The user-provided Python scripts can be executed and interrupted in the GUI. Script output and exceptions are shown there\r\n- Manual control via GUI and script-based control is possible simultaneously\r\n- GUI and hardware can be distributed to multiple machines, e.g. hardware on a headless RaspberryPi can be controlled via GUI on a Windows notebook\r\n\r\n---\r\n\r\n## Installation\r\n\r\nft-Explore can be installed easily. See the sections below depending on your platform.\r\n\r\n### Windows\r\n\r\n- Download msi installer file (can be found \"dist_msi\" folder in the repository)\r\n- Install using the msi installer\r\n- Afterwards the application can be started via shortcut \"ft-Explore\" in start menu\r\n\r\nAlternatively, you can download the source code and run it after installing Python (e.g. via https://www.anaconda.com/distribution/). See the Linux section below for required Python packages.\r\n\r\n### Linux\r\n\r\n- Make sure that you use Python version 3.5 or newer\r\n- Install Python libraries as needed:\r\n\r\n> in case the application shall not just be used locally and shall use the network\r\n\r\n```shell\r\n$ pip install cffi pynng\r\n```\r\n\r\n> in case you are running on a RaspberryPi and want to access the GPIOs as inputs\r\n\r\n```shell\r\n$ pip install RPi.GPIO\r\n```\r\n\r\n> in case you are running on a RaspberryPi with an Adafruit Motor HAT\r\n\r\n```shell\r\n$ pip install adafruit_motorkit\r\n```\r\n\r\n> in case you want to be able to watch for keyboard events\r\n\r\n```shell\r\n$ pip install keyboard\r\n```\r\n\r\n- Install ft-Explore:\r\n\r\n```shell\r\n$ pip install ftexplore\r\n```\r\n\r\n- Run ft-Explore\r\n\r\n> run and show help page\r\n\r\n```shell\r\n$ python -m ftexplore --help\r\n```\r\n\r\n---\r\n\r\n### Clone (for developers only)\r\n\r\n- Clone this repo to your local machine using `https://www.towalink.de/gitea/HNET/ftexplore.git`\r\n\r\n---\r\n\r\n## Usage\r\n\r\n- Demo usage\r\n\r\n> Show GUI and use no real hardware for demo purposes (the default):\r\n\r\n```shell\r\n$ python -m ftexplore\r\n```\r\n\r\n> This is equivalent to\r\n\r\n```shell\r\n$ python -m ftexplore --loglevel info --hardware demo\r\n```\r\n\r\nIn this mode, there is just emulated hardware. When you control the motors, depending on the direction of the motors the inputs are set.\r\n\r\n- Show GUI and use the locally available default hardware (Adafruit Motor HAT and eight RaspberryPi GPIOs as inputs)\r\n\r\n```shell\r\n$ python -m ftexplore --hardware default\r\n```\r\n\r\nUse this mode if you're working locally on a RaspberryPi with an Adafruit Motor HAT shield.0\r\n\r\n- Distributed operation with local GUI and remote hardware\r\n\r\n> Listening side with the hardware (adapt port as needed)\r\n\r\n```shell\r\n$ python -m ftexplore --hardware default --listen 2201\r\n```\r\n> Client side with the GUI (adapt IP address and port as needed)\r\n\r\n```shell\r\n$ python -m ftexplore --hardware 192.168.1.1:2201\r\n```\r\n\r\n- Show help page for details on command line arguments\r\n\r\n```shell\r\n$ python -m ftexplore --help\r\n```\r\n\r\n## Documentation\r\n\r\n### Writing Usercode\r\n\r\nSee the separate documentation for writing usercode in the doc directory:\r\n\r\n[Documentation on writing user code](https://www.towalink.de/gitea/HNET/ftexplore/src/branch/master/doc/usercode.md)\r\n\r\n### Source Code Organization\r\n\r\n- src/ftexplore/eventprocessor\r\n\r\nThis folder contains code for event processing and event distribution to the applications submodules. The application works by broadcasting events between the different application modules.\r\n\r\n- src/ftexplore/gui\r\n\r\nThis folder contains the code for the graphical user interface. That interface is based on Tk.\r\n\r\n- src/ftexplore/hardware\r\n\r\nThis folder contains modules to communicate with different types of hardware. A special hardware is \"remote\" hardware that resides on another machine and is accessed via network. Adapt the demo hardware to quickly implement support for your special hardware.\r\n\r\n- src/ftexplore/listener\r\n\r\nThis folder contains the module that provides access to the local hardware via the network. One or more clients can be connected.\r\n\r\n- src/ftexplore/usercode \r\n\r\nThis folder contains the code controlling the execution of user-provided code.\r\n\r\n---\r\n\r\n## License\r\n\r\n[](http://opensource.org/licenses/gpl-license.php)\r\n\r\n- **[GPL3 license](http://opensource.org/licenses/gpl-license.php)**\r\n- Copyright 2019-2025 <a href=\"https://www.henrici.name/projects/ftexplore.html\" target=\"_blank\">Dirk Henrici</a>\r\n",
"bugtrack_url": null,
"license": null,
"summary": "ft-Explore allows to control motors and to check inputs by GUI and user-provided Python code",
"version": "2.5.0",
"project_urls": {
"German Homepage": "https://www.henrici.name/projects/ftexplore.html",
"Homepage": "https://www.henrici.name/projects/ftexplore.html",
"Repository": "https://www.hosting-srv.de/gitea/HNET/ftexplore/",
"Source": "https://www.hosting-srv.de/gitea/HNET/ftexplore/src/branch/master/src"
},
"split_keywords": [
"motorhat",
"raspberrypi",
"fischertechnik",
"education"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "2062b680fb4581960ee730a5f802c74767f85ef25d3ec164fd1b04ab56c80a52",
"md5": "26abfc3ec7c2c5b343e6312f40996aa7",
"sha256": "bbbdafc32f5be426381d60cecc957529f94cd95769c47630f85eb33b60b974c8"
},
"downloads": -1,
"filename": "ftexplore-2.5.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "26abfc3ec7c2c5b343e6312f40996aa7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 50988,
"upload_time": "2025-01-26T20:59:01",
"upload_time_iso_8601": "2025-01-26T20:59:01.852517Z",
"url": "https://files.pythonhosted.org/packages/20/62/b680fb4581960ee730a5f802c74767f85ef25d3ec164fd1b04ab56c80a52/ftexplore-2.5.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6f562ac7d6c34961ab9f10212427326ce11c40372c963b5b1188cfc28863eeb4",
"md5": "89bc0d273fc1a2ea6b8594ef2358f124",
"sha256": "f19de938919dc8562e98b0d29a571a931646bcf3ae6d968769871030ff37fe6c"
},
"downloads": -1,
"filename": "ftexplore-2.5.0.tar.gz",
"has_sig": false,
"md5_digest": "89bc0d273fc1a2ea6b8594ef2358f124",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 43654,
"upload_time": "2025-01-26T20:59:03",
"upload_time_iso_8601": "2025-01-26T20:59:03.215994Z",
"url": "https://files.pythonhosted.org/packages/6f/56/2ac7d6c34961ab9f10212427326ce11c40372c963b5b1188cfc28863eeb4/ftexplore-2.5.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-26 20:59:03",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "ftexplore"
}