Show Posts
Pages: [1] 2
1  International / Français / Re: Arduino Uno + Shield GPRS + Carte SIM Free = ??? on: April 16, 2013, 03:21:33 pm
J'ai retrouvé le bout de code qui marche (je crois), il faut enlever la partie relay.
Je l'avait un peu optimisé mais je le trouve plus.
Seul inconvénient, en dessous de la température de consigne, tu reçois 1 sms/sec  smiley-twist .
2  International / Français / Re: Arduino Uno + Shield GPRS + Carte SIM Free = ??? on: April 16, 2013, 07:53:07 am
Volontier ^^ Tu utilise qu'elle GPRS ?

Moi j'ai celui la : http://www.evola.fr/product_info.php/shield-gprs-p-183

J'utilise la même que toi !
Je t'ai envoyé le code mais je suis pas sur que tu l'ai reçu... et je suis pas sur de t'avoir envoyé le bon smiley-roll
Je le mettrais ici ce soir pour être sur que tu l'as !
3  International / Français / Re: DS18B20 + COSM :~ on: April 12, 2013, 07:28:52 am
Bon, j'ai résolu une partie du problème... en changent de capteur  smiley-twist
J'y ai collé un DHT22, donc maintenant, j'ai bien la température qui s'affiche sur la console et sur Cosm mais par contre je n'ai pas de tracé de courbes...
Une erreur dans le script de Cosm  ?  smiley-evil
4  International / Français / Re: DS18B20 + COSM :~ on: April 12, 2013, 04:21:52 am
Oui le script basique de température qui tourne en boucle fonctionne très bien
5  International / Français / Re: DS18B20 + COSM :~ on: April 12, 2013, 03:14:09 am
Je vais essayer avec ça. Merci !
6  International / Français / DS18B20 + COSM :~ on: April 11, 2013, 06:14:39 pm
Bonsoir à tous.
Encore une fois je sollicite vos lumières pour le truc le plus con qu'il soit : enregistrer des variations de températures sur Cosm via une DS18B20

J'ai combiné un script de base de DS18B20 et le script que donne Cosm pour alimenter un feed, mais:
- la température n'est pas lue par l'Arduino (donc affiche -1000);
- la température est envoyée sur Cosm mais je n'ai pas de suivi dans le temps. -1000 est bien affiché mais pas de graphe;
- sur la console "Reading data from Cosm" reste sans réponse.

Je vous colle le code:
Code:
/**
 * Cosm Arduino sensor client example.
 *
 * This sketch demonstrates connecting an Arduino to Cosm (https://cosm.com),
 * using the new Arduino library to send and receive data.
 *
 * Requirements
 *   * Arduino with Ethernet shield or Arduino Ethernet (board must use the
 *     Wiznet Ethernet chipset)
 *   * Arduino software with version >= 1.0
 *   * An account at Cosm (https://cosm.com)
 *
 * Optional
 *   * An analog sensor connected to pin 2 (note we can still read a value from
 *     the pin without this)
 *
 * Created 8th January, 2013 using code written by Adrian McEwen with
 * modifications by Sam Mulube
 *
 * Full tutorial available here: https://cosm.com/docs/quickstart/arduino.html
 *
 * This code is in the public domain.
 */

#include <SPI.h>
#include <Ethernet.h>
#include <HttpClient.h>
#include <Cosm.h>
#include <OneWire.h>

#define API_KEY "--" // your Cosm API key
#define FEED_ID 124576 // your Cosm feed ID

// MAC address for your Ethernet shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

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

OneWire ds(sensorPin);

unsigned long lastConnectionTime = 0;                // last time we connected to Cosm
const unsigned long connectionInterval = 5000;      // delay between connecting to Cosm in milliseconds

// Initialize the Cosm library

// Define the string for our datastream ID
char sensorId[] = "Température";

CosmDatastream datastreams[] = {
  CosmDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT),
};

// Wrap the datastream into a feed
CosmFeed feed(FEED_ID, datastreams, 1 /* number of datastreams */);

EthernetClient client;
CosmClient cosmclient(client);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  Serial.println("Cosm Sensor Client Example");
  Serial.println("==========================");

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

  Serial.println("Network initialized");
  Serial.println();
}

void loop() {
  float temperature = getTemp();
  Serial.println(temperature);
  
  // main program loop
  if (millis() - lastConnectionTime > connectionInterval) {
    // read a value from the pin
    int sensorValue = temperature;
    // send it to Cosm
    sendData(sensorValue);
    // read the datastream back from Cosm
    getData();
    // update connection time so we wait before connecting again
    lastConnectionTime = millis();
  }
}

