Cosm et SD librairie

Bonjour

J'ai développé un sketch pour datalogger avec report sur COSM, cela fonctionne correctement.
Je souhaite également garder une copie des mesures sur une carte SD en local avec horodatage.
J'ai inclus la librairie du DS1307 ......pas de pb cela fonctionne.

Mais dès que je veux insérer la librairie SD plus rien cela bloque, aucun message sur le port série.

Quelqu'un a t il un idée?????

Ma config: (Arduino uno + shield ethernet avec SD + Module RTC de soon...)

#include <SPI.h>
#include <Ethernet.h>
#include <HttpClient.h>
#include <EmonLib.h>
#include <Cosm.h>
#include <Wire.h>
#include "RTClib.h"
#include <SD.h>

EnergyMonitor ct1, ct2; // Create two instances

// MAC address for your Ethernet shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Initialisation de l'adresse IP locale de mon serveur WEB Arduino que j'ai choisie
byte ip[] = { 192,168,1, 125 };

// Your Cosm key to let you upload data
char cosmKey[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

// 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 sensorId1[] = "Courant_H_CH";
char sensorId2[] = "Courant_CH";
char sensorId3[] = "P_total_HP";
char sensorId4[] = "P_total_HC";
char bufferId[] = "Puissance_instantanee";
CosmDatastream datastreams[] = {
CosmDatastream(sensorId1, strlen(sensorId1), DATASTREAM_FLOAT),
CosmDatastream(sensorId2, strlen(sensorId2), DATASTREAM_FLOAT),
CosmDatastream(sensorId3, strlen(sensorId3), DATASTREAM_FLOAT),
CosmDatastream(sensorId4, strlen(sensorId4), DATASTREAM_FLOAT),
CosmDatastream(bufferId, strlen(bufferId), DATASTREAM_FLOAT),
};
// Finally, wrap the datastreams into a feed
CosmFeed feed(xxxxxx, datastreams, 5 /* number of datastreams */);

//Déclaration des variables Emon
double Irms1 =0;
double Irms2 =0;
double IPh1 =0;
double IPh2 =0;
double Php =0; //indice compteur de départ heure pleine
double Phc =0; //indice compteur de départ heure creuse
double Pinst =0;
double reel;
int val; // gestion heure creuse heure pleine

EthernetClient client;
CosmClient cosmclient(client);

RTC_DS1307 RTC;

const int chipSelect = 4;

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.print("Initializing SD card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(10, OUTPUT);

// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");

Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(DATE, TIME));
}
DateTime now = RTC.now();
Serial.print("Start Cosm le:...");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" a ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

// Initialisation de la connexion Ethernet
Ethernet.begin(mac, ip);
{
ct1.currentTX(1, 10); // CT channel 1, calibration.pin 0
ct2.currentTX(2, 10); // CT channel 2, calibration.pin 1
}
}
void loop() {

Irms1 = ct1.calcIrms(10000); // Calculate RMS current 1
Irms2 = ct2.calcIrms(10000); // Calculate RMS current 2
IPh1=(Irms110);
IPh2=(Irms2
10);
Pinst=(((IPh1+IPh2)*230)/1000);
Php=Php+(Pinst/60);
Phc=Phc+(Pinst/60);

//Tansfert des valeurs dans les datastreams
datastreams[0].setFloat(IPh1);
datastreams[1].setFloat(IPh2);
datastreams[2].setFloat(Php);
datastreams[3].setFloat(Phc);
datastreams[4].setFloat(Pinst);

Serial.print("I voie 1: ");
Serial.print(datastreams[0].getFloat());
Serial.println(" A");

Serial.print("I voie 2 : ");
Serial.print(datastreams[1].getFloat());
Serial.println(" A");

Serial.print("Puissance instantanee : ");
Serial.print(datastreams[2].getFloat());
Serial.println(" kW");

Serial.print("Puissance HP : ");
Serial.print(datastreams[3].getFloat());
Serial.println(" kW");

Serial.print("Puissance HC : ");
Serial.print(datastreams[4].getFloat());
Serial.println(" kW");

Serial.println("Transfert vers Cosm");
int ret = cosmclient.put(feed, cosmKey);
Serial.print("cosmclient.put returned ");
Serial.println(ret);

Serial.println();
delay(60000);
}


Berny

  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;

si tu a un probleme avec ta SD tu quitte ton setup, tous le code sous le return ne sera pas exécute, je pense que ton problème viens de la !

Bonjour peuch

J'ai suivi ton conseil, mais cela ne change rien toujours rien sur la com serie ni sur le transfert de donnée vers COSM.

tous fonctionne mais des que j’insère la librairie SD plus rien, et pourtant cette librairie fonctionne avec d'autre sketch.

Y a t il un autre bout de code pour enregistrer sur la SD sans passer part cette librairie SD de IDE?

Berny

met ton code dans les balises # , s'est plus facile a lire :wink:

y vas falloir mettre du serialprint pour essayer de savoir ou sa plante !
du coup ton problème m’intéresse , car j'ai la même appli ,et je comptais faire aussi un stockage de données sur COSM,

A priori c'est lors de l'initialisation de la SD qu'il y a une "incompatibilité" avec la librairie de COSM.

Si je retire l'initialisation de la SD (donc plus d'écriture sur la SD), j'ai bien mes valeurs qui s'affiche mais je n'ai plus aucun message texte ( Serial.print ("xxxxxx")) qui s'affiche sur le port série , les données sont a priori transmissent a COSM mais le retour (-4)

Je pense qu'il doit y avoir un pb entre la librairie de SD et celle de COSM.

Est il possible de voir le contenu de chaque librairie afin de pouvoir analysé e leurs fonctionnement?

Berny

le contenu des librairies est facilement éditable
elles se trouvent dans le dossier librairie de l'ide arduino

les fichiers sont des *.cpp *.h

A priori la librairie SD de IDE fait appel à des éléments de la librairie SDfat, je vais chercher une config avec de la Sd avec la librairie SDfat.

Malgré plusieurs essais avec la lib SDfat, j'ai toujours le même problème (blocage rien sur la com série ni sur le COSM) des que j’insère la lib SD ou la SDfat).

La solution COSM me parait bien pour une visu simple à cours termes mais difficile pour une exploitation sur plusieurs année.

Donc, je pense retenir par ordre de priorité sur une solution de stockage donnée sur SD + avec un accès FTP (ou autre) au fichier de la SD et éventuellement une visu html si j'ai assez de place pour sketch sur mon uno.

Est ce possible?

Quelqu’un sait il comment faire pour accéder en FTP au fichier de la SD à partir d'un navigateur?

Bonjour

Et oui de retour avec mon PB

Je n'ai toujours pas pu résoudre le fait que lorsque j'ajoute la SD libraire dans mon programme cela provoque un dysfonctionnement
Sans la SD lib j'ai bien les commentaires texte qui apparaissent sur la liaison série mais avec lib SD les commentaire disparaisses et l'horodage ne fonctionne plus correctement mais les données sont envoyées quand même à COSM

Quelqu'un peut il tester mon sketch et me dire si il fonctionne sur sa config
ma config Arduion uno (r3) + shield ethernet avec microSD + shield RTC soonlab avec SD(non utilisé)

Je n'ai toujours pas trouver de solution non plus pour récupérer en FTP un fichier stocker sur la SD....

merci pour votre aide

Berny

Cosm_2604_A_no_ok.ino (4.05 KB)