所以我有这个代码,它通过RF接收器不断地接收数据。
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变量在运行一次代码后根本没有更新,有什么帮助吗?
提前感谢!
rfWaterLevel
的值没有更新,因为您没有更新它。每次调用rfWaterLevel
(函数)时,您都会执行以下语句:
rfWaterLevel = float(rfWaterLevelTemp[4])
然后用这个值做一些事情,但没有显示rfWaterLevelTemp[4]
的来源。除非它在某个地方被改变,否则它永远都是一样的。您将一次又一次地发送相同的值。也许你想写:
rfWaterLevel = float(rfWaterLevelArray[4])
我认为它会发送您从串行端口获得的最新数据。