无法通过Arduino Wifi Shield向Xiv​​ely发送数据,只发送一个流

时间:2013-07-15 16:06:49

标签: arduino wifi sensor xively analog-digital-converter

我正在做一个涉及从模拟传感器无线上传数据的项目。在这种情况下,它是一个光传感器。

我正在使用Arduino Uno R2和官方Arduino Wi-Fi Shield。以下是我的代码:

#include <SPI.h>
#include <WiFi.h>
#include <HttpClient.h>
#include <Xively.h>

char ssid[] = "Bradley's MacBook Pro"; //  your network SSID (name) 

int status = WL_IDLE_STATUS;

// Your Xively key to let you upload data
char xivelyKey[] = "SOP7lASYJVcRecV98zlHosDc9nLIAXqnDnIxRnXAmNeKorIk";

// Analog pin which we monitor (0 and 1 are used by the Ethernet shield)
int sensorPin = 2;

// Define the strings for our datastream IDs
char sensorId[] = "light";
XivelyDatastream datastreams[] = {
  XivelyDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT),
};
// Finally, wrap the datastreams into a feed
XivelyFeed feed(1125419529, datastreams, 1 /* number of datastreams */);

WiFiClient client;
XivelyClient xivelyclient(client);

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  Serial.println("Starting single datastream upload to Xively...");
  Serial.println();

  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) { 
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid);
    // wait 10 seconds for connection:
    delay(10000);
  } 
  Serial.println("Connected to wifi");
  printWifiStatus();
}

void loop() {
  int sensorValue = analogRead(sensorPin);
  datastreams[0].setFloat(sensorValue);

  Serial.print("Read sensor value ");
  Serial.println(datastreams[0].getFloat());

  Serial.println("Uploading it to Xively");
  int ret = xivelyclient.put(feed, xivelyKey);
  Serial.print("xivelyclient.put returned ");
  Serial.println(ret);

  Serial.println();
  delay(15000);
}

然而不幸的是,每次我连续回复时都会这样:

Attempting to connect to SSID: Bradley's MacBook Pro
Connected to wifi
SSID: Bradley's MacBook Pro
IP Address: 10.0.2.3
signal strength (RSSI):-20 dBm
Read sensor value 1023.00
Uploading it to Xively
xivelyclient.put returned -1

Read sensor value 1023.00
Uploading it to Xively
xivelyclient.put returned -1

Read sensor value 684.00
Uploading it to Xively
xivelyclient.put returned -1

Read sensor value 684.00
Uploading it to Xively
xivelyclient.put returned -1

Read sensor value 684.00
Uploading it to Xively
No Socket available
xivelyclient.put returned -1

Read sensor value 684.00
Uploading it to Xively
No Socket available
xivelyclient.put returned -1

我注意到经过一些尝试后,它开始说没有可用的插座。

有没有人知道我哪里出错?

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。问题是我使用的是Arduino IDE 1.0.5,并且存在阻止Wi-Fi通信的错误。我现在已经改为使用早期的IDE 1.0.2,一切都运行得很好。

答案 1 :(得分:0)

即使您将IDE版本更改为1.0.2,几个月它也能正常工作。如果再次出现此问题,请考虑升级Wifi Shield固件。最新的软件包可以在Arduino网站上找到。它解决了错误

