Не удается отправить данные в Xively через Arduino Wi-Fi Shield, отправив только один поток

Я делаю проект, связанный с беспроводной загрузкой данных с аналогового датчика. В данном случае это датчик света.

Я использую 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

Я заметил, что после нескольких попыток он начал говорить Нет доступных сокетов.

Кто-нибудь знает, где я ошибся?


person Bradeley    schedule 15.07.2013    source источник


Ответы (2)


Я решил эту проблему. Проблема в том, что я использовал Arduino IDE 1.0.5, и в ней есть ошибка, которая препятствует обмену данными по Wi-Fi. Теперь я перешел на более раннюю версию IDE 1.0.2, и все работает отлично.

person Bradeley    schedule 17.07.2013

Даже если вы измените версию IDE на 1.0.2, несколько месяцев она работала нормально. Если эта проблема возникнет снова, рассмотрите возможность обновления прошивки Wifi Shield. Последний пакет доступен на сайте Arduino. Он решил ошибку

Шаги для обновления: 1. Загрузите и установите Flip отсюда. http://www.atmel.com/tools/FLIP.aspx Вы не необходимо использовать или запустить программу Flip. В загрузке есть подпрограмма, которую вам нужно будет использовать позже. Вы попадете в эту подпрограмму (batchslip.exe) с помощью командной строки DOS. Также есть драйвер для чипа WiFi Shield (AT32UC3A или AT32UC3A DFU), который вам понадобится.

  1. Если вы недавно установили версию Arduino на свой компьютер, программное обеспечение, необходимое для обновления WiFi Shield, находится в структуре каталогов Arduino. Я знаю, что это верно для меня, когда я недавно установил Arduino версии 1.0.5. (Возможно, вам потребуется установить текущую версию).

  2. Подключите ваш WiFi Shield к плате Uno. Установите перемычку на оба контакта на «перемычке программирования DFU». Показано на 4-м изображении WiFi Shield на этой странице: ? http://arduino.cc/en/Main/ArduinoWiFiShield Чтобы найти изображение перемычки, найдите слова и стрелку, указывающую на плату «Перемычка для программирования DFU (используется только для обновления прошивки щита, оставьте неподключенной для обычного использования)».

  3. Подключите питание к Arduino. Затем подключите мини-USB к экрану Wi-Fi (не микро-USB) и компьютеру.

  4. Надеюсь, ваш диспетчер устройств Windows покажет AT32UC3A DFU в разделе «Другие устройства». Возможно, вам придется поиграть с подключением/отключением питания к Arduino, а также с USB-портом WiFI Shield, подключенным к вашему компьютеру. Однажды мне повезло: я не включал Arduino и подключал только мини-разъем USB между компьютером и WiFi Shield.

  5. Щелкните правой кнопкой мыши устройство в «Диспетчере устройств» и выберите «Обновить драйвер». Я выбрал установку со своего компьютера и направил приложение «Установщик устройств» на «Установить из... C:\Program Files (x86)\Atmel\Flip 3.4.7». У меня была возможность нажать «Включить подкаталоги». Извините, я не уверен, в какой подпапке на самом деле может находиться драйвер. Когда этот шаг будет завершен, AT32UC3A DFU должен быть правильно указан в диспетчере устройств в разделе «USB-устройства Atmel».

  6. Откройте командную строку и перейдите в каталог, в который Flip установил «batchslip.exe». Для меня это был 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 в программные файлы во время обновления, потому что, если в пути есть Program Files (x86), пробелы между словами создадут ненужную ошибку, например: недостающие аргументы "c:\Program Files (x86) )\Atmel\Flip 3.4.7\bin>batchisp.exe -device AT32UC3A1256 -hardware usb -operation erase f memory flash Blankcheck loadbuffer c:\Arduino\hardware\arduino\firmwares\wifishield\binary\wifi_dnld.elf программа проверка старт сброс 0 "

    Вот что вы должны увидеть в командной строке..........

Запуск batchisp 1.2.5 в субботу, 10 мая, 21:16:01 2014 г.

AT32UC3A1256 — USB — USB/DFU

Выбор устройства................... PASS Выбор оборудования..................... PASS Открытие порта................................... PASS Чтение версии загрузчика............. PASS 1.0.2 Стирание................... PASS Выбор 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>

  1. Теперь, чтобы обновить вторую часть Вырежьте и вставьте команду снизу. Возможно, вам придется сбросить его в блокнот или что-то еще, чтобы убедиться, что нет разрывов строк. " c:\Program Files (x86)\Atmel\Flip 3.4.7\bin>batchisp.exe -устройство AT32UC3A1256 -аппаратное обеспечение USB -операция стирание памяти флэш-памяти пустая проверка загрузочного буфера c:\Arduino\hardware\arduino\firmwares\wifishield\binary программа \wifiHD.elf проверка запуска сброс 0
    "

нажмите Ввод

Вот что будет на вашем экране..

Запуск batchisp 1.2.5 в субботу, 10 мая, 21:34:04 2014 г.

AT32UC3A1256 — USB — USB/DFU

Выбор устройства................... PASS Выбор оборудования..................... PASS Открытие порта................................... PASS Чтение версии загрузчика............. PASS 1.0.2 Стирание................... PASS Выбор 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>

  1. Снимите перемычку с карты Wi-Fi. Удалите Мин USB.

  2. Проверьте Wi-Fi Shield с помощью любого эскиза.


Этот метод действительно решил проблему отсутствия доступных сокетов.

person indu    schedule 14.05.2015