Come posso assegnare ip statico alla ethernet schield che manda dati a Xively?

ciao ragazzi eccomi nuovamente qui per un problema che non riesco proprio a risolvere... ho provato a cercare sul forum e pure su google ma... non riesco a risolvere questo problema. Utilizzo arduino Mega 2560, una Ethernet Schield, leggo un segnale analogico dalla porta A2 e lo spedisco correttamente a Xively... utilizzando lo sketch dell'apposita libreria ufficiale che mi permette di fare questo lavoro... il mio problema sta nel fatto che lo sketch fa inmodo che alla Ethernet shield venga assegnato un ip automaticamente e a me questo non va bene in quanto mi serve poter avere un indirizzo fisso alla scheda per una duplice utilità: la prima devo raggiungere sucessivamente una pagina dove visualizzero anche nella mia rete i valori in tempo reale del sensore e secondariamente vorrei poi poter raggiungere la scheda da remoto... fuori dalla rete domestica e questo è possibile sino a quando il routter o la scheda non vengono riavviati... in quanto poi l'ip viene cambiato...

Un'ulteriore domanda... c'è qualche sketch d'esempio dove io posso mettere le credenziali, no-ip per esempio per avere un DDNS direttamente da arduino? in modo da avere la scheda sempre raggiungibile dal web?

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

// MAC address for your Ethernet shield
byte mac[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };

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

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

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

EthernetClient client;
XivelyClient xivelyclient(client);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  
  Serial.println("Starting single datastream upload to Xively...");
  Serial.println();

  while (Ethernet.begin(mac) != 1)
    {
    Serial.println("Error getting IP address via DHCP, trying again...");
    delay(15000);
  }
}

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);
}

p.s mi ero scordato di dire che ho gia provato a modificare il programma inserendo manualmente il la parte per poter assegnare l'ip manualmente in questo modo:

byte mac[] = {
.....
....
. ...
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);
.....
...
..

ma il la scheda prende comunque l'ip in automatico e se ne frega dell'imposizione che gli sto dando... mi sfugge qualcosa... illuminatemiii :slight_smile:

elimina l'include httpclient.h che l'acquisizione dell'IP la fa li dentro

killrob:
elimina l'include httpclient.h che l'acquisizione dell'IP la fa li dentro

Grazie Killrob, basta solo fare questo e aggiungere quindi le istruzioni per l'assegnazione manuale dell'ip che ho riportato precedentemente?

killrob:
elimina l'include httpclient.h che l'acquisizione dell'IP la fa li dentro

ho provato ma purtroppo da questi errori...

C:\Program Files\Arduino\libraries\xively\XivelyClient.cpp: In member function 'int XivelyClient::put(XivelyFeed&, const char*)':
C:\Program Files\Arduino\libraries\xively\XivelyClient.cpp:12: error: 'HttpClient' was not declared in this scope
C:\Program Files\Arduino\libraries\xively\XivelyClient.cpp:12: error: expected `;' before 'http'
C:\Program Files\Arduino\libraries\xively\XivelyClient.cpp:15: error: 'http' was not declared in this scope
C:\Program Files\Arduino\libraries\xively\XivelyClient.cpp: In member function 'int XivelyClient::get(XivelyFeed&, const char*)':
C:\Program Files\Arduino\libraries\xively\XivelyClient.cpp:74: error: 'HttpClient' was not declared in this scope
C:\Program Files\Arduino\libraries\xively\XivelyClient.cpp:74: error: expected `;' before 'http'
C:\Program Files\Arduino\libraries\xively\XivelyClient.cpp:77: error: 'http' was not declared in this scope
C:\Program Files\Arduino\libraries\xively\XivelyClient.cpp:182: error: 'delay' was not declared in this scope

a quanto pare"#include <Xively.h>" utilizza l'include che ho levato... come posso fare?

devi allora studiarti la httpclient.h per eliminare la parte dove fa l'acquisizione dell'IP