{"id":15725366,"url":"https://github.com/andrewdavidmackenzie/pigg","last_synced_at":"2025-05-15T07:05:39.759Z","repository":{"id":239145145,"uuid":"798662592","full_name":"andrewdavidmackenzie/pigg","owner":"andrewdavidmackenzie","description":"GUI for remote control of Raspberry Pi GPIO hardware","archived":false,"fork":false,"pushed_at":"2025-05-07T08:07:21.000Z","size":12694,"stargazers_count":325,"open_issues_count":66,"forks_count":18,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-07T08:42:27.147Z","etag":null,"topics":["embedded","gui","iot","raspberry"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrewdavidmackenzie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-05-10T08:22:43.000Z","updated_at":"2025-05-07T07:51:48.000Z","dependencies_parsed_at":"2024-05-20T16:38:05.191Z","dependency_job_id":"2c8cdf20-b9b9-4f55-a3ca-0edf624fa8a7","html_url":"https://github.com/andrewdavidmackenzie/pigg","commit_stats":{"total_commits":1824,"total_committers":5,"mean_commits":364.8,"dds":0.2768640350877193,"last_synced_commit":"98dada4f25b9027666f197f1598c03a5c88e1598"},"previous_names":["andrewdavidmackenzie/pigg"],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewdavidmackenzie%2Fpigg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewdavidmackenzie%2Fpigg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewdavidmackenzie%2Fpigg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewdavidmackenzie%2Fpigg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrewdavidmackenzie","download_url":"https://codeload.github.com/andrewdavidmackenzie/pigg/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254292040,"owners_count":22046426,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["embedded","gui","iot","raspberry"],"created_at":"2024-10-03T22:20:38.891Z","updated_at":"2025-05-15T07:05:34.751Z","avatar_url":"https://github.com/andrewdavidmackenzie.png","language":"Rust","funding_links":[],"categories":["Internet of Things"],"sub_categories":[],"readme":"![GH Action](https://github.com/andrewdavidmackenzie/pigg/actions/workflows/build_and_test.yml/badge.svg)\n[![codecov](https://codecov.io/gh/andrewdavidmackenzie/pigg/graph/badge.svg?token=Lv5SstEMGO)](https://codecov.io/gh/andrewdavidmackenzie/pigg)\n\n\u003ca href=\"https://repology.org/project/pigg-x86-64-unknown-linux-gnu/versions\"\u003e\n\u003cimg src=\"https://repology.org/badge/vertical-allrepos/pigg-x86-64-unknown-linux-gnu.svg\" alt=\"Packaging status\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.drips.network/app/projects/github/andrewdavidmackenzie/pigg\" target=\"_blank\"\u003e\u003cimg src=\"https://www.drips.network/api/embed/project/https%3A%2F%2Fgithub.com%2Fandrewdavidmackenzie%2Fpigg/support.png?background=blue\u0026style=drips\u0026text=project\u0026stat=dependencies\" alt=\"Support pigg on drips.network\" height=\"32\"\u003e\u003c/a\u003e\n\n# pigg - Raspberry Pi GPIO GUI\n\nAn app for Raspberry Pi GPIO Output control and Input visualization, with GUI and CLI Support for macos, Linux\n(including Raspberry Pi) and Windows; GPIO CLI agent for Raspberry Pi and embedded applications for Pi Pico (USB)\nand Pi Pico W (USB, TCP).\n\nThe GUI (Pi Gpio GUI - PIGGUI) is affectionately known as \"piggy\".\n\n\u003ctable cellspacing=\"0\" cellpadding=\"0\" border=\"0\"\u003e\n  \u003ctr\u003e\n    \u003ctd valign=\"top\"\u003e\n      \u003cimg alt=\"BCM Pin Layout Screenshot\" src=\"assets/images/bcm_pin_layout.png\" width=\"400\" align=\"top\" /\u003e\n    \u003c/td\u003e\n    \u003ctd valign=\"top\"\u003e\n      \u003cimg alt=\"Board Pin Layout Screenshot\" src=\"assets/images/board_pin_layout_1.png\" width=\"400\" align=\"top\" /\u003e\n      \u003cbr\u003e\u003cbr\u003e\n      \u003cimg alt=\"Board Pin Layout Screenshot\" src=\"assets/images/board_pin_layout_2.png\" width=\"400\" align=\"top\" /\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n\u003ctable cellspacing=\"0\" cellpadding=\"0\" border=\"0\"\u003e\n  \u003ctr\u003e\n    \u003ctd valign=\"top\"\u003e\n      \u003cimg alt=\"Input\" src=\"assets/gifs/input.gif\" width=\"400\" align=\"top\" /\u003e\n    \u003c/td\u003e\n    \u003ctd valign=\"top\"\u003e\n      \u003cimg alt=\"Output\" src=\"assets/gifs/output.gif\" width=\"400\" align=\"top\" /\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## What's new in Release 0.6.0 - USB, Pi Pico and Discovery\n\nFull feature support for Pi Pico W and Pi Pico, USB discovery, SSID configuration, GPIO control and mDNS discovery.\n\nPi Pico support includes:\n\n- Embedded application `porky` and `porky_w` for running on the Pi Pico and Pi Pico W.\n- UF2 firmware files provided as part of release to aid programming Pi Pico devices with `porky` or `porky_w`\n- Ability to build `porky` yourself with default SSID information so all devices programmed with that binary connect\n  automatically to Wi-Fi\n- USB direct connection between `piggui` and `porky` that allows you to:\n    - Discover USB connected `porky` devices\n    - View information about the device\n    - Determine if it is connected to the Wi-Fi network and if it is, get its IP and Port for remote GUI use\n    - Program the Wi-Fi network it will connect to, instead of the default one as part of the build.\n      This is persisted in Flash memory, so it is used again on restart/reboot.\n    - Reset a previously programmed Wi-Fi network so that on restart the device will connect to the default one if it\n      exists.\n    - Full functionality (i.e. Control the device and get input signal level changes) via USB, so on a par\n      with TCP connections to the Pi Pico W, but via USB to either a Pi Pico or Pi Pico W\n- Remote network access to the Pi Pico W's GPIO, in the same GUI as remote access to Raspberry Pis (not Pico).\n- Pi Pico specific pin layout and numbering displayed in GUI\n- Persisting of GPIO config to flash and recovery at reboot/restart so that the GPIO continues to work as before\n- `udev` rules file for allowing user access (for `piggui` application) to USB devices on Linux machines\n\nAdditions to `piglet` functionality:\n\n- Persisting of GPIO config to disk and recovery at reboot/restart so that the GPIO continues where you left off\n- mDNS discoverability of `piglets` on the network and get the details required to connect to them by `TCP` or\n  `Iroh`\n\n## Other Features\n\n- Directly on a Pi or Pi Pico or remotely from other platforms you can configure the GPIO hardware Inputs and Outputs,\n  controlling the level of the Outputs and view the level of the Inputs in the GUI.\n- Pre-built images for different OS and CPU architecture, along with installers. See [INSTALLING.md](INSTALLING.md) for\n  details.\n- Visual representation of the GPIO pins in two layouts, a \"Board Pin Layout\" that mimics the\n  physical layout of the Pi's GPIO connector/header, or a \"BCM Pin Layout\" with only the programmable\n  GPIO pins, ordered by BCM pin number. Physical pin layout adapts to reflect the device that `piggui` is connected\n  to as Pi and Pi Pico pin outs are different.\n- Each pin has its board pin number, name and function.\n- Drop down selector to config each pin (Currently as an Input with or without pull-up/pull-down, or\n  as an Output)\n- Inputs have a visualization like an LED to show its current level (Black is unknown, Red is off, Green is on),\n  plus a waveform view that shows you the recent history of the level detected on the input.\n- Outputs have a toggle switch that can be used to change the stable value of the output, plus a \"clicker\" for quick\n  inversions of the stable level, plus a waveform view showing the recent history of the level set on the Output.\n- GPIO configurations can be loaded at startup with a command line filename option, or loaded via\n  file-picker from the UI or saved to file via file picker, or the device will communicate it's current configuration\n  to the GUI, allowing you to continue with the configuration currently being used by the GPIO hardware.\n- GUI discovery of devices using mDNS for networked `piglet`s and `porky`s, or USB for direct connected `porky`s.\n- The GUI (`piggui`) can connect to a Pi (running `piglet`) over the network, or to a Pi Pico/Pi Pico W (over the\n  network or USB direct connect) to control and view the GPIO hardware from a distance.\n- The GUI can run on Mac, Linux, Windows or Raspberry Pis. Events are timestamped at source (as close to the hardware\n  as possible) so network delays should not affect the waveforms displayed. Please provide us feedback and ideas related\n  to networking in Discussions or GH issues.\n- The data required to connect to a remote node via iroh-net is called the `nodeid`. `piglet` prints this out for you\n  if it is started in the foreground. When `piglet` has been started as a system service, start another instance in the\n  foreground and this will detect the background instance and display its `nodeid` for you then exit.\n- Take the `nodeid` and either supply it as a command line option to `piggui` (`--nodeid $nodeid`, prefixed with `-- `\n  if using `cargo run`) or enter it into the GUI. To connect to a remote instance from the GUI, click on the\n  \"hardware menu\" in the left of the info bar at the bottom of the screen and select the \"Connect to remote Pi...\"\n  menu item. Then enter the `nodeid` into the field provided and hit \"Connect\"\n- Here are two videos showing the two ways to use it, with piglet running on a RPi shown via VNC.\n    - Video with Dialog: https://youtu.be/aToJ1aT7NeM\n    - Video using CLI argument: https://youtu.be/zcEa_Oke014\n\nYou can see more gifs and videos of features [here](assets/features.md)\n\n## Piggui (pronounced \"Piggy\")\n\n`piggui` is a GUI for configuring pins, observing input levels and controlling output levels.\nOn Raspberry Pi it has a real GPIO hardware backend (via rppal).\nOn macOS, Linux and Windows it uses a fake hardware backend (mainly for development) or can connect to a remote\nhardware backend that is running `piglet`.\n\n## Piglet\n\n`piglet` is a \"headless\" command line utility that interacts with the GPIO hardware, and can either apply a\nconfig supplied from file and stop, or can listen for config changes from a remote `piggui` and report input\nlevel changes to the GUI.\n\nIf built on the Pi (with the \"pi_hw\" feature), then it has a real GPIO hardware backend.\n\nIt can be built on macOS/Linux/Windows/Pi with the \"fake_hw\" feature for a fake hardware backend, mainly used\nfor development.\n\nIt takes an optional config file as a command line option. It will load the GPIO configuration from the file\n(like `piggui` can) and it will apply it to the hardware then stop.\n\nIt offers the ability to interact with the hardware from a remote `piggui`instance.\nIt will print out connection info at startup and start listing for Iroh network connections from `piggui` instances,\nthen the user can interact with it and visualize inputs level changes from the `piggui` GUI.\n\n## Porky\n\n`porky` is an embedded application developer for the Raspberry Pi Pico and Pi Pico W for remote interaction with the\nPico's GPIO hardware. It can be connected to over TCP or USB.\n\nFor more details see [porky's README.md](porky/README.md)\n\n## Supported Hardware and Operating Systems\n\n`pigg` has a number of binaries as part of the project (see descriptions above) and they are tested in CI, or\nmanually or are known to work as follows:\n\n| Application | Arch Supported | Device      | OS Supported       | Asset                                      |\n|-------------|----------------|-------------|--------------------|--------------------------------------------|\n| piggui      | Apple Silicon  |             | macOS 15           | pigg-aarch64-apple-darwin.tar.xz           |\n|             | x86_64         |             | macOS 15           | pigg-x86_64-apple-darwin.tar.xz            \n|             | x86_64         |             | Ubuntu 24.04       | pigg-x86_64-unknown-linux-gnu.tar.xz       \n|             | x86_64         |             | Windows 10         | pigg-x86_64-pc-windows-msvc.msi            \n|             | aarch64        | Pi400       | Pi OS              | pigg-aarch64-unknown-linux-gnu.tar.xz      \n|             | aarch64        | Pi4         | Pi OS              | pigg-aarch64-unknown-linux-gnu.tar.xz      \n|             | aarch64        | Pi5         | Pi OS              | pigg-aarch64-unknown-linux-gnu.tar.xz      \n|             | arm            | Pi Zero     | Pi OS (32bit)      | pigg-arm-unknown-linux-gnu.tar.xz          \n|             | aarch64        | Pi Zero 2   | Pi OS (64bit)      | pigg-aarch64-unknown-linux-gnu.tar.xz      \n|             | armv7 musl     | Pi3B        | Ubuntu 18.04.6 LTS | pigg-armv7-unknown-linux-musleabihf.tar.xz \n|             | armv7 gnu      | Pi3B        | Ubuntu 18.04.6 LTS | pigg-armv7-unknown-linux-gnueabihf.tar.xz  \n| piglet      | Apple Silicon  |             | macOS 15           | pigg-aarch64-apple-darwin.tar.xz           \n|             | x86_64         |             | macOS 15           | pigg-x86_64-apple-darwin.tar.xz            \n|             | x86_64         |             | Ubuntu 24.04       | pigg-x86_64-unknown-linux-gnu.tar.xz       \n|             | x86_64         |             | Windows 10         | pigg-x86_64-pc-windows-msvc.msi            \n|             | aarch64        | Pi400       | Pi OS              | pigg-aarch64-unknown-linux-gnu.tar.xz      \n|             | aarch64        | Pi4         | Pi OS              | pigg-aarch64-unknown-linux-gnu.tar.xz      \n|             | aarch64        | Pi5         | Pi OS              | pigg-aarch64-unknown-linux-gnu.tar.xz      \n|             | arm            | Pi Zero     | Pi OS (32bit)      | pigg-arm-unknown-linux-gnu.tar.xz          \n|             | aarch64        | Pi Zero 2   | Pi OS (64bit)      | pigg-aarch64-unknown-linux-gnu.tar.xz      \n|             | armv7 musl     | Pi3B        | Ubuntu 18.04.6 LTS | pigg-armv7-unknown-linux-musleabihf.tar.xz \n| porky_w     | armv7          | Pi Pico W   | N/A                | porky_pico_w.uf2                           \n| porky       | armv7          | Pi Pico     | N/A                | porky_pico.uf2                             \n| porky_w2    | armv7          | Pi Pico 2 W | N/A                | porky_pico_w2.uf2                          \n| porky2      | armv7          | Pi Pico 2   | N/A                | porky_pico2.uf2                            \n\n## Input from Raspberry Pi users wanted\n\nWe would like input from Raspberry Pi users to help us decide the order of things to work on in the future,\nand input on how integrate new functionalities (e.g. I2C buses, SPI, UART, etc.).\n\nPlease let us know what you think, and suggestions, via\n[Discussions](https://github.com/andrewdavidmackenzie/pigg/discussions) or GH issues.\n\n## Roadmap\n\nWe have identified a number of areas to work on in future releases, but we would really appreciate your input\non what could be most useful or just the coolest, many have GH issues.\n\nSee issues in\nmilestone [0.7.0](https://github.com/andrewdavidmackenzie/pigg/issues?q=is%3Aopen+is%3Aissue+milestone%3A%220.7.0+Release%22)\nfor the up-to-date list and progress.\n\n- Extend Pi Pico support:\n    - Support for Pi Pico 2 and Pi Pico 2 W\n- Expand support beyond Inputs and Outputs ( e.g. Clocks, PWM, I2C, UART, SPI etc.).\n  Issue [#53](https://github.com/andrewdavidmackenzie/pigg/issues/53), [#52](https://github.com/andrewdavidmackenzie/pigg/issues/52), [#5](https://github.com/andrewdavidmackenzie/pigg/issues/5)\n- True logical layout, grouping pins by function [Issue #94](https://github.com/andrewdavidmackenzie/pigg/issues/94)\n- Custom layouts to order, group pins and only show pins in use\n- Smaller window sizes for devices running `piggui` with small displays\n- Allow connections between pins [Issue #95](https://github.com/andrewdavidmackenzie/pigg/issues/95)\n- Trigger a script or WebAssembly plugin on an input event (edge, level, etc.)\n\n## Installing\n\nSee [INSTALLING.md](INSTALLING.md)\n\n## Help\n\nSee [HELP.md](HELP.md) for help with known issues. We hope to grow this and maybe link with the GUI and reported\nerrors.\n\n## Building from Source\n\nSee [BUILDING.md](BUILDING.md)\n\n## Running Piggui and Piglet\n\nFor details on running `piglet` and `piggui` in the foreground or as a system service, on the same machine or with a\nremote GUI to Pi hardware, see [RUNNING.md](RUNNING.md)\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## License\n\nSee [LICENSE](LICENSE)\n\n## Code of Conduct\n\nSee [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)\n\n## Security\n\nSee [SECURITY.md](SECURITY.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewdavidmackenzie%2Fpigg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrewdavidmackenzie%2Fpigg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewdavidmackenzie%2Fpigg/lists"}