簡體   English   中英

Arduino + WiFly屏蔽無法進行Xive通信

[英]Arduino+WiFly shield failing to communicate to xively

我在通過Arduino Uno v3和Sparkfun WiFly防護罩將傳感器數據傳遞到xively API時遇到問題。 問題不在硬件或在WiFly屏蔽庫中,因為我可以將數據很好地傳遞到Paraimpu服務器。

最根本的問題是xively庫不能與sparkfun WiFly庫一起使用。 相關聲明(在文檔中由xive建議)是:

WiFlyClient client;
XivelyClient xivelyclient(client);

由於WiFlyClient聲明需要服務器和端口,因此這將不起作用,因此我將其修改為:

byte server[] = {173,203,98,29}; //api.xively.com IP address
WiFlyClient client(server,80);
XivelyClient xivelyclient(client);

這使我在編譯以下錯誤:

Xively_sketch2_aug20a:60:錯誤:沒有匹配的函數可以調用'XivelyClient :: XivelyClient(WiFlyClient&)'/Users/paultravers/Documents/Arduino/libraries/xively/XivelyClient.h:11:注意:候選對象是:XivelyClient :: XivelyClient( Client&)/Users/paultravers/Documents/Arduino/libraries/xively/XivelyClient.h:9:注意:XivelyClient :: XivelyClient(const XivelyClient&)

在這一點上,我陷入了困境,嘗試修改各種庫以調和該問題的嘗試都無濟於事-主要是因為它超出了我的技能水平,我真的不知道自己在做什么。

為了解決這個問題,我使用成功運行以將數據發送到Paraimpu的代碼模板,編寫了構建put請求並將其發送到API的代碼。

我打開一個連接(到api.xively.com或173.203.98.29;在此階段沒有影響),並發送以下內容:

PUT /v2/feeds/<feed ID redacted>.json
Host: api.xively.com
Content-Type: application/json
User-Agent : Xively-Arduino-Lib/1.0
X-ApiKey: < API key redacted >
Content-Length: 197
{"version":"1.0.0","datastreams" : [{"id":"TEMPERATURE_CHANNEL" , "current_value" : "29.00"},{"id":"LIGHT_SENSOR_CHANNEL","current_value":"541.00"},{"id":"ALARM_CHANNEL","current_value":"0.00"}]}

用空行終止。

不用說,我已經用這些名稱建立了活躍的渠道。 但這是行不通的-我沒有得到預期的回報,渠道也沒有更新。 如果我讀取了連接上的返回輸入,則它只是一長串數字。 有人可以看到此請求格式的任何錯誤嗎?

我可能會看看WiFlyClient的文檔...也許您需要以其他方式設置端口/等等...而不是擴展WiFlyClient

class WiFlyClient2 : public WiFlyClient {
   WiFlyClient2(int[] ip,int port) : WiFlyClient() {
     //setup up your parent by calling it's functions here
   }
}

那么它應該像:

byte server[] = {173,203,98,29}; //api.xively.com IP address
WiFlyClient client(server,80);
XivelyClient xivelyclient(client);

注意:我從不使用wifly / etc,我只是使用arduino ...而我也遇到了類似的麻煩:)

我沒有可測試的WiFly防護罩。 但是,正如您在對Zoltan的評論中所說,我認為WiFly客戶端的工作方式與Arduino以太網或Wifi的工作方式不同。 這意味着Xively庫可能不適用於WiFly客戶端。

這意味着您可以編寫自己的HTTP請求的方法。 我仔細閱讀了您的要求,對我來說完全正確。 發送請求時,Xively Workbench請求日志中是否顯示任何內容?

您可以嘗試的一件事是改用CSV格式。 這可以更好地進行測試,因為可以避免出現較小的JSON錯誤而導致整個請求無法正常工作的情況。 為此,請將您的.json更改為.csv,然后只需將您的正文變成逗號分隔的數據流,值列表即可。 您的身體看起來應該像這樣:

TEMPERATURE_CHANNEL,29.00
LIGHT_SENSOR_CHANNEL,541.00
ALARM_CHANNEL,0.00

如果這樣做不起作用,那么您可以發布退貨是有幫助的,那將對我們有幫助。 祝好運!

我在您的代碼中注意到的一件事是,您沒有在請求中發送HTTP版本。

您應該嘗試發送:

PUT /v2/feeds/<feed ID redacted>.json HTTP/1.1

寫入Xively時出現405錯誤,因為我在put請求中錯誤地將HTTP / 1.0作為版本。

SparkFun的WiFly庫中還有一個示例,示例顯示了對Thingspeak的寫入,這有助於確保您正確使用WiFlyClient實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM