如何在此 Python3 脚本上添加多个传感器?
How to add multiple sensors on this Python3 script?
我正在尝试使用蓝牙(使用蓝牙终端)控制 GPIO 状态,涉及 GPIO.output(on/off 设备)和 GPIO.input(二进制传感器)。 GPIO.input(传感器)部分的脚本如下:
#!/usr/bin/python3
from bluedot.btcomm import BluetoothServer
from signal import pause
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(16,GPIO.OUT)
GPIO.output(16,GPIO.HIGH)
GPIO.setup(6,GPIO.IN)
GPIO.setup(12,GPIO.IN)
def data_received(data):
print(data)
if(data == "device_on"):
GPIO.output(16,GPIO.LOW)
elif(data == "device_off"):
GPIO.output(16,GPIO.HIGH)
else:
GPIO.output(16,GPIO.HIGH)
s = BluetoothServer(data_received)
state = None
while True:
if GPIO.input(6) == 1:
new_state = 'on1'
else:
new_state = 'off1'
if state != new_state:
s.send( new_state + "\n")
state = new_state
state2 = None
while True:
if GPIO.input(12) == 1:
new_state2 = 'on2'
else:
new_state2 = 'off2'
if state2 != new_state2:
s.send( new_state2 + "\n")
state2 = new_state2
由此,GPIO.output 部分起作用,但只有一个传感器起作用(我知道 Python 只有 运行 1 个传感器已知,但我需要 2 个),上面写的第一个(GPIO6)。我应该在脚本中 change/add 什么,以便它可以 运行 两个传感器(GPIO6 和 GPIO12)?或任何其他方式,使蓝牙终端可以访问多个 Python 程序(如果我必须为 GPIO12 制作单独的脚本)。
您的程序流程中似乎存在问题。 Python 是过程性的,而不是异步的,也就是说,第二个 while 循环不会 运行 直到第一个循环结束,它永远不会,因为你有“while True”并且它的主体没有中断。
无论如何,试试这个:
state = None
state2 = None
while True:
# handle gpio 6
if GPIO.input(6) == 1:
new_state = 'on1'
else:
new_state = 'off1'
if state != new_state:
s.send( new_state + "\n")
state = new_state
# handle gpio 12
if GPIO.input(12) == 1:
new_state2 = 'on2'
else:
new_state2 = 'off2'
if state2 != new_state2:
s.send( new_state2 + "\n")
state2 = new_state2
我正在尝试使用蓝牙(使用蓝牙终端)控制 GPIO 状态,涉及 GPIO.output(on/off 设备)和 GPIO.input(二进制传感器)。 GPIO.input(传感器)部分的脚本如下:
#!/usr/bin/python3
from bluedot.btcomm import BluetoothServer
from signal import pause
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(16,GPIO.OUT)
GPIO.output(16,GPIO.HIGH)
GPIO.setup(6,GPIO.IN)
GPIO.setup(12,GPIO.IN)
def data_received(data):
print(data)
if(data == "device_on"):
GPIO.output(16,GPIO.LOW)
elif(data == "device_off"):
GPIO.output(16,GPIO.HIGH)
else:
GPIO.output(16,GPIO.HIGH)
s = BluetoothServer(data_received)
state = None
while True:
if GPIO.input(6) == 1:
new_state = 'on1'
else:
new_state = 'off1'
if state != new_state:
s.send( new_state + "\n")
state = new_state
state2 = None
while True:
if GPIO.input(12) == 1:
new_state2 = 'on2'
else:
new_state2 = 'off2'
if state2 != new_state2:
s.send( new_state2 + "\n")
state2 = new_state2
由此,GPIO.output 部分起作用,但只有一个传感器起作用(我知道 Python 只有 运行 1 个传感器已知,但我需要 2 个),上面写的第一个(GPIO6)。我应该在脚本中 change/add 什么,以便它可以 运行 两个传感器(GPIO6 和 GPIO12)?或任何其他方式,使蓝牙终端可以访问多个 Python 程序(如果我必须为 GPIO12 制作单独的脚本)。
您的程序流程中似乎存在问题。 Python 是过程性的,而不是异步的,也就是说,第二个 while 循环不会 运行 直到第一个循环结束,它永远不会,因为你有“while True”并且它的主体没有中断。 无论如何,试试这个:
state = None
state2 = None
while True:
# handle gpio 6
if GPIO.input(6) == 1:
new_state = 'on1'
else:
new_state = 'off1'
if state != new_state:
s.send( new_state + "\n")
state = new_state
# handle gpio 12
if GPIO.input(12) == 1:
new_state2 = 'on2'
else:
new_state2 = 'off2'
if state2 != new_state2:
s.send( new_state2 + "\n")
state2 = new_state2