// send the supplied value to Cosm, printing some debug information as we go
void sendData(int sensorValue) {
  datastreams[0].setFloat(sensorValue);

  Serial.print("Read sensor value ");
  Serial.println(datastreams[0].getFloat());

  Serial.println("Uploading to Cosm");
  int ret = cosmclient.put(feed, API_KEY);
  Serial.print("PUT return code: ");
  Serial.println(ret);

  Serial.println();
}

// get the value of the datastream from Cosm, printing out the value we received
void getData() {
  Serial.println("Reading data from Cosm");

  int ret = cosmclient.get(feed, API_KEY);
  Serial.print("GET return code: ");
  Serial.println(ret);

  if (ret > 0) {
    Serial.print("Datastream is: ");
    Serial.println(feed[0]);

    Serial.print("Sensor value is: ");
    Serial.println(feed[0].getFloat());
  }

  Serial.println();
  
}

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

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

if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
Serial.println("problem");
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;

}

    

Arduino Uno R3 + Ethernet Shiel Arduino + Sonde DS18B20

Thank you !  smiley-kitty
7  International / Français / Re: Arduino Uno + Shield GPRS + Carte SIM Free = ??? on: April 11, 2013, 06:02:11 pm
Moi je n'arrive carrément pas à coder mon programme pour que mon gprs m'envoi un sms quand mon capteur LM35 dépasse 24 °C, si vous avez des idées ^^

J'y suis arrivé avec un capteur différent. Si tu veux je te file le code...
8  International / Français / Re: Arduino Uno + Shield GPRS + Carte SIM Free = ??? on: April 11, 2013, 06:00:24 pm
Bonsoir,

Savez vous si les cartes sim de chez Free sont verrouillées ou si il faut passer par d'autres commande (?)


J'ai une carte Free à 2€ et un sheild gprs seeedstudio vers 2.0.
La carte a été désactivé dans un téléphone. ( donc pas de lecture du code pin nécessaire dans le programme)
Le code pin

Envoi et réception de SMS sans problème.  (programme avec les commandes AT)
Pas con du tout de supprimer le code PIN, je vais essayer ça !
9  International / Français / Re: [Projet] Encore une autre station météo (et oui !) on: April 03, 2013, 04:06:40 pm
Je vais suivre ce topic de près !
(Je galère déjà avec le DHT22  smiley-cry )
10  International / Français / Re: GPRS - sms et accents on: February 28, 2013, 11:13:42 am
Je crois que je vais pas m’em...bêter, je vais laisser les fautes sur les sms reçus ! smiley-mr-green
Par contre est-ce que tu sais comment gérer la casse à la lecture des SMS reçus par l'Arduino ? (ex. on/On/ON, etc)
J'ai essayé avec
Code:
"on" | "On"
mais ça ne marche pas.
11  International / Le bar / Karma c'est pas un prénom.... on: February 24, 2013, 04:31:00 pm
Quel con !  smiley-grin
12  International / Français / Re: GPRS - sms et accents on: February 24, 2013, 04:28:47 pm
Si tu trouves, ça m’intéresse aussi !  smiley
13  International / Français / Re: Arduino Uno + Shield GPRS + Carte SIM Free = ??? on: February 24, 2013, 01:14:21 pm
J'en conclus que ça vient de ma carte.
Je teste pour le moment avec une autre, de toute façon pour le montage final il me faudra un autre abonnement.

Merci Karma pour ces commandes que je cherchais !
14  International / Français / Re: Arduino Uno + Shield GPRS + Carte SIM Free = ??? on: February 13, 2013, 03:47:36 pm
La diode clignote toutes les 3sec mais ne réagit pas quand j'appelle (ça réagit quand il y a la carte sim orange)
15  International / Français / Re: Arduino Uno + Shield GPRS + Carte SIM Free = ??? on: February 13, 2013, 03:41:56 pm
Quote
#include <SoftwareSerial.h> //Librairie utilisée pour communiquer avec le shield GSM/GPRS
#include <OneWire.h> // Librairie pour la sonde


