python中的request()似乎阻止了我想在cod中发送的变量的更新

2024-04-25 19:50:20 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个通过射频接收器不断接收数据的代码。你知道吗

key = 'my api key'
ser = serial.Serial('/dev/ttyUSB0',9600)

def rfWaterLevel():
    rfWaterLevelArray = ser.readline().strip().split()
    if len(rfWaterLevelArray) == 5:
         rfWaterLevelVal = float(rfWaterLevelArray[4])
         params = urllib.urlencode({'field1':rfWaterLevelVal, 'key':key})
         headers = {"Content-typZZe" : "application/x-www-form-urlencoded","Accept":"text/plain"}
         conn = httplib.HTTPConnection("api.thingspeak.com:80")
         conn.request("POST", "/update", params, headers)
         response = conn.getresponse()
         data = response.read()
         conn.close()
while True:
    try:
        rfWaterLevel()
        time.sleep(3)
    except KeyboardInterrupt:
        print "caught keyboard interrupt"
        sys.exit()

在发送数据和更新东西方面说它的工作。但是有一个很大的缺陷。正在发送的rfWaterLevelVal变量根本没有根据正在接收的数据进行更新。因此,如果最初接收到的rf数据是30,那么rfWaterLevelVal是30,那么下一轮的数据是40,发送的数据仍然停留在30。你知道吗

我试着逐行注释代码,看看是什么导致了这种情况,似乎更新rfWaterLevelArray&rfWaterLevelVal变量的“冻结”发生在。。。你知道吗

 conn.request("POST", "/update", params, headers)

为什么在运行一次该代码后,我的rfWaterLevelArray或rfWaterLevelVal变量根本没有被更新?你知道吗

提前谢谢!你知道吗


Tags: 数据key代码apiresponserequestupdateparams
1条回答
网友
1楼 · 发布于 2024-04-25 19:50:20

rfWaterLevel的值没有更新,因为您没有更新它。每次调用rfWaterLevel(函数)时,执行以下语句:

rfWaterLevel = float(rfWaterLevelTemp[4])

然后用这个值做一些事情,但不显示rfWaterLevelTemp[4]的来源。除非在某个地方有所改变,否则一切都是一样的。您将一次又一次地发送相同的值。也许你想写:

rfWaterLevel = float(rfWaterLevelArray[4])

我想它会发送你从串口得到的最新数据。你知道吗

相关问题 更多 >

    热门问题