[英]raspberry pi receive input at GPIO send to another raspberry pi which gives an output at GPIO
Iam使用2个树莓派,1个树莓派(称为客户端)具有信号输入,该信号输入必须转发到第二个树莓派(称为服务器),后者必须提供输出。
在客户端上,我制作了2个脚本,分别称为check.py和send.py,在check.py中,GPIO23输入很高时,它必须调用脚本send.py。 此脚本send.py连接到服务器,该服务器将激活脚本ledup.py(位于第二个树莓派上的ledup.py),使该脚本的GPIO24输出在一段时间内保持高电平。 同时,check.py处于循环中,并继续检查其输入。
问题是我无法正常工作,我尝试将客户端上的脚本合并为1个脚本,这会导致更多错误,因此我将其拆分为2个脚本。 Check.py无法正常运行,它不会停留在循环中,并且在gpio输入23变高时不执行任何操作。 当我添加打印命令时,要检查其是否独立运行,然后输出。 当我测试独立运行并激活ledup.py时,Send.py,但是当check.py的gpio23高时什么也没发生...我真的需要一些check.py的帮助,这是我被卡住的原因。
import RPi.GPIO as GPIO
import time
import os
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
try:
while True:
input_state = GPIO.input(23)
if input_state == True:
os.sytem("python /home/pi/send.py")
time.sleep(0.5)
else:
GPIO.output(24, False)
time.sleep(0.5)
except:
GPIO.cleanup()
import subprocess
import sys
HOST="pi@10.10.4.180 -p22"
ssh = subprocess.Popen(["ssh",
"%s" % HOST],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
bufsize=0)
ssh.stdin.write("sudo python /home/pi/ledup.py")
ssh.stdin.close()
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(24,GPIO.OUT)
GPIO.output(24,GPIO.HIGH)
time.sleep(0.8)
GPIO.output(24,GPIO.LOW)
GPIO.cleanup()
尝试使用check.py中的子进程来打开文件send.py,例如:
#!/usr/bin/env python
import subprocess
subprocess.call("send.py", shell=True)
为此,check.py和send.py必须位于同一文件夹中
您还可以检查https://stackoverflow.com/a/11230471
=====================编辑=====================
check.py和send.py的组合版本是这样的:
import RPi.GPIO as GPIO
import time
import os
import subprocess
import sys
def send():
HOST="pi@10.10.4.180 -p22"
ssh = subprocess.Popen(["ssh",
"%s" % HOST],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
bufsize=0)
ssh.stdin.write("sudo python /home/pi/ledup.py")
ssh.stdin.close()
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
try:
while True:
input_state = GPIO.input(23)
if input_state == True:
send()
time.sleep(0.5)
else:
GPIO.output(24, False)
time.sleep(0.5)
except:
GPIO.cleanup()
这是有效的,仅我需要send.py结束。 加载send.py时,它不会停止,我只想运行一次此文件,然后必须停止。 带领,退出退出脚本?
import RPi.GPIO as GPIO
import time
import subprocess
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.OUT)
try:
while True:
input_state = GPIO.input(23)
if input_state == False:
GPIO.output(24, True)
subprocess.call("python send.py", shell=True)
time.sleep(0.2)
else:
GPIO.output(24, False)
except:
GPIO.cleanup()
from gpiozero import LED
from gpiozero.pins.pigpio import PiGPIOFactory
from time import sleep
factory3 = PiGPIOFactory(host='10.10.4.180')
led_1 = LED(24, pin_factory=factory3)
while True:
led_1.on()
sleep(0.2)
led_1.off()
sleep(0.2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.