繁体   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