Help caricamento dati su Xively

Ciao a tutti, vi chiedo cortesemente se potete aiutarmi col mio progetto. Voglio creare una piccola stazione meteo e seguendo anche dei progetti pubblicati su internet ho scritto il codice perfettamente funzionante. Il problema è che mi esce un errore quando vado a caricare i dati su Xively.

Il codice è:

#include "SPI.h" 
#include "Ethernet.h" 
#include "HttpClient.h" 
#include "DataCoder.h" 
#include "VirtualWire.h" 
#include "Xively.h" 
#include "DHT.h" 
//definisco il pin 11 come rx dht type
//DHT dht(DHTPIN, DHTTYPE);
const int rx_pin = 11;
const int baudRate = 800;
const int led_pin = 13;
//indirizzo MAC ethernet shield
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
//API key per upload
char xivelyKey[] = "1cn34PkopBKCTNrdTumVtZZngfIqIM9YabU7FEAp68LvblH3";
//definisco le stringhe per il datastream
char tOUT[] = "Temperatura";
char hOUT[] = "Umidita";
XivelyDatastream datastreams [] = {
  XivelyDatastream(tOUT, strlen(tOUT), DATASTREAM_FLOAT),
  XivelyDatastream(hOUT, strlen(hOUT), DATASTREAM_FLOAT),
  };
//inserisco il feed ID di xively e il numero di datastream da caricare
XivelyFeed feed(1070150508, datastreams, 2);

EthernetClient client;
XivelyClient xivelyclient(client);
 
void setup() {
  Serial.begin(9600);
  Serial.println("Inizio upload datastream su Xively...");
  Serial.println();
  Serial.print("Avvio lettura");
//  dht.begin();
  while (Ethernet.begin(mac) !=1)
  {
    Serial.println("Errore ricezione IP tramite DHCP, riprovo...");
    delay(15000);
  }
  Serial.print("Il server è:  ");
  Serial.println(Ethernet.localIP());
  SetupRFDataRxnLink(rx_pin, baudRate);
}
 
void loop() {

  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  union RFData inDataSeq;//dove immagazzinare le informazioni ricevute da sensore esterno
  float inArray[2];//dove immagazzinare le informazioni decodificate
  if(RFLinkDataAvailable(buf, &buflen))
  {
        for(int i =0; i< buflen; i++)
        {
          inDataSeq.s[i] = buf[i];
        }
        DecodeRFData(inArray, inDataSeq);
        float tOUT = inArray[0];
        float hOUT = inArray[1];
        datastreams[0].setFloat(tOUT);
        datastreams[1].setFloat(hOUT);
        Serial.println("Caricamento su Xively");
        int ret = xivelyclient.put(feed, xivelyKey);
        Serial.print("xivelyclient.put returned");
        Serial.println(ret);
        Serial.println("temperatura: ");
        Serial.print(inArray[0]);
        Serial.print(" °C Umidita: ");
        Serial.print(inArray[1]);
        
  }
}

Quando apro il monitor seriale mi appare que``sta scritta:

Inizio upload datastream su Xively...

Avvio letturaIl server è:  192.168.11.3
Caricamento su Xively
xivelyclient.put returned-3
temperatura: 
21.10 °C Umidita: 26.00Caricamento su Xively
xivelyclient.put returned-3

Il problema è quella scritta: xivelyclient.put returned-3
Sono andato sulla libreria di xively e mi indica quanto segue:
This library uses amcewen/HttpClient which has following error codes:

HTTP_SUCCESS = 0 - no error
HTTP_ERROR_CONNECTION_FAILED = -1 - connection to api.xively.com has failed
HTTP_ERROR_API = -2 - a method of HttpClient class was called incorrectly
HTTP_ERROR_TIMED_OUT = -3 - connection with api.xively.com has timed-out
HTTP_ERROR_INVALID_RESPONSE = -4 - invalid or unexpected response from the server

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Fatto, mi sono presentato :wink:

Per una risposta alla domanda, pazienta, non credo siano molti gli utenti del forum italiano ad usare Xively.

nid69ita:
Per una risposta alla domanda, pazienta, non credo siano molti gli utenti del forum italiano ad usare Xively.

Quali altri datalogger free si possono utilizzare?
Posso provare a cambiare...

UDITE UDITE.... Dopo tre settimane che mi scervellavo per risolvere il mio problema alla fine alle ore 21.40 ho trovato la soluzione.

Per quelli che come me si scontreranno con lo stesso mio problema vi illustro la tanta agognata soluzione:

  • La Ethernet shield w5100 che uso io utilizza, per la connessione su arduino i pin 10, 11, 12, 13 e io avevo collegato la mia ricevente wi-fi (rx 433mhz) al pin 11 come suggerito dalla libreria "VirtualWire.h".

Soluzione: ho semplicemente modificato il pin di connessione dal 11 al 6... et voila', come per magia tutto funziona perfettamente!!!

... beh certo usare uno dei pin RISERVATI per la comunicazione SPI (11,12 e 13) con il WiFi shield, per altri scopi ... di sicuro non funziona :wink:

Guglielmo

gpb01:
... beh certo usare uno dei pin RISERVATI per la comunicazione SPI (11,12 e 13) con il WiFi shield, per altri scopi ... di sicuro non funziona :wink:

Guglielmo

Già, facile dirlo adesso... ma nessuno che riusciva a darmi una soluzione... e poi nella libreria VirtualWire.h è indicato il pin 11 come rx...
Comunque risolto tutto...
:smiley:

spyke85:
Già, facile dirlo adesso...

Perché solo adesso ho letto il tuo thread ... e perché se mi dovessi mettere ad esaminare tutti i codici che gli utenti postano ... non farei altro nella vita :smiley: :smiley: :smiley:

Che la SPI su Arduino UNO usi i pin 11,12 e 13 (MOSI, MISO, SCK) è una nozione di base che si dovrebbe conoscere e che è ben riportata nel reference della scheda :wink:

Guglielmo

gpb01:
Che la SPI su Arduino UNO usi i pin 11,12 e 13 (MOSI, MISO, SCK) è una nozione di base che si dovrebbe conoscere e che è ben riportata nel reference della scheda :wink:

Già, sono nozioni che bisognerebbe conoscere... Ma se tutti sapessimo tutto, non esisterebbe il forum... e cmq, visto che utilizzo un solo pin nel mio codice, beh magari a qualcuno sarebbe potuto venire in mente... invece no... Beh, almeno ho risolto il mio problema e adesso posso procedere col progetto...
Cmq grazie dell'aiuto :wink:
Ciao