我在通过 Arduino Uno v3 和 Sparkfun WiFly shield 向 xively API 提供传感器数据时遇到问题。问题不在于硬件,也不在于 WiFly 屏蔽库,因为我可以很好地将数据传送到 Paraimpu 服务器。
最根本的问题是 xively 库无法与 sparkfun WiFly 库一起使用。相关声明(由 xively 在文档中建议)是:
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&)
在这一点上我被卡住了,我试图修改各种库以试图协调这个问题没有成功——主要是因为它超出了我的技能水平,我真的不知道我在做什么。
为了解决这个问题,我编写了代码来构建 put 请求并将其发送到 API,使用成功运行的代码模板将数据发送到 Paraimpu。
我打开一个连接(到 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"}]}
以空行结束。
不用说,我已经用这些名字在 xively 中建立了频道。但这不起作用——我没有得到预期的回报,频道也没有更新。如果我读取连接上的返回输入,它只是一长串数字。任何人都可以看到这个请求的格式有什么问题吗?