SoftwareSerial mySerial(7, smiley-cool;
#define RELAY_PIN 4
String msg = String("");
int SmsContentFlag = 0;
int DS18B20_Pin = 10;
OneWire ds(DS18B20_Pin);

String SIM_PIN_CODE = String( "1706" );
String TEL_NUM = String( "615******" );

void setup()
 {
        Serial.begin(19200);
        Serial.println("*****************************");
        Serial.println("Debut initialisation");
        mySerial.begin(19200);  
        delay(100);        
        mySerial.println("ATZ");
        delay(1000);
        mySerial.println("AT+CSMINS=?");
        delay(1000);
        mySerial.println("AT+CSMINS=<");
        delay(1000);
        mySerial.println("AT+CSCA=\"+33695000695\"");
        delay(1000);
        mySerial.println("AT");  // Envoi d'une commande pour configuration du debit automatique              
        delay(1000);                  
        Serial.println("Liaison serie GSM etablie.");
        mySerial.println("AT+IPR=19200"); // Mise en mémoire du débit
        delay(1000);
        Serial.println("Debit etabli sur le module GSM.");
        mySerial.print("AT+CPIN=");        // Envoi du code PIN retourne ERREUR si il est déjà présent (ce qui n'est pas grave...)
        mySerial.println( SIM_PIN_CODE );
        delay(1000);
        Serial.println("Code PIN OK.");
        mySerial.println("AT+CMGF=1"); // GSM en mode texte
        Serial.println("Fin initialisation GPRS");
        Serial.println("*****************************");
        pinMode(RELAY_PIN, OUTPUT);
        Serial.println("Fin initialisation RELAY");
        Serial.println("*****************************");
 }

void loop()
{
    char SerialInByte;
    
    if(Serial.available())
       {
       mySerial.print((unsigned char)Serial.read());
       }  
    else  if(mySerial.available())
       {
       char SerialInByte;
       SerialInByte = (unsigned char)mySerial.read();  
       // Si le message se termine par un <CR> alors traiter le message
       if( SerialInByte == 13 )

          {
          // Stocke le caractère dans le buffer de message
          ProcessGprsMsg();
          }
        if( SerialInByte == 10 ){ }
        else

           {
           // Stocke le caractère dans la mémoire tampon réservé au message
           msg += String(SerialInByte);
           }
       }  
float temperature = getTemp();
Serial.println(temperature);

if (temperature < 1)
{
ProcessSMSFroid();
Serial.println("Relai fermé");
digitalWrite(RELAY_PIN, HIGH); //A verifier
}
}
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 = ds.read();
}

ds.reset_search();

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

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

return TemperatureSum;
}


//FONCTION QUI ENVOIE UN SMS EN CAS DE FROID DANS L'APPARTEMENT
void ProcessSMSFroid ()
{
   Serial.print("Envoi SMS Froid");
   mySerial.println("AT+CMGF=1"); //On passe les messages en mode text
   delay(100);
   mySerial.print( "AT+CMGS=\"+33615******\"" ); // Envoi du numero de telephone à joindre
   delay(100);
   mySerial.println("Temperature inferieure a 1 degre"); // Contenu du message
   delay(100);
   mySerial.println((char)26); // Envoi le code ASCII de Ctrl+z pour signaler la fin du message et l'envoi
   delay(100);
   mySerial.println();
   return;
}
 

// FONCTION QUI TRAITE LE SMS

void ProcessSms( String sms )
 {
 // Envoi le SMS sur le port console
 Serial.print( "Traitement du SMS [" );
 Serial.print( sms );
 Serial.println( "]" );
 
 // En fonction de l'ordre on effectue la commande vers la VERA simuler par l'envoi d'un SMS, permet aussi de tester la fonction d'envoi SMS
 if( sms.indexOf("on") >= 0 )
   {
   Serial.println( "Envoi repinse : chauffage allume" );
   //envoi du SMS de réponse
   mySerial.println("AT+CMGF=1"); //On passe les messages en mode text
   delay(100);
   mySerial.print( "AT+CMGS=\"+33" ); // Envoi du numero de telephone à joindre
   mySerial.print( TEL_NUM );
   mySerial.println("\"");
   delay(100);
   mySerial.println("Chauffage allume"); // Contenu du message
   delay(100);
   mySerial.println((char)26); // Envoi le code ASCII de Ctrl+z pour signaler la fin du message et l'envoi
   delay(100);
   mySerial.println();
   digitalWrite(RELAY_PIN, HIGH);
   return;
   }
 
 if( sms.indexOf("off") >= 0 )
   {
   Serial.println( "Envoi reponse : chauffage eteint" );
   //envoi du SMS de réponse
   mySerial.println("AT+CMGF=1"); //On passe les messages en mode text
   delay(100);
   mySerial.print( "AT+CMGS=\"+33" ); // Envoi du numero de telephone à joindre
   mySerial.print( TEL_NUM );
   mySerial.println("\"");
   delay(100);
   mySerial.println("Lumiere eteinte"); // Contenu du message
   delay(100);
   mySerial.println((char)26); // Envoi le code ASCII de Ctrl+z pour signaler la fin du message et l'envoi
   delay(100);
   mySerial.println();
   digitalWrite(RELAY_PIN, LOW);
   return;
   }
  
 if( sms.indexOf("temp") >= 0 )
   {
   float temperature = getTemp();
   Serial.println( "Envoi reponse : temperature" );
   //envoi du SMS de réponse
   mySerial.println("AT+CMGF=1"); //On passe les messages en mode text
   delay(100);
   mySerial.print( "AT+CMGS=\"+33" ); // Envoi du numero de telephone à joindre
   mySerial.print( TEL_NUM );
   mySerial.println("\"");
   delay(100);
   mySerial.print("Temperature interieure de "); // Contenu du message
   mySerial.print( temperature );
   mySerial.println(" degres");
   delay(100);
   mySerial.println((char)26); // Envoi le code ASCII de Ctrl+z pour signaler la fin du message et l'envoi
   delay(100);
   mySerial.println();
   return;
   }
  
   else
   {
   Serial.println( "Envoi reponse : Commande inconnue" );
   //envoi du SMS de réponse
   mySerial.println("AT+CMGF=1"); //On passe les messages en mode text
   delay(100);
   mySerial.print( "AT+CMGS=\"+33" ); // Envoi du numero de telephone à joindre
   mySerial.print( TEL_NUM );
   mySerial.println("\"");
   delay(100);
   mySerial.println("Commande inconnue"); // Contenu du message
   delay(100);
   mySerial.println((char)26); // Envoi le code ASCII de Ctrl+z pour signaler la fin du message et l'envoi
   delay(100);
   mySerial.println();
   return;
   }  
 }

 
 
// FONCTION QUI DEMANDE AU SHIELD GPRS D'UTILISER LE MODE TEXT POUR LES MESSAGES
//*******************************************************************************************

void GprsTextModeSMS()
 {
 mySerial.println( "AT+CMGF=1" );
 }

// FONCTION QUI LIT LA POSITION DU SMS

void GprsReadSmsStore( String SmsStorePos )
 {
 mySerial.print( "AT+CMGR=" );
 mySerial.println( SmsStorePos );
 }

// FONCTION QUI EFFACE LE CONTENU DE LA MEMOIRE TAMPON DES MESSAGES DU GPRS SHIELD

void ClearGprsMsg()
 {
 msg = "";
 }
 
 void ProcessGprsMsg()
 {
 // Le shield GPRS signale que sa connexion réseau mobile est établie
 if( msg.indexOf( "Call Ready" ) >= 0 )
  {
  Serial.println( "*** Le Shield GPRS est enregistre sur le reseau mobile ***" );
  // On passe les SMS en mode texte
  }
  
 // Message non sollicité quand un SMS arrive
 if( msg.indexOf( "+CMTI" ) >= 0 )
  {
  Serial.println( "*** SMS recu ***" );
  // Rechercher la position de la virgule dans le message complet (+CMTI: "SM",6)
  int iPos = msg.indexOf( "," );
  String SmsStorePos = msg.substring( iPos+1 );
  // Demande de lecture du SMS
  GprsReadSmsStore( SmsStorePos );
  // On efface le sms de la mémoire du module gsm pour ne pas le surcharger
  mySerial.print( "AT+CMGD=" );
  mySerial.println( SmsStorePos );
  }
  
 // Lecture du stockage SMS via l'UART (résultat de la requete GprsReadSmsStore)
 if( msg.indexOf( "+CMGR:" ) >= 0 )
  {
  // Le prochain message contiendra le contenu du SMS
  SmsContentFlag = 1;
  // Les ligne suivantes sont essentielle pour ne pas effacer le flag!
  ClearGprsMsg();
  return;
  }
 // le message +CMGR précédent indiquait que le message suivant du Shield GPRS  contient le corps du SMS
 if( SmsContentFlag == 1 )
  {
  Serial.println( "*** DEBUT DU SMS ***" );
  Serial.println( msg );
  Serial.println( "*** FIN DU SMS ***" );
  ProcessSms( msg );
  }

 // Toujours mettre le flag à 0
 ClearGprsMsg();
 SmsContentFlag = 0;
 }


Celui là je l'ai pas encore testé.
Sinon, je redémarre à chaque nouveau code/modif
Pages: [1] 2