首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino+WiFly屏蔽无法与xively通信

Arduino+WiFly屏蔽无法与xively通信
EN

Stack Overflow用户
提问于 2013-08-24 02:26:57
回答 3查看 728关注 0票数 0

我在通过Arduino Uno v3和Sparkfun WiFly屏蔽将传感器数据传送到WiFly时遇到了问题。问题不在硬件上,也不在WiFly屏蔽库中,因为我可以很好地将数据传送到Paraimpu服务器。

最基本的问题是,WiFly库不能与sparkfun WiFly库一起工作。相关的声明(在文档中由xively建议)是:

代码语言:javascript
复制
WiFlyClient client;
XivelyClient xivelyclient(client);

这将不起作用,因为WiFlyClient声明需要一个服务器和端口,因此我将其修改为:

代码语言:javascript
复制
byte server[] = {173,203,98,29}; //api.xively.com IP address
WiFlyClient client(server,80);
XivelyClient xivelyclient(client);

这给了我一个关于编译的错误:

/Users/paultravers/Documents/Arduino/libraries/xively/XivelyClient.h:11::错误:调用'XivelyClient::XivelyClient(WiFlyClient&)‘没有匹配的函数注意:候选: XivelyClient::XivelyClient(Client&) /Users/paultravers/Documents/Arduino/libraries/xively/XivelyClient.h:9:备注: XivelyClient::XivelyClient(const XivelyClient&)

在这一点上,我被卡住了,我试图修改各种库来解决这个问题的尝试都无济于事--主要是因为它超出了我的技能水平,我真的不知道我在做什么。

为了解决这个问题,我编写了构建put请求并将其发送到API的代码,使用成功运行的代码模板将数据发送到Paraimpu。

我打开一个连接(到api.xively.com或到173.203.98.29;在这个阶段没有区别),并发送以下内容:

代码语言:javascript
复制
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"}]}

以空行结束。

不用说,我已经用这些名字在xively中建立了频道。但这不起作用--我得不到预期的回报,频道也不会更新。如果我读取连接上的返回输入,它只是一个很长的数字字符串。任何人都能看到这个请求的格式有什么问题吗?

EN

回答 3

Stack Overflow用户

发布于 2013-08-24 02:37:37

我可能会看一下WiFlyClient的documentation...maybe,您需要在其他一些way...than扩展WiFlyClient中设置端口/etc

代码语言:javascript
复制
class WiFlyClient2 : public WiFlyClient {
   WiFlyClient2(int[] ip,int port) : WiFlyClient() {
     //setup up your parent by calling it's functions here
   }
}

那么它应该是这样工作的:

代码语言:javascript
复制
byte server[] = {173,203,98,29}; //api.xively.com IP address
WiFlyClient client(server,80);
XivelyClient xivelyclient(client);

注意:我从来不使用wifly/etc,我只是使用arduino...and,我也遇到了这样的麻烦:)

票数 0
EN

Stack Overflow用户

发布于 2013-08-28 02:54:15

我没有可以测试的WiFly防护罩。但正如你在对Zoltan的评论中所说的,我不认为WiFly客户端的工作方式与Arduino Ethernet或Wifi的工作方式相同。这意味着WiFly库很可能不能与WiFly客户端一起工作。

这意味着您编写自己的HTTP请求的方法可能是可行的。我看了你的请求,它看起来完全正确。当您发送请求时,是否会在Xively请求日志中显示任何内容?

您可以尝试使用CSV格式。这对于测试可能更好,因为您避免了JSON小错误导致整个请求无法工作的可能性。为此,请将.json更改为.csv,然后简单地将正文设置为数据流、值的逗号分隔列表。你的身体应该看起来像这样:

代码语言:javascript
复制
TEMPERATURE_CHANNEL,29.00
LIGHT_SENSOR_CHANNEL,541.00
ALARM_CHANNEL,0.00

如果这不工作,它将是有帮助的,如果您可以张贴的回报是什么,这将有助于我们帮助您。祝好运!

票数 0
EN

Stack Overflow用户

发布于 2014-01-29 00:53:21

我在您的代码中注意到的一件事是,您没有在请求中发送HTTP版本。

你应该试着发送:

代码语言:javascript
复制
PUT /v2/feeds/<feed ID redacted>.json HTTP/1.1

当我写到Xively时,我收到了405个错误,因为我在put请求中错误地将HTTP/1.0作为版本。

还有一个example from SparkFun's WiFly library that shows writing to Thingspeak,它可以帮助您确保正确使用WiFlyClient实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18409490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档