大家好,我是新来的,也是 Python 的新手。我试图让我的 Raspberry Pi 控制按摩浴缸的温度,同时能够手动和远程(使用 UDP)覆盖它的“决定”。基本上,我有 3 个 AD 转换器通过 GPIO 向我的 RPi 发送太阳能加热器温度、太阳光量和水疗温度的数据,这将自动控制水疗泵。我有 2 段代码彼此独立工作正常:
我可以使用以下代码每 30 秒读取一次 ADC:(read_bottom_sensor 和 read_top_sensor 在代码前面定义为 SPI bit-banging 的一部分)
while True:
bottom_sensor = read_bottom_sensor(bottom_sensor_adc, SPICLK, SPIMOSI, SPIMISO, SPICS)
current_spa_temp = bottom_sensor
if DEBUG:
print "Spa Temp = ", current_spa_temp
top_sensor = read_top_sensor(top_sensor_adc, SPICLK, SPIMOSI, SPIMISO, SPICS)
current_solar_heater_temp = top_sensor
if DEBUG:
print "Solar Heater Temp = ", current_solar_heater_temp
if bottom_sensor + 10 < top_sensor:
GPIO.output(PUMPRLY, True)
print "The Pump is ON"
else:
GPIO.output(PUMPRLY, False)
print "The Pump is OFF"
time.sleep(30)
我还可以使用以下代码通过我的手机通过 UDP 打开/关闭连接到 GPIO 引脚 #7 的泵继电器 (PUMPRLY):
while True:
data, addr = sock.recvfrom(64)
if data == b'7H':
GPIO.output(7, True)
elif data == b'7L':
GPIO.output(7, False)
到目前为止,一切都很好。问题是当我将 2 组合在一起时,ADC 的采样会停止并等待接收任何 UDP,然后它才会继续执行代码。即我的代码在它看到“data, addr = sock.recvfrom(64)”语句时停止。
我是否需要某种版本的多个中断,我将如何做到这一点才能让 ADC 采样每 30 秒继续一次,同时仍然能够独立接收 UDP。我认为它应该像这样简单:
while True:
bottom_sensor = read_bottom_sensor(bottom_sensor_adc, SPICLK, SPIMOSI, SPIMISO, SPICS)
current_spa_temp = bottom_sensor
if DEBUG:
print "Spa Temp = ", current_spa_temp
top_sensor = read_top_sensor(top_sensor_adc, SPICLK, SPIMOSI, SPIMISO, SPICS)
current_solar_heater_temp = top_sensor
if DEBUG:
print "Solar Heater Temp = ", current_solar_heater_temp
if bottom_sensor < top_sensor + 10:
GPIO.output(PUMPRLY, True)
print "The Pump is ON"
else:
GPIO.output(PUMPRLY, False)
print "The Pump is OFF"
data, addr = sock.recvfrom(64)
if data == b'7H':
GPIO.output(7, True)
elif data == b'7L':
GPIO.output(7, False)
time.sleep(30)
但它没有用。仅供参考 UDP 的时间并不重要。我不介意它是否等待 30 秒以执行接收到的 UDP 消息,只要它不中断 ADC 的采样。请记住,我对编程很陌生,我没有想出上面的代码,我只是复制并更改了它。