升级的步骤: 1.从此处下载并安装Flip。 http://www.atmel.com/tools/FLIP.aspx您不需要使用或运行Flip程序。下载中有一个子程序,稍后您将需要使用。您将使用DOS命令提示符到达此子程序(batchslip.exe)。您还需要WiFi Shield(AT32UC3A或AT32UC3A DFU)上的芯片驱动程序。

  1. 如果您最近在计算机上安装了Arduino版本,则更新WiFi Shield所需的软件位于Arduino目录结构中。当我最近安装Arduino版本1.0.5时,我知道这对我来说是真实的。 (您可能需要安装当前版本)。

  2. 将WiFI Shield连接到Uno板。将跳线放在“DFU编程跳线”的两个引脚上。这个页面上显示的WiFi Shield第四张图片:? http://arduino.cc/en/Main/ArduinoWiFiShield 要找到跳线的图片,请查找指向电路板的字和箭头。 DFU编程跳线(仅用于更新屏蔽固件,保留未连接的典型用途)&#34;。

  3. 连接到Arduino的电源。然后将迷你USB连接到WiFi防护罩(不是micro-USB)和计算机。

  4. 希望您的Windows设备管理器在&#34;其他设备&#34;下显示AT32UC3A DFU。您可能必须使用插拔电源连接到Arduino以及连接到计算机的WiFI Shield的USB端口。有一次,我没有为Arduino供电,只在计算机和WiFi Shield之间插入USB mini。

  5. 右键点击“设备管理器”中的设备&#39;并选择&#34;更新驱动程序&#34; 。我选择从我的计算机安装并指示Device Installer应用程序从...安装:C:\ Program Files(x86)\ Atmel \ Flip 3.4.7。我可以选择点击&#34;包含子目录&#39;。抱歉,我不确定驱动程序实际可能处于什么子文件夹。完成此步骤后,AT32UC3A DFU应正确地列在设备管理器中的#34; Atmel USB设备&#34;。

  6. 打开命令提示符并导航到&#34; batchslip.exe&#34;是由Flip安装的。对我来说,它是C:\ Program Files(x86)\ Atmel \ Flip 3.4.7 \ bin ...但它取决于Atmel软件的安装位置以及您下载的版本。

  7. 进入目录(C:\ Program Files(x86)\ Atmel \ Flip 3.4.7 \ bin)后,您需要运行两个命令。您需要确定最初安装Arduino软件的位置。我在C:\ Arduino中安装了我的,而不是建议的冗长文件夹(*类似于C:\ Arduino 1.0.5。)。因此,您可能需要在下面列出的两个命令中调整目录结构。 我建议从下面剪切并粘贴第一个命令,然后使其与您的* Arduino文件夹名称匹配。您可能必须将以下命令转储到记事本或其他内容以确保没有换行符。使路径尽可能小。在升级时不要在程序文件中粘贴Arduino文件夹,因为如果路径有程序文件(x86),则单词之间的空格将创建不必要的错误,例如:缺少参数 &#34; c:\ Program Files(x86)\ Atmel \ Flip 3.4.7 \ bin&gt; batchisp.exe -device AT32UC3A1256 -hardware usb -operation erase f memory flash blankcheck loadbuffer c:\ Arduino \ hardware \ arduino \ firmwares \ wifishield \ binary \ wifi_dnld.elf程序验证启动重置0 &#34;

    以下是您应该在命令行上看到的内容..........

  8. 2014年5月10日星期六21:16:01运行batchisp 1.2.5

    AT32UC3A1256 - USB - USB / DFU

    设备选择.......................通过 硬件选择.....................通过 开口...........................通过 阅读Bootloader版本............. PASS 1.0.2 擦除................................通过 选择FLASH ........................ PASS 空白检查......................... PASS 0x00000 0x3ffff 解析ELF文件.......................通过c:\ Arduino \ hardware \ arduino \ firmwares \ wifishield \ binary \ wifi_dnld.elf 警告:用户程序和引导加载程序重叠! 编程存储器..................... PASS 0x00000 0x2902b 验证内存....................... PASS 0x00000 0x2902b 开始申请................... PASS RESET 0

    摘要:共11次通过11次失败0

    c:\ Program Files(x86)\ Atmel \ Flip 3.4.7 \ bin&gt;

    1. 现在更新第二部分 从下面剪切并粘贴命令。您可能必须将其转储到记事本或其他东西,以确保没有换行符。 &#34; c:\ Program Files(x86)\ Atmel \ Flip 3.4.7 \ bin&gt; batchisp.exe -device AT32UC3A1256 -hardware usb -operation erase f memory flash blankcheck loadbuffer c:\ Arduino \ hardware \ arduino \ firmwares \ wifishield \ binary \ wifiHD.elf程序验证启动重置0
      &#34;
    2. 按Enter键

      以下是您屏幕上会发生的事情..

      2014年5月10日星期六21:34:04运行batchisp 1.2.5

      AT32UC3A1256 - USB - USB / DFU

      设备选择.......................通过 硬件选择.....................通过 开口...........................通过 阅读Bootloader版本............. PASS 1.0.2 擦除................................通过 选择FLASH ........................ PASS 空白检查......................... PASS 0x00000 0x3ffff 解析ELF文件.......................通过c:\ Arduino \ hardware \ arduino \ firmwares \ wifishield \ binary \ wifiHD.elf 警告:用户程序和引导加载程序重叠! 编程存储器..................... PASS 0x00000 0x3fe2b 验证内存....................... PASS 0x00000 0x3fe2b 开始申请................... PASS RESET 0

      摘要:共11次通过11次失败0

      c:\ Program Files(x86)\ Atmel \ Flip 3.4.7 \ bin&gt;

      1. 从WiFi卡中移除跳线。删除Min USB。

      2. 使用任何草图验证Wifi屏蔽。

      3. 此方法确实解决了No Socket可用问题。