Dunque praticamente faccio delle letture di potenza ogni minuto, a partire da questo progetto: Open Energy Monitor
poi mi connetto ad internet tramite Wishield ed invio le letture su un mio sito. Fin quì tutto in ordine, adesso però vorrei inserire i dati di configurazione della connessione in una sd card a caricarli da li!
#include <SD.h> //SD card functions
#include <WiServer.h>
#include "EmonLib.h" // Include Emon Library
#include <MemoryFree.h>
#define DEBUG 1
// Definizione Parametri Rete Wireless
#define WIRELESS_MODE_INFRA 1 // Infrastrutturata (basata su Access Point)
#define WIRELESS_MODE_ADHOC 2 // Ad-hoc (senza Access Point)
....VARIABILI PER LA CONNESSIONE....
// Richiesta GET
GETrequest sentDataTo (site_ip, 80, "www.riggivale.eu", "/em/api/post?apikey=ba87740e20a5fed755441c429636bbde&json={power:567.89,import:515.53}");
// Variabile segna tempo per attendere per nuovi invii di dati
long updateSearch = 0;
const int chipSelect = 4;
EnergyMonitor emon1,emon2;
// Inizializzazione Scheda
void setup() {
// Inizializzo porta seriale
Serial.begin (9600);
WiServer.enableVerboseMode (true);
Serial.print("freeMemory()=");
Serial.println(freeMemory());
WiServer.init (NULL);
Serial.print("freeMemory()=");
Serial.println(freeMemory());
emon1.current(4, 30); // Current: input pin, calibration.
emon2.current(5, 30); // Current: input pin, calibration.
}
// Programma Principale
void loop() {
// Se passato periodo di attesa esecuzione ricerca
if ( (millis() - updateSearch) >= 60000 ) {
Serial.print("freeMemory()=");
Serial.println(freeMemory());
double Correnterms = emon1.calcIrms(1480); // Calculate Irms
double Correnterms2 = emon2.calcIrms(1480); // Calculate Irms
if (!WiServer.connection_up()){ //Se disconnesso tenta nuova connession prima di inviare i dati
WiServer.init (NULL);
}
// Calcolo dell'url per l'invio della potenza importata ed esportata
char percorso[150];
double p =Correnterms*230.0;
double p2 =Correnterms2*230.0;
char tmp[10],tmp2[10];
dtostrf(p,1,2,tmp);
dtostrf(p2,1,2,tmp2);
sprintf(percorso,"/em/api/post?apikey=ba87740e20a5fed755441c429636bbde&json={power:%s,import:%s}",tmp,tmp2);
Serial.println(percorso);
sentDataTo.URL = percorso;
// Inizializzazione richiesta GET (parametro indica funzione a cui verra' passata la risposta)
sentDataTo.setReturnFunc (NULL);
if (WiServer.connection_up()){ // solo se connesso
// Invio dei dati
sentDataTo.submit();
}
Serial.print("freeMemory()=");
Serial.println(freeMemory());
// Aggiorno tempo di riavvio (attensa di 1 minuto)
updateSearch = millis();
}
// Avvio WiServer
WiServer.server_task();
// Attesa
delay(10);
}
La semplice inclusione della SD.h si mangia tutta la memoria rimasta e al momento di inviare i dati ne mangia ancora di più e l'arduino si resetta