그래서이 코드는 RF 수신기를 통해 지속적으로 데이터를 수신합니다.python에서 request()가 내 코드에서 보내려는 변수의 업데이트를 차단하는 것 같습니다
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 변수가이 후 전혀 업데이트되지 않는 이유에 도움이 라인에서 발생 코드가 한 번 실행됩니까?
미리 감사드립니다.
답변이 없지만 Content-Type 헤더에 오타가 있습니다. – Garett
제안 : 프로그램을 변경하는 줄을 주석 처리하는 대신 print 문을 삽입하십시오. 제시 한 코드는 실행될 수 없으며별로 의미가 없습니다. 이 변수들은 정의되지 않았다 :'ser, rfWaterLevelTemp, key'. 'rfWaterLevel'을 함수 이름과 로컬 변수 이름으로 사용하고 있습니다 (버그는 아니지만 나쁜 스타일 임). 변수'data'는 결코 사용되지 않습니다 (버그는 아니지만 무의미 함). –
'conn = httplib.HTTPConnection ("api.thingspeak.com:80", timeout = 5)'을 시도하여 요청 시간이 초과되고'headers'가'}'로 끝나야하는지 확인하십시오. – shiva