2014年6月24日 星期二

Arduino 氣象站 Ver4.2 WIFI

簡單來說,我之前做的WIFI氣象站都遇到了一個問題,那就是傳送時間太太太久了,
最初是直接修改Adafruit的Code,沿用.Json的格式,之後為了改進傳送速度,改成了.Csv的格式
但是之後就一直沒有辦法再壓低時間,啟動時間還是將近25s,算下來再耗電量貢獻了90%以上,
待機耗電量的影響幾乎消失,耗電量的主導權也在啟動時間上面,

之後FB上有人推薦用MQTT這個Protocol,可以顯著的壓低傳送的資料量,於是這次改版的重點就是將Xively的上傳資料方式從Http改成MQTT

首先是把程式先宣告
cc3000_PubSubClient mqttclient(ip, 1883, callback, client, cc3000);
再來就是用Adafruit的CC3000 library連上Xively的Server,他提供給MQTT的Port是1883
client = cc3000.connectTCP(ip,1883);
接下來是用MQTT library連接 Xively的HOST:
mqttclient.connect("隨便一個名子", "API_KEY填到這裡", "");
最後就可以用mqttclient.publish("/v2/feeds/FEED_ID填這裡.csv", buf);
要注意的是,檔案格式也有.JSON,.XML還有.CSV, Buf限定Char array
這樣就可以了

於是這樣一改,啟動時間從25s下降變成3~5s,顯著地降低耗電量,接下來就是另外一個問題了,
我的測試中,CC3000似乎不能直接用IP連結HOST,非得要先DNS Lookup才能上傳資料,這大概是接下來要研究的問題了

(Update這個問題,我發現是因為檢查有沒有連上AP的Flag在斷線後沒有清掉,導致還沒連線成功就開TCP Socket就失敗了


沒有留言:

張貼留言