从3个ADC读取数据时接收Python中的UDP消息

从3个ADC读取数据时接收Python中的UDP消息,python,loops,udp,Python,Loops,Udp,大家好,我是新来的,也是Python的新手。我试图让我的覆盆子Pi控制按摩浴缸的温度,同时能够手动和远程(使用UDP)覆盖其“决定”。基本上,我有3个AD转换器,通过GPIO向我的RPi发送太阳能加热器温度、太阳光量和Spa温度的数据,这些数据将自动控制Spa泵。 我有两段代码,它们彼此独立工作: 我可以使用以下代码每30秒读取一次ADC: (读取\底部\传感器和读取\顶部\传感器在代码前面定义为SPI位碰撞的一部分) 到目前为止还不错。问题是,当我将2结合在一起时,ADC的采样会停止并等待接收

大家好,我是新来的,也是Python的新手。我试图让我的覆盆子Pi控制按摩浴缸的温度,同时能够手动和远程(使用UDP)覆盖其“决定”。基本上,我有3个AD转换器,通过GPIO向我的RPi发送太阳能加热器温度、太阳光量和Spa温度的数据,这些数据将自动控制Spa泵。 我有两段代码,它们彼此独立工作:

我可以使用以下代码每30秒读取一次ADC: (读取\底部\传感器和读取\顶部\传感器在代码前面定义为SPI位碰撞的一部分)

到目前为止还不错。问题是,当我将2结合在一起时,ADC的采样会停止并等待接收任何UDP,然后它才会继续执行代码。i、 我的代码在看到“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)
为True时:
底部传感器=读取底部传感器(底部传感器adc、SPICLK、SPIMOSI、SPIMISO、SPICS)
电流\u spa\u温度=底部\u传感器
如果调试:
打印“Spa Temp=”,当前_Spa_Temp
顶部传感器=读取顶部传感器(顶部传感器adc、SPICLK、SPIMOSI、SPIMISO、SPICS)
电流\太阳能\加热器\温度=顶部\传感器
如果调试:
打印“太阳能热水器温度=”,当前太阳能热水器温度
如果底部传感器<顶部传感器+10:
GPIO.output(泵送,真)
打印“泵已打开”
其他:
GPIO.output(泵送、假)
打印“泵已关闭”
数据,addr=sock.recvfrom(64)
如果数据==b'7H':
GPIO.output(7,真)
elif数据==b'7L':
GPIO.output(7,False)
时间。睡眠(30)
但它不起作用。 仅供参考UDP的时间并不重要。我不介意它是否等待30秒以执行接收到的UDP消息,只要它不中断ADC的采样。
请记住,我对编程非常陌生,我没有想到上面的代码,我只是复制并更改了它。

使用select()只读取main()循环中的就绪套接字。Select()是一个经过时间验证的标准库函数,在Linux和Windows上都能正常工作

多谢各位。我知道这可能是人们在Python101中学习到的东西,但在对“select()”进行了几个小时的研究之后(我有没有提到编程方面的糟糕之处),我能够想出以下两行代码,非常适合我的应用程序:……ready=select.select([RxSock],],[],3)if ready[0]:dataIn=RxSock.recvfrom(512)
while True:
    data, addr = sock.recvfrom(64)

    if data == b'7H':
        GPIO.output(7, True)

    elif data == b'7L':
        GPIO.output(7, False)
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)