Skip to main content

tkgpio

A Python library to simulate electronic devices connected to the GPIO on a Raspberry Pi, using TkInter.

About

Due to the Coronavirus outbreak in 2020, students enrolled in my Microcontroller course could not use the laboratory. So I decided to build a Raspberry Pi circuit simulator, to make remote class activities possible. And it works pretty well!

The main goal here is to enable students to use the same APIs that control physical devices connected to the GPIO, but interacting with a GUI instead. I'm not worried about creating a realistic electronic simulation.

Since we were already using Python to program on Raspberry Pi, I've built the interface with TkInter. Some libraries (like gpiozero) allowed me to easily mock the devices in the GUI. In other cases, I had to reimplement the API inside the library – but since I can temporaraly add folders to Python's PATH, import commands keep working exactly as the original ones.

TkGPIO currently supports the following devices:

  • Some gpiozero components (more coming soon)
    • LED / PWMLED
    • (Active) Buzzer
    • DC Motor
    • Servomotor
    • Push Button
    • Toggle Switch
    • Distance Sensor (HC-SR04)
    • Light Sensor (LDR)
    • Motion Sensor (HC-SR501)
    • Potentiometer (via MCP3xxx chip)
  • LCD display (reimplementing Adafruit_CharLCD API)
    • Only message and clear methods are supported for now (more coming soon)
  • Infrared emmitter (reimplementing py_irsend API)
  • Infrared receiver (reimplementing python-lirc API)

TkGPIO also supports labels with text, border and background color.

Usage

This is a simple example to create and control 2 LEDs and 1 Button.

from tkgpio import TkCircuit

# initialize the circuit inside the GUI

configuration = {
    "width": 300,
    "height": 200,
    "leds": [
        {"x": 50, "y": 40, "name": "LED 1", "pin": 21},
        {"x": 100, "y": 40, "name": "LED 2", "pin": 22}
    ],
    "buttons": [
        {"x": 50, "y": 130, "name": "Press to toggle LED 2", "pin": 11},
    ]
}

circuit = TkCircuit(configuration)
@circuit.run
def main ():
    
    # now just write the code you would use on a real Raspberry Pi
    
    from gpiozero import LED, Button
    from time import sleep
    
    led1 = LED(21)
    led1.blink()
    
    def button_pressed():
        print("button pressed!")
        led2.toggle()
    
    led2 = LED(22)
    button = Button(11)
    button.when_pressed = button_pressed
    
    while True:
        sleep(0.1)

You could also initialize the circuit in a function inside a separate Python file, to hide it from students.

Check more sample code files in docs/examples.

Instalation

Use PyPI to install TkGPIO in your computer.

pip install tkgpio

By default, buzzers will flash on the window but will not play any sound. To enable that, install numpy and sounddevice, or install tkgpio using the command

pip install 'tkgpio[sound]'

Metadata

Release files for tkgpio 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tkgpio 0.1.2
File Size Uploaded
tkgpio-0.1.2.tar.gz 70.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tkgpio 0.1.2
File Interpreter ABI Platform
tkgpio-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 146.3 kB

Release files / tkgpio-0.1.2.tar.gz

Download URL tkgpio-0.1.2.tar.gz
Size 70.2 kB
Tags Source
SHA-256 checksum
How to use checksums
31abfbfa8f66fd78b821e63eec88b4dbef690f642666fca09745f6a8d602ba29
BLAKE2b-256 checksum
How to use checksums
1f4b9cb3918db74efc55dc6362c16b7eeb6e53d7cae032dd63fc3ce6bf0ceb13
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / tkgpio-0.1.2-py3-none-any.whl

Download URL tkgpio-0.1.2-py3-none-any.whl
Size 76.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4adab2351b5db0e354b4b88ac49e8db75cb26006a434886892724cd983b4e9b9
BLAKE2b-256 checksum
How to use checksums
793d470daa8830b94246f2aaaa693527bd678578c9f9b12ac4b35bb61d350cb4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page