如何在此 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