Go Down

Topic: Invio dati a cloud Exosite tramite UDP [RISOLTO] (Read 241 times) previous topic - next topic

ZioWally

Oct 23, 2015, 06:27 pm Last Edit: Oct 23, 2015, 06:29 pm by ZioWally
Ciao a tutti,
per poter monitore dei ponti radio ho creato uno sketch che legge temperature e tensioni e le invia via ethernet via UDP, tutto ok, nessun problema.
Quando ho deciso che volevo pubblicare i dati per avere grafici ho provato ad usare EMONCMS con buon successo.
Peccato però che ogni tot invio di dati, la scheda ethernet si bloccava e dovevo resettare per ripartire.
Grazie a questo prezioso forum ho trovato molti suggerimenti che però non hanno risolto il problema che spesso con socket TCP si ripresenta.
Ho quindi deciso di cercare un cloud free che accettasse connessioni UDP oltre che TCP.
Ne ho trovato solo uno, Exosite che ha una sua libreria per Arduino ma solo TCP.
Guardando però un esempio per python ho trovato indirizzo e porta per UDP.
Allego lo sketch da me creato, che invia dei numeri casuali alla dashboard di esempio già disponibile su Exosite.
Ho cercato in tutti i modi di ridurre al minimo la ram che impegna, se ci sono suggerimenti per migliorarlo, ben vengano!
Code: [Select]

#include <SPI.h>
#include <Ethernet.h>     
#include <EthernetUdp.h>
#include <PString.h> // purtroppo funziona con ide fino a 1.0.5

byte mac[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
const IPAddress ip      (0, 0, 0, 0);
const IPAddress gateway (0, 0, 0, 0);
const IPAddress subnet  (0, 0, 0, 0);
const IPAddress ddns    (0, 0, 0, 0);

const unsigned int ExositePort = 18494; // porta UDP di Exosite

EthernetUDP ExositeUdp;

const char cik[] = "0000000000000000000000000000000000000000";
const char valore1[] = "a0"; // alias dell'esempio di dashborad di Exosite
const char valore2[] = "d4";
const char valore3[] = "d2";

void setup()
{
  pinMode(53, OUTPUT); // pin 53 perchè uso Arduino MEGA
  Serial.begin(9600);
  while (!Serial);
  Ethernet.begin(mac, ip, ddns, gateway, subnet);
}

void loop()
{
  Invio();
  delay (10000); // è il tempo minimo di aggiornamento dashboard del sito
}

void Invio()
{
  Serial.println(F("Apro la comunicazione..."));
  byte Numero1 = random( 0,10);
  byte Numero2 = random( 11,20);
  byte Numero3 = random( 21,30);
 
  char DataBuffer[100];
  PString Data(DataBuffer, sizeof(DataBuffer));
  Data.begin();
  Data.print(DataBuffer);
  Data.print(F("cik="));
  Data.print(cik);
  Data.print(F("&"));
  Data.print(valore1);
  Data.print(F("="));
  Data.print(Numero1);
  Data.print(F("&"));
  Data.print(valore2);
  Data.print(F("="));
  Data.print(Numero2);
  Data.print(F("&"));
  Data.print(valore3);
  Data.print(F("="));
  Data.print(Numero3);
 
  Serial.print(F("Valore inviato: "));
  Serial.print(Numero1);
         
  if (ExositeUdp.begin(53) == 1)
    Serial.println(F("OK!"));
  else
    Serial.println(F("Fallita!"));
   
  ExositeUdp.beginPacket("udp.exosite.com", ExositePort); // URL del sito
  //ExositeUdp.beginPacket("m2.exosite.com", ExositePort);  // URL alternativo
  delay(250);
  ExositeUdp.print(Data);
  ExositeUdp.endPacket();
  ExositeUdp.stop();
}



PS:
Se qualcuno conosce altri siti che accettano connessioni in UDP, direi di postarle qui di seguito.

Go Up