Go Down

Topic: Inviare dei dati ad EXOSITE (Read 484 times) previous topic - next topic

Bambinz

Buongiorno a tutti,
La mia intenzione è quella di relaizzare una stazione meteo e inviare i dati ad exosite.
Il problema è che non riesco a connettermi al sito, sul monitor seriale mi ritrovo l'errore can't connect to exosite.

Il codice che ho utilizzato è il seguente:

Code: [Select]

#include <EEPROM.h>
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <Exosite.h>

int DS18B20_Pin = 7;
OneWire ds(DS18B20_Pin);

/*==============================================================================
* Configuration Variables
*
* Change these variables to your own settings.
*=============================================================================*/
String cikData = "*****HoMessoIlmioCIK************************";  // <-- FILL IN YOUR CIK HERE! (https://portals.exosite.com -> Add Device)
byte MAC[] = {
  0xDD, 0xAB, 0xCE, 0xFF, 0xEE, 0xED }; //Creo il MAC address
byte IP[] = { 192, 168, 1, 168 }; // Indirizzo IP arduino


// User defined variables for Exosite reporting period and averaging samples
#define REPORT_TIMEOUT 30000 //milliseconds period for reporting to Exosite.com
#define SENSOR_READ_TIMEOUT 5000 //milliseconds period for reading sensors in loop


/*==============================================================================
* End of Configuration Variables
*=============================================================================*/
class EthernetClient client;
Exosite exosite(cikData, &client);

//
// The 'setup()' function is the first function that runs on the Arduino.
// It runs completely and when complete jumps to 'loop()'
//
void setup() {
  Serial.begin(9600);
  Serial.println("Boot");
 
  // Start up the OneWire Sensors library
  delay(1000);
  Ethernet.begin(MAC,IP);
  // wait 3 seconds for connection
  delay(3000);

}

//
// The 'loop()' function is the 'main' function for Arduino
// and is essentially a constant while loop.
//
void loop() {
  static unsigned long sendPrevTime = 0;
  static unsigned long sensorPrevTime = 0;
  static float temperature;
  char buffer[7];
  String readParam = "";
  String writeParam = "";
  String returnString = ""; 

  Serial.print("."); // print to show running

  // Read sensor every defined timeout period
  if (millis() - sensorPrevTime > SENSOR_READ_TIMEOUT) {
    Serial.println();
    Serial.println("Requesting temperature...");
    temperature = getTemp();
    Serial.print("Celsius:    ");
    Serial.print(temperature);
    Serial.println(" C ..........DONE");   
    sensorPrevTime = millis();
  }

  // Send to Exosite every defined timeout period
  if (millis() - sendPrevTime > REPORT_TIMEOUT) {
    Serial.println(); //start fresh debug line
    Serial.println("Sending data to Exosite...");

    readParam = "";        //nothing to read back at this time e.g. 'control&status' if you wanted to read those data sources
    writeParam = "temp="; //parameters to write e.g. 'temp=65.54' or 'temp=65.54&status=on'

    String tempValue = dtostrf(temperature, 1, 2, buffer); // convert float to String, minimum size = 1, decimal places = 2
    writeParam += tempValue;    //add converted temperature String value

      if ( exosite.writeRead(writeParam, readParam, returnString) ) {
      Serial.println("Exosite OK");
      if (returnString != "") {
        Serial.println("Response:");
        Serial.println(returnString);
      }
    }
    else {
      Serial.println("Exosite Error");
    }

    sendPrevTime = millis(); //reset report period timer
    Serial.println("done sending.");
  }
  delay(1000); //slow down loop
}

float getTemp(){
  //returns the temperature from one DS18B20 in DEG Celsius

  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
    //no more sensors on chain, reset search
    ds.reset_search();
    return -1000;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
    Serial.println("CRC is not valid!");
    return -1000;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) {
    Serial.print("Device is not recognized");
    return -1000;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power on at the end

  byte present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE); // Read Scratchpad

  for (int i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read();
  }

  ds.reset_search();

  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  float TemperatureSum = tempRead / 16;

  return TemperatureSum;

}


Avete idea di quale possa essere il problema?

Grazie di cuore a tutti

nid69ita

#1
Oct 12, 2014, 01:46 pm Last Edit: Oct 12, 2014, 01:48 pm by nid69ita Reason: 1
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili

Cosa esattamente vedi su monitor seriale?
Perchè la frase "can't connect to exosite" non esiste nel tuo codice  :smiley-eek:
my name is IGOR, not AIGOR

Bambinz

Scusatemi se non mi sono presentato :)

La frase esatta è: "Error: Can't Open Connection to Exosite."
È ritornata dalla funzione writeread della libreria di exosite.

Bambinz

Up, qualcuno sa darmi una mano ? :)


leo72


Go Up