Сделать сценарий оболочки только * при нажатии кнопки на Raspberry Pi - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь сделать устройство, которое деаутентифицирует все, что видит, но только пока я нажимаю кнопку. Для этого я использую скрипт Python, который запускает команду mdk3 всякий раз, когда обнаруживает, что GPIO 18 НИЗКИЙ. Я не очень разбираюсь в Python в общем, поэтому я просто ходил по сети, пытаясь найти что-то, что подходит для моего варианта использования, но безрезультатно. Вместо этого я попытался переназначить другой код в соответствии с моим вариантом использования. Мой код выглядит следующим образом:

import RPi.GPIO as GPIO
import time
import subprocess
import os

FSU = "sudo mdk3 wlan0 d"

# Define a callback function that will be called by the GPIO event system:
def onButton(channel):
    if channel == 16:
        subprocess.run(FSU, capture_output=True, shell=True)



# Setup GPIO16 (can be changed) as an input with internal pull-up resistor to hold it HIGH until it is pulled down to GND by the connected button; this prevents involuntary deauthing
GPIO.setmode(GPIO.BCM)
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Register an edge detecting on RISING edge. When this event fires, the callback onButton() will be executed. Because of bouncetime=20, all edges 20 ms after a first rising edge will be ignored
GPIO.add_event_detect(16, GPIO.RISING, callback=onButton, bouncetime=20)

У меня есть базовое c понимание того, как это работает, и (теоретически) это должно запустить указанный скрипт, если нажата кнопка. Однако есть несколько проблем. В основном, после однократного запуска, он не постоянно отслеживает GPIO 16; это только проходит через это один раз и выходит. Кроме того, даже после отпускания кнопки команда mdk3 все еще выполняется. Я немного ограничен в знании Python, поэтому было бы неплохо, если бы вы объяснили, что вы сделали и почему вы это сделали. Спасибо.

...