Hi there,
Trying to have my pyportal titano show up 6 buttons when it detects motion. I’m sure I can figure out the action assignment (MQTT to Home Assistant) however I’ve obtained the following code from ChatGPT but when installing it as a file (and the bitmap files) to the device with the respective libraries installed, it just comes up with a Ctrl-D option to restart and not working at all. Any assistance would be excellent!
Code I have as follows:
import time
import board
import digitalio
import adafruit_imageload
import displayio
from adafruit_pyportal import PyPortal
# Configuration for the PyPortal display
DISPLAY_WIDTH = 480
DISPLAY_HEIGHT = 320
# Path to image files for action buttons
BUTTON_IMAGE_PATHS = [
"button1.bmp",
"button2.bmp",
"button3.bmp",
"button4.bmp",
"button5.bmp",
"button6.bmp",
]
# Initialize the PyPortal
pyportal = PyPortal(default_bg=None)
# Set up PIR motion sensor
motion_sensor = digitalio.DigitalInOut(board.D13)
motion_sensor.direction = digitalio.Direction.INPUT
# Load the button images
button_images = [None] * len(BUTTON_IMAGE_PATHS)
for idx, button_path in enumerate(BUTTON_IMAGE_PATHS):
button_images[idx] = adafruit_imageload.load(button_path)
# Function to display the action buttons
def display_buttons():
group = displayio.Group()
for idx, image in enumerate(button_images):
sprite = displayio.Sprite(image, x=80 + (idx % 2) * 200, y=60 + (idx // 2) * 100)
group.append(sprite)
pyportal.splash.append(group)
# Function to remove the action buttons from the display
def remove_buttons():
pyportal.splash.pop()
while True:
if motion_sensor.value:
# Motion detected, display the action buttons
display_buttons()
# Wait for a short time to debounce the motion sensor
time.sleep(0.5)
while motion_sensor.value:
# Wait until motion is no longer detected
time.sleep(0.1)
# Motion stopped, remove the action buttons
remove_buttons()
# Small delay to avoid busy-waiting
time.sleep(0.1)