繁体   English   中英

树莓派在GPIO处接收输入,再发送到另一个树莓派pi,后者在GPIO处提供输出

[英]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的帮助,这是我被卡住的原因。

脚本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()

脚本send.py:

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()

脚本ledup.py:

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时,它不会停止,我只想运行一次此文件,然后必须停止。 带领,退出退出脚本?

check.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()

send.py

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM