This Python program turns your Raspberry Pi into a logic analyzer using the Hantek 4032L USB-based 32-channel logic analyzer and Sigrok software. It allows you to capture signals, filter noise, measure pulse widths, plot signals, and save reports as PDF files on a USB flash drive.
- Capture signals from Hantek 4032L logic analyzer using Sigrok software
- Filter noise from captured signals
- Measure pulse widths of signals
- Plot captured signals
- Save reports as PDF files on a USB flash drive
- Raspberry Pi
- Hantek 4032L USB-based 32-channel logic analyzer
- Sigrok software
- Python 3.x (Developed and tested on 3.9 and 3.11)
- Required Python packages: numpy, pandas, matplotlib, scipy, reportlab, pypdf, RPi.GPIO, gpiozero
- Physical button and LED lamp connected to Raspberry Pi GPIO pins
- USB flash drive
.
├── CONFIGURE.sh
├── FIX_NUMPY_ARM.sh
├── INSTALL.sh
├── INSTALL_AS_SERVICE.sh
├── __init__.py
├── analyzer_controller.py
├── analyzer_reporter.py
├── analyzer_reporter.service
├── analyzer_report.ipynb
├── config.py
├── logger.py
├── report_generator.py
├── requirements.txt
├── signal_grapher.py
├── signal_processor.py
└── storage_controller.py
-
CONFIGURE.sh: Bash script used to configure the application settings interactively.
-
FIX_NUMPY_ARM.sh: Bash script to fix issues with NumPy on ARM platforms, such as Raspberry Pi.
-
INSTALL.sh: Bash script for installing the application and its dependencies.
-
INSTALL_AS_SERVICE.sh: Bash script to install the application as a systemd service for automatic startup.
-
__init__.py: Initialization file for the Python package.
-
analyzer_controller.py: Python module containing the AnalyzerController class for capturing signals from an analyzer.
-
analyzer_report.ipynb: Jupyter Notebook file with examples and documentation for the analyzer-reporter application.
-
analyzer_reporter.py: Main Python script for running the analyzer-reporter application.
-
analyzer_reporter.service: Systemd service unit file for running the application as a background service.
-
config.py: Python module containing the Configuration class with application settings and configurations.
-
logger.py: Python module for logging messages and events during application execution.
-
report_generator.py: Python module for generating reports based on captured signals.
-
requirements.txt: Text file listing the Python packages required by the application.
-
signal_grapher.py: Python module for plotting and visualizing signal data.
-
signal_processor.py: Python module for processing and analyzing captured signals.
-
storage_controller.py: Python module for managing storage devices and data directories.
Follow these steps to install and configure the analyzer-reporter Python application on your system.
Clone the analyzer-reporter repository from GitHub and navigate to the project directory:
git clone https://github.com/edyatl/analyzer-reporter.git
cd analyzer-reporter
Execute the INSTALL.sh
script to set up the virtual environment and install the required Python packages:
bash INSTALL.sh
This script will create a virtual environment, activate it, and install all necessary dependencies specified in the requirements.txt
file. Follow the prompts to configure the application settings.
The installation script will prompt you to provide configuration values for various options. You can either accept the default values or enter custom values as per your requirements.
Copy the example data file data.csv
and the template PDF file template.pdf
to the tpl/
directory created during the configuration step.
cp /path/to/data.csv tpl/
cp /path/to/template.pdf tpl/
If you don't have a template PDF file, the application will use a blank A4 page as the template.
If you are using a Raspberry Pi or ARM platform, execute the FIX_NUMPY_ARM.sh
script to fix any issues with NumPy:
bash FIX_NUMPY_ARM.sh
Activate the virtual environment before running the application:
source ../venv/bin/activate
Test the application to ensure everything is working correctly. If you are not using a Raspberry Pi, run the following command with GPIO mock:
GPIOZERO_PIN_FACTORY=mock python analyzer_reporter.py
If you are using a Raspberry Pi, run the application without GPIO mocking:
python analyzer_reporter.py
Press Ctrl + C
to exit the application.
Note: When testing the application, it's recommended to start with the
DEBUG
mode enabled (DEBUG=True
) andREAL_CAPTURE
set toFalse
. This configuration allows for verbose logging and detailed output, which can be helpful for identifying any issues during testing. Once the application functions correctly with example data and mock GPIO interactions, users can switchREAL_CAPTURE
toTrue
to enable real signal capturing. Finally, setDEBUG=False
to reduce verbose logging and standard output once real capturing is verified.
To install the analyzer-reporter application as a systemd service for automatic startup, run the following script:
sudo bash INSTALL_AS_SERVICE.sh
This script will copy the service unit file to /etc/systemd/system/
and start the service. The application will now run in the background as a service.
Check the status of the installed service to ensure it's running without any errors:
sudo systemctl status analyzer.service
If the service is active and running, the installation process is complete.
You have successfully installed and configured the analyzer-reporter Python application on your system. You can now use it to capture, process, and generate reports for your analyzer data.
- Connect the Hantek 4032L logic analyzer to your Raspberry Pi.
- Install Sigrok software on your Raspberry Pi.
- Connect the physical button and LED lamp to the GPIO pins of your Raspberry Pi.
- Run the Python program on your Raspberry Pi.
- Press the physical button to capture signals.
- LED lamp will blink to indicate capturing or waiting for storage modes of the program.
- LED lamp will on to indicate waiting for button press mode.
- Reports will be saved as PDF files on the USB flash drive with the current date and index of the attempt.
Notes:
- Familiarize with the Jupyter Notebook: Before using the analyzer-reporter application, we strongly encourage users to familiarize themselves with the analyzer_report.ipynb Jupyter Notebook file. This notebook provides detailed descriptions of all application classes, examples of their usage, generated graphs, and the general logic of the application. It serves as a comprehensive guide to understanding the functionality and capabilities of the analyzer-reporter.
- Customize for Different Devices: Although the analyzer-reporter application is designed to interact with the Hantek 4032L logic analyzer by default, it can easily be modified to work with other devices supported by Sigrok. To do this, users can edit the configuration file and specify the desired driver and parameters for the
sigrok-cli
command. This flexibility allows users to adapt the application to their specific hardware requirements and preferences.- Versatile Use Cases: While the application was initially designed to run as a service on Raspberry Pi, it can also be used on a PC without modification. Additionally, individual modules of the application classes can be utilized independently for specific tasks or integrated into other projects. Users can modify the entry point of the application to customize its behavior or integrate it into their existing workflows as needed.
The analyzer-reporter application can be configured to suit your specific requirements using the config.py
file. This configuration file contains various parameters that control the behavior of the application. Below are the configurable options along with their descriptions:
- DEBUG: Set to
True
to enable debugging mode, which provides additional logging information for troubleshooting purposes.
- SHOW_GRID: Set to
True
to display gridlines on plots for better visualization. - PLOT_WIDTH: Control the plotting behavior regarding pulse widths. It can take values
"all"
,"rising"
,"falling"
, orNone
.
- LED_PIN: GPIO pin number for controlling the LED indicator.
- BUTTON_PIN: GPIO pin number for the button input.
- BLINK_TIME: Duration (in seconds) for LED blinking.
- BUTTON_TIMEOUT: Timeout (in seconds) for button press detection.
- FILTER_WSIZE: Window size for signal filtering.
- REAL_CAPTURE: Set to
True
to enable real signal capturing. Set toFalse
to use example data. - EXAMPLE_DATA: Specifies the filename of the example data to be used if real capturing is not available (if
REAL_CAPTURE
is set toFalse
). - EXAMPLE_DATA_DIR: Directory path for storing example data files.
- ATTEMPT_POINT: XY coordinates of the attempt number in the report canvas.
- DATE_POINT: XY coordinates of the date in the report canvas.
- CURRENT_DATE: Current date in YYYY-MM-DD format.
- USB_DEVICE: USB device identifier.
- WRITE_THRESHOLD: Threshold (in bytes) for USB storage write operations.
- DATA_DIR_NAME: Name of the directory for storing reports files.
- REPORT_NAME: Format for naming report files.
- TEMPLATE_FILE: Path to the template PDF file for report generation.
- LOG_FILE: Path to the log file for storing application logs.
- COLORS: List of color codes for plotting.
- CLR_NAMES: List of color names for reference.
- CLR_DICT: Dictionary mapping color names to color codes.
- Added new property
rising_signals
to determine rising signals within each signal. - Refactored the
_filter_noise
method to use theapply
function for improved performance. - Refactored the
_find_pulse_pivots
method to utilize theapply
function for better efficiency. - Updated the
_calculate_pulse_metrics
method to directly compute pulse points and widths, resulting in a more streamlined approach. - Introduced the
_determine_rising_signals
method to determine rising signals based on pulse pivots. - Replaced the
_signal_pulse_count
and_signal_pulse_width
methods with_signal_pulse_points_width
for unified calculation of pulse points and widths. - Implemented the
_is_start_from_pulse
method to check if a signal starts from a pulse for accurate determination of pulse points and widths. - Introduced the
_is_rising_signal
method to determine if a signal is rising based on its pulse pivots.
These changes enhance signal processing capabilities, improve code efficiency, and provide more accurate analysis of signal characteristics, including pulse points, widths, and rising signals.
- Added a new parameter
rising_signals
to the constructor to incorporate information about rising signals. - Introduced the
_get_signals_to_plot
method to determine which signals to plot based on thecfg.PLOT_WIDTH
configuration variable. - Modified the
plot_signals
method to plot signals and pulses based on the selected signals to plot according to their rising or falling nature, as specified by thecfg.PLOT_WIDTH
configuration. - Enhanced flexibility by allowing plotting of all signals, only rising signals, or only falling signals based on the
cfg.PLOT_WIDTH
configuration. - Updated the initialization process to accommodate the
rising_signals
parameter. - Adjusted internal logic to ensure proper plotting of signals according to the selected criteria.
These changes provide improved control over which signals to plot and enhance the visualization of signals and pulses based on their rising or falling characteristics, thereby facilitating more insightful analysis of the data.
- Added new attribute
PLOT_WIDTH
to control the plotting behavior regarding pulse widths. It can take values"all"
,"rising"
,"falling"
, orNone
.
- Updated entry point to accommodate changes in SignalProcessor and SignalGrapher.
- Adjusted functionality to reflect modifications made in both classes.
Sigrok is a powerful open-source signal analysis software suite that supports various hardware devices for capturing, decoding, and analyzing signals. Below are some useful links related to Sigrok:
-
Official Sigrok Website: sigrok.org
- The official website of Sigrok provides comprehensive documentation, downloads, and resources for users interested in using Sigrok for signal analysis.
-
Supported Devices: sigrok.org/wiki/Supported_hardware
- This page lists the hardware devices supported by Sigrok, including oscilloscopes, logic analyzers, multimeters, and more. You can check if your device is compatible with Sigrok here.
-
Download Sigrok: sigrok.org/downloads/
- Visit this page to download the latest version of the Sigrok software suite for your operating system. Sigrok is available for various platforms, including Linux, Windows, and macOS.
These links provide valuable resources for learning more about Sigrok, troubleshooting issues, and connecting with the Sigrok community. Whether you're a beginner or an experienced user, Sigrok offers a wide range of tools and support for your signal analysis needs.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
This project is licensed under the MIT License - see the LICENSE file for details.