0
文字列の配列であるこのグローバル変数の更新に問題があります。このrfDataArray
は、rfデータが別のデバイスから入ってくると更新されるはずです。今、このをでクラウドサーバーに送信しないでテストしたところ、データが送信されるとすぐにrfDataArray
が更新されるようになりました。しかし、データの送信を開始すると、rfDataArray
配列があるようです...私はrfDataArray
変数を更新する必要がクラウドサーバーにデータを送信した後に変数が更新されない
import httplib, urllib
import time, sys
import serial
key = 'MY_API_KEY'
rfDataArray = []
rfWaterLevelVal = 0
ser = serial.Serial('/dev/ttyUSB0',9600)
def rfWaterLevel():
global rfWaterLevelVal
global rfDataArray
rfDataArray = ser.readline().strip().split()
print 'incoming: %s' %rfDataArray
if len(rfDataArray) == 5:
rfWaterLevelVal = float(rfDataArray[4])
print 'RFWater Level1: %.3f cm' % (rfWaterLevelVal)
def sendRFWaterlevel():
params = urllib.urlencode({'field1':rfWaterLevelVal, 'key':key})
headers = {"Content-type": "application/x-www-form-urlencoded",
"Accept": "text/plain"}
conn = httplib.HTTPConnection("api.thingspeak.com:80", timeout = 5)
conn.request("POST", "/update", params, headers)
print 'RFWater Level2: %.3f cm' % (rfWaterLevelVal)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
conn.close()
while True:
try:
rfWaterLevel()
time.sleep(1)
sendRFWaterlevel()
time.sleep(3)
except KeyboardInterrupt:
print "caught keyboard interrupt"
sys.exit()
を初期配列で立ち往生し、二度と更新されません(そうrfWaterlevelVal
は、クラウドサーバーに送っように更新されます)。
これらの潜在的な解決策の両方を適用する方法を教えてください。 – Verglas
非同期呼び出しのための[ここでは単純なスタックオーバーフローソリューションです](http://stackoverflow.com/questions/1239035/asynchronous-method-call-in-python)。 [Here]は、同期呼び出し(https://docs.python.org/3/library/asyncio-sync.html)のためのpythonのドキュメントです。 – rt88