{"id":15538734,"url":"https://github.com/raul23/simulrpi","last_synced_at":"2025-06-18T10:36:53.981Z","repository":{"id":57467811,"uuid":"279335506","full_name":"raul23/SimulRPi","owner":"raul23","description":"A Python library that partly fakes RPi.GPIO and simulates some I/O devices on a Raspberry Pi.","archived":false,"fork":false,"pushed_at":"2024-05-06T21:21:54.000Z","size":1354,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-11T03:39:54.116Z","etag":null,"topics":["library","mock","pynput","python","python3","raspberry-pi","rpi-gpio","simulation"],"latest_commit_sha":null,"homepage":"https://simulrpi.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raul23.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-13T15:05:57.000Z","updated_at":"2024-08-21T04:24:58.000Z","dependencies_parsed_at":"2024-05-06T22:30:01.979Z","dependency_job_id":"73946570-74a9-42d2-8913-1f93bb5e677c","html_url":"https://github.com/raul23/SimulRPi","commit_stats":{"total_commits":672,"total_committers":1,"mean_commits":672.0,"dds":0.0,"last_synced_commit":"9390f8514850b63c7988766125e3834ed1821970"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raul23%2FSimulRPi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raul23%2FSimulRPi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raul23%2FSimulRPi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raul23%2FSimulRPi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raul23","download_url":"https://codeload.github.com/raul23/SimulRPi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248361113,"owners_count":21090821,"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":["library","mock","pynput","python","python3","raspberry-pi","rpi-gpio","simulation"],"created_at":"2024-10-02T12:05:47.144Z","updated_at":"2025-04-11T08:25:25.896Z","avatar_url":"https://github.com/raul23.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"======\nREADME\n======\n\n.. raw:: html\n\n   \u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/raul23/SimulRPi/master/docs/_static/images/SimulRPi_logo.png\"\u003e\n   \u003c/p\u003e\n\n.. image:: https://readthedocs.org/projects/simulrpi/badge/?version=latest\n   :target: https://simulrpi.readthedocs.io/en/latest/?badge=latest\n   :alt: Documentation Status\n\n.. image:: https://travis-ci.org/raul23/SimulRPi.svg?branch=master\n   :target: https://travis-ci.org/raul23/SimulRPi\n   :alt: Build Status\n\n**SimulRPi** is a Python library that partly fakes\n`RPi.GPIO`_ and simulates some I/O devices\non a Raspberry Pi (RPi).\n\n.. raw:: html\n\n   \u003cdiv align=\"center\"\u003e\n   \u003cimg src=\"https://raw.githubusercontent.com/raul23/images/master/Darth-Vader-RPi/simulation_terminal_channel_number_430x60.gif\"/\u003e\n   \u003cp\u003e\u003cb\u003eSimulating LEDs on an RPi via a terminal\u003c/b\u003e\u003c/p\u003e\n   \u003c/div\u003e\n\nIntroduction\n============\nIn addition to partly faking `RPi.GPIO`_, **SimulRPi** also simulates these I/O\ndevices connected to an RPi:\n\n- push buttons by listening to pressed keyboard keys and\n- LEDs by blinking dots in the terminal along with their GPIO pin\n  numbers.\n\nWhen a LED is turned on, it is shown as a red dot in the terminal. The\n`pynput`_ package is used to monitor the keyboard for any pressed key. Thus,\nthe **SimulRPi** library can be useful in the case that you want to try your\n`RPi.GPIO`_-based script by running it on your computer when no RPi is\navailable at the moment.\n\n**Example: terminal output**\n\n.. raw:: html\n\n   \u003cdiv align=\"center\"\u003e\n   \u003cimg src=\"https://raw.githubusercontent.com/raul23/images/master/Darth-Vader-RPi/simulation_terminal_channel_number_430x60.gif\"/\u003e\n   \u003cp\u003e\u003cb\u003eSimulating LEDs on an RPi via a terminal\u003c/b\u003e\u003c/p\u003e\n   \u003c/div\u003e\n\nEach dot represents a blinking LED connected to an RPi and the number\nbetween brackets is the associated GPIO channel number. Here the LED on\nchannel 22 toggles between on and off when a key is pressed.\n\nAlso, the color of the LEDs can be customized as you can see here where the LED\non channel 22 is colored differently from the others.\n\n`:warning:`\n\n   This library is not a Raspberry Pi emulator nor a complete mock-up of\n   `RPi.GPIO`_, only the most important functions that I needed for my\n   `Darth-Vader-RPi`_ project were added.\n\n   If there is enough interest in this library, I will eventually mock more\n   functions from `RPi.GPIO`_.\n\nDependencies\n============\n* **Platforms:** Linux, macOS\n* **Python**: 3.5, 3.6, 3.7, 3.8\n* ``pynput`` \u003e=1.6.8: for monitoring the keyboard for any pressed key\n\n.. _installation-instructions-label:\n\nInstallation instructions 😎\n============================\n.. TODO IMPORTANT update released version in step 2\n\n1. It is highly recommended to install ``SimulRPi`` in a virtual\n   environment using for example `venv`_ or `conda`_.\n\n2. Make sure to update *pip*::\n\n   $ pip install --upgrade pip\n\n3. Install the package ``SimulRPi`` with *pip*::\n\n   $ pip install SimulRPi\n\n   It will install the dependency ``pynput`` if it is not already found in your\n   system.\n\n`:warning:`\n\n   Make sure that *pip* is working with the correct Python version. It might be\n   the case that *pip* is using Python 2.x You can find what Python version\n   *pip* uses with the following::\n\n      $ pip -V\n\n   If *pip* is working with the wrong Python version, then try to use *pip3*\n   which works with Python 3.x\n\n`:information_source:`\n\n   To install the **bleeding-edge version** of the ``SimulRPi`` package,\n   install it from its github repository::\n\n      $ pip install git+https://github.com/raul23/SimulRPi#egg=SimulRPi\n\n   However, this latest version is not as stable as the one from\n   `PyPI`_ but you get the latest features being implemented.\n\n**Warning message**\n\nIf you get the warning message from *pip* that the ``run_examples`` script\nis not defined in your *PATH*::\n\n   WARNING: The script run_examples is installed in '/home/pi/.local/bin' which is not on PATH.\n\nAdd the directory mentioned in the warning to your *PATH* by editing your\nconfiguration file (e.g. *.bashrc*). See this `article`_ on how to set *PATH*\non Linux and macOS.\n\n**Test installation**\n\nTest your installation by importing ``SimulRPi`` and printing its version::\n\n   $ python -c \"import SimulRPi; print(SimulRPi.__version__)\"\n\nUsage\n=====\nUse the library in your own code\n--------------------------------\nCase 1: with a ``try`` and ``except`` blocks\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou can try importing ``RPi.GPIO`` first and if it is not found, then fallback\non the ``SimulRPi.GPIO`` module.\n\n..\n   IMPORTANT:\n   GitHub and PyPI don't recognize `:mod:`\n   Also they don't recognize :caption: (used in code-block)\n\n.. code-block:: python\n\n   try:\n       import RPi.GPIO as GPIO\n   except ImportError:\n       import SimulRPi.GPIO as GPIO\n\n   # Rest of your code\n\nThe code from the previous example would be put at the beginning of your file\nwith the other imports.\n\nCase 2: with a simulation flag\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nOr maybe you have a flag to tell whether you want to work with the simulation\nmodule or the real one.\n\n.. code-block:: python\n\n   if simulation:\n       import SimulRPi.GPIO as GPIO\n   else:\n       import RPi.GPIO as GPIO\n\n   # Rest of your code\n\nScript ``run_examples``\n--------------------------\nThe `run_examples`_ script which you have access to once you install\nthe ``SimulRPi`` package allows you to run different code examples on your RPi\nor computer. If it is run on your computer, it will make use of the\n``SimulRPi.GPIO`` module which partly fakes ``RPi.GPIO``.\n\nThe different code examples are those presented in **Examples** and show the\ncapability of ``SimulRPi.GPIO`` for simulating I/O devices on an RPi such as\npush buttons and LEDs.\n\nHere is a list of the functions that implement each code example:\n   - Example 1: `ex1_turn_on_led()`_\n   - Example 2: `ex2_turn_on_many_leds()`_\n   - Example 3: `ex3_detect_button()`_\n   - Example 4: `ex4_blink_led()`_\n   - Example 5: `ex5_blink_led_if_button()`_\n\nList of options\n~~~~~~~~~~~~~~~\n\nTo display the script's list of options and their descriptions::\n\n   $ run_examples -h\n\n* ``-e``: The number of the code example you want to run. It is required. (default: None)\n* ``-m``: Set the numbering system (BCM or BOARD) used to identify the I/O pins on an RPi. (default: BCM)\n* ``-s``: Enable simulation mode, i.e. ``SimulRPi.GPIO`` will be used for simulating ``RPi.GPIO``. (default: False)\n* ``-l``: The channel numbers to be used for LEDs. If an example only requires 1 channel, \n  the first channel from the provided list will be used. (default: [9, 10, 11])\n* ``-b``: The channel number to be used for a push button. The default value \n  is channel 17 which is associated by default with the keyboard key *cmd_r*. (default: 17)\n* ``-k``: The name of the key associated with the button channel. The name must be one of those recognized by the *pynput* package. See the \n  *SimulRPi* documentation for a list of valid key names: https://bit.ly/2Pw1OBe. Example: *alt*, *ctrl_r* (default: *cmd_r*)\n* ``-t``: Total time in seconds the LEDs will be blinking. (default: 4)\n* ``--on``: Time in seconds the LEDs will stay turned ON at a time. (default: 1)\n* ``--off``: Time in seconds the LEDs will stay turned OFF at a time. (default: 1)\n* ``-a``: Use ASCII-based LED symbols. Useful if you are having problems displaying the default LED signs that make use of special characters. However, it is recommended to fix your display problems which might be caused by locale settings not set correctly. Check the article 'Display problems' @ https://bit.ly/35B8bfs for more info about solutions to display problems (default: False)\n\nHow to run the script\n~~~~~~~~~~~~~~~~~~~~~\nOnce you install the ``SimulRPi`` package, you should have access to the\n``run_examples`` script which can be called from the terminal by providing some\narguments.\n\nFor example::\n\n   $ run_examples -e 1 -s\n\nLet's run the code example 5 which blinks a LED if a specified key is\npressed::\n\n   $ run_examples -s -e 5 -l 22 -t 5 -k ctrl_r\n\nExplanation of the previous command-line:\n\n- ``-s``: we run the code example as a **simulation**, i.e. on our computer\n  instead of an RPi\n- ``-e 5``: we run code example **5** which blinks a LED if a key is pressed\n- ``-l 22``: we blink a LED on channel **22**\n- ``-t 5``: we blink a LED for a total of **5** seconds\n- ``-k ctrl_r``: a LED is blinked if the key ``ctrl_r`` is pressed\n\n**Output:**\n\n.. image:: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/run_examples_05_terminal_output.gif\n   :target: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/run_examples_05_terminal_output.gif\n   :align: left\n   :alt: Example 05: terminal output\n\n|\n\n`:star:`\n\n   Don't forget the *-s* flag when running the ``run_examples`` script as simulation,\n   if you want to run a code example on your computer, and not on your RPi.\n\n.. _examples-label:\n\nExamples\n========\nThe examples presented thereafter will show you how to use ``SimulRPi`` to\nsimulate LEDs and push buttons.\n\nThe code for the examples shown here can be also found as a script in\n`run_examples`_.\n\n`:information_source:`\n\n   Since we are showing how to use the ``SimulRPi`` package, the presented code\n   examples are to be executed on your computer. However, the\n   ``run_examples`` script which runs the following code examples can be executed on a\n   Raspberry Pi or your computer.\n\nExample 1: display 1 LED\n------------------------\n**Example 1** consists in displaying one LED on the GPIO channel 10. Here is\nthe code along with the output from the terminal:\n\n.. code-block:: python\n\n   import SimulRPi.GPIO as GPIO\n\n   led_channel = 10\n   GPIO.setmode(GPIO.BCM)\n   GPIO.setup(led_channel, GPIO.OUT)\n   GPIO.output(led_channel, GPIO.HIGH)\n   GPIO.cleanup()\n\n**Output:**\n\n.. image:: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/example_01_terminal_output.png\n   :target: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/example_01_terminal_output.png\n   :align: left\n   :alt: Example 01: terminal output\n\n|\n\nThe command line for reproducing the same results for example 1 with the\n``run_examples`` script is the following::\n\n   $ run_examples -s -e 1 -l 10\n\n`:warning:`\n\n   Always call `GPIO.cleanup()`_ at the end of your program to free up any\n   resources such as stopping threads.\n\nExample 2: display 3 LEDs\n-------------------------\n**Example 2** consists in displaying three LEDs on channels 9, 10, and 11,\nrespectively. Here is the code along with the output from the terminal:\n\n.. code-block:: python\n\n   import SimulRPi.GPIO as GPIO\n\n   led_channels = [9, 10, 11]\n   GPIO.setmode(GPIO.BCM)\n   GPIO.setup(led_channels, GPIO.OUT)\n   GPIO.output(led_channels, GPIO.HIGH)\n   GPIO.cleanup()\n\n**Output:**\n\n.. image:: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/example_02_terminal_output.png\n   :target: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/example_02_terminal_output.png\n   :align: left\n   :alt: Example 02: terminal output\n\n|\n\nThe command line for reproducing the same results for example 2 with the\n``run_examples`` script is the following::\n\n   $ run_examples -s -e 2\n\n`:information_source:`\n\n   In example 2, we could have also used a ``for`` loop to setup the output\n   channels and set their states (but more cumbersome):\n\n   .. code-block:: python\n\n      import SimulRPi.GPIO as GPIO\n\n      led_channels = [9, 10, 11]\n      GPIO.setmode(GPIO.BCM)\n      for ch in led_channels:\n          GPIO.setup(ch, GPIO.OUT)\n          GPIO.output(ch, GPIO.HIGH)\n      GPIO.cleanup()\n\n   The `GPIO.setup()`_ function accepts channel numbers as ``int``, ``list``,\n   and ``tuple``. Same with the `GPIO.output()`_ function which also accepts\n   channel numbers and output states as ``int``, ``list``, and ``tuple``.\n\nExample 3: detect a pressed key\n-------------------------------\n**Example 3** consists in detecting if the key ``cmd_r`` is pressed and then\nprinting a message. Here is the code along with the output from the terminal:\n\n.. code-block:: python\n\n   import SimulRPi.GPIO as GPIO\n\n   channel = 17\n   GPIO.setmode(GPIO.BCM)\n   GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)\n   print(\"Press key 'cmd_r' to exit\\n\")\n   while True:\n       if not GPIO.input(channel):\n           print(\"Key pressed!\")\n           break\n   GPIO.cleanup()\n\n\n**Output:**\n\n.. image:: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/example_03_terminal_output.png\n   :target: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/example_03_terminal_output.png\n   :align: left\n   :alt: Example 03: terminal output\n\n|\n\nThe command line for reproducing the same results for example 3 with the\n``run_examples`` script is the following::\n\n   $ run_examples -s -e 3 -k cmd_r\n\n`:information_source:`\n\n   By default, ``SimulRPi`` maps the key ``cmd_r`` to channel 17 as can be\n   seen from the `default key-to-channel map \u003chttps://github.com/raul23/archive/blob/master/SimulRPi/v0.1.0a0/default_keymap.py#L19\u003e`__.\n\n   See also the documentation for `SimulRPi.mapping`_ where the default keymap\n   is defined.\n\nExample 4: blink a LED\n----------------------\n**Example 4** consists in blinking a LED on channel 22 for 4 seconds (or until\nyou press ``ctrl`` + ``c``). Here is the code along with the output from\nthe terminal:\n\n.. code-block:: python\n\n   import time\n   import SimulRPi.GPIO as GPIO\n\n   channel = 22\n   GPIO.setmode(GPIO.BCM)\n   GPIO.setup(channel, GPIO.OUT)\n   start = time.time()\n   print(\"Ex 4: blink a LED for 4.0 seconds\\n\")\n   while (time.time() - start) \u003c 4:\n       try:\n           GPIO.output(channel, GPIO.HIGH)\n           time.sleep(0.5)\n           GPIO.output(channel, GPIO.LOW)\n           time.sleep(0.5)\n       except KeyboardInterrupt:\n           break\n   GPIO.cleanup()\n\n**Output:**\n\n.. image:: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/example_04_terminal_output.gif\n   :target: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/example_04_terminal_output.gif\n   :align: left\n   :alt: Example 04: terminal output\n\n|\n\nThe command line for reproducing the same results for example 4 with the\n``run_examples`` script is the following::\n\n   $ run_examples -s -e 4 -t 4 -l 22\n\nExample 5: blink a LED if a key is pressed\n------------------------------------------\n**Example 5** consists in blinking a LED on channel 10 for 3 seconds if the key\n``shift_r`` is pressed. And then exiting from the program. The program can\nalso be terminated at anytime by pressing ``ctrl`` + ``c``. Here is the code\nalong with the output from the terminal:\n\n.. code-block:: python\n\n   import time\n   import SimulRPi.GPIO as GPIO\n\n   led_channel = 10\n   key_channel = 27\n   GPIO.setmode(GPIO.BCM)\n   GPIO.setup(led_channel, GPIO.OUT)\n   GPIO.setup(key_channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)\n   print(\"Press the key 'shift_r' to turn on light ...\\n\")\n   while True:\n       try:\n           if not GPIO.input(key_channel):\n               print(\"The key 'shift_r' was pressed!\")\n               start = time.time()\n               while (time.time() - start) \u003c 3:\n                   GPIO.output(led_channel, GPIO.HIGH)\n                   time.sleep(0.5)\n                   GPIO.output(led_channel, GPIO.LOW)\n                   time.sleep(0.5)\n               break\n       except KeyboardInterrupt:\n           break\n   GPIO.cleanup()\n\n**Output:**\n\n.. image:: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/example_05_terminal_output.gif\n   :target: https://raw.githubusercontent.com/raul23/images/master/SimulRPi/v0.1.0a0/example_05_terminal_output.gif\n   :align: left\n   :alt: Example 05: terminal output\n\n|\n\nThe command line for reproducing the same results for example 5 with the\n``run_examples`` script is the following::\n\n   $ run_examples -s -e 5 -t 3 -l 10 -b 27\n\n`:information_source:`\n\n   By default, ``SimulRPi`` maps the key ``shift_r`` to channel 27 as can be\n   seen from the `default key-to-channel map \u003chttps://github.com/raul23/archive/blob/master/SimulRPi/v0.1.0a0/default_keymap.py#L29\u003e`__.\n\n   See also the documentation for `SimulRPi.mapping`_ where the default keymap\n   is defined.\n\nHow to uninstall 😞\n===================\nTo uninstall **only** the package ``SimulRPi``::\n\n   $ pip uninstall simulrpi\n\nTo uninstall the package ``SimulRPi`` and its dependency::\n\n   $ pip uninstall simulrpi pynput\n\nResources\n=========\n* `SimulRPi documentation`_\n* `SimulRPi Changelog`_\n* `SimulRPi PyPI`_\n* `Darth-Vader-RPi`_: personal project using ``RPi.GPIO`` for activating a Darth\n  Vader action figure with light and sounds and ``SimulRPi.GPIO`` as fallback if\n  testing on a computer when no RPi is available.\n\nReferences\n==========\n* `pynput`_: a package to control and monitor input devices.\n* `RPi.GPIO`_: a module to control RPi GPIO channels.\n\n.. URLs\n.. 1. External links (simulrpi.readthedocs.io)\n.. _ex1_turn_on_led(): https://simulrpi.readthedocs.io/en/0.1.0a0/api_reference.html#SimulRPi.run_examples.ex1_turn_on_led\n.. _ex2_turn_on_many_leds(): https://simulrpi.readthedocs.io/en/0.1.0a0/api_reference.html#SimulRPi.run_examples.ex2_turn_on_many_leds\n.. _ex3_detect_button(): https://simulrpi.readthedocs.io/en/0.1.0a0/api_reference.html#SimulRPi.run_examples.ex3_detect_button\n.. _ex4_blink_led(): https://simulrpi.readthedocs.io/en/0.1.0a0/api_reference.html#SimulRPi.run_examples.ex4_blink_led\n.. _ex5_blink_led_if_button(): https://simulrpi.readthedocs.io/en/0.1.0a0/api_reference.html#SimulRPi.run_examples.ex5_blink_led_if_button\n.. _run_examples: https://simulrpi.readthedocs.io/en/0.1.0a0/api_reference.html#module-SimulRPi.run_examples\n.. _GPIO.cleanup(): https://simulrpi.readthedocs.io/en/0.1.0a0/api_reference.html#SimulRPi.GPIO.cleanup\n.. _GPIO.output(): https://simulrpi.readthedocs.io/en/0.1.0a0/api_reference.html#SimulRPi.GPIO.output\n.. _GPIO.setup(): https://simulrpi.readthedocs.io/en/0.1.0a0/api_reference.html#SimulRPi.GPIO.setup\n.. _SimulRPi changelog: https://simulrpi.readthedocs.io/en/latest/changelog.html\n.. _SimulRPi.mapping: https://simulrpi.readthedocs.io/en/0.1.0a0/api_reference.html#module-SimulRPi.mapping\n\n.. 2. External links (others)\n.. _venv: https://docs.python.org/3/library/venv.html#module-venv\n.. _article: https://docs.oracle.com/cd/E19062-01/sun.mgmt.ctr36/819-5418/gaznb/index.html\n.. _conda: https://docs.conda.io/en/latest/\n.. _pynput: https://pynput.readthedocs.io/\n.. _Darth-Vader-RPi: https://github.com/raul23/Darth-Vader-RPi\n.. _PyPI: https://pypi.org/project/SimulRPi/\n.. _RPi.GPIO: https://pypi.org/project/RPi.GPIO/\n.. _SimulRPi documentation: https://simulrpi.readthedocs.io/\n.. _SimulRPi GitHub: https://github.com/raul23/SimulRPi\n.. _SimulRPi PyPI: https://pypi.org/project/SimulRPi/\n.. _SimulRPi.GPIO: https://pypi.org/project/SimulRPi/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraul23%2Fsimulrpi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraul23%2Fsimulrpi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraul23%2Fsimulrpi/lists"}