arduino gsm

ADOU
mar, 03/12/2019 - 15:44
bonjour
j'ai un problème a réaliser un code qui permet de déclencher arrosage a travers un smartphone.
voila le code qui permet de connaitre l'etat du sol a travers gsm .
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);
//int activer = 1; // ordre d'envoyer SMS
int val;
int l=13;
int i=0;
int secCount = 0;
int humideCount = 0;
int tropHumideCount = 0;
const int MAX_SMS_SENT = 2;
void setup()
{
pinMode(13, OUTPUT);
mySerial.begin(19200);
Serial.begin(19200);
delay(500);
}
void loop()
{
val=analogRead(A0);
String etat;
Serial.print ("valeur est:");
Serial.println(val);
delay(100);
if (val <=400){
etat="sec";
while(secCount < MAX_SMS_SENT){
Serial.print ("\n secCount est : ");
Serial.println(secCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"numero\"");
delay(100);
mySerial.println("Alerte le sol est sec: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
secCount++;
}
}
if(val>400 && val<700){
etat="humide";
while(humideCount < MAX_SMS_SENT){
Serial.print ("\n humideCount est : ");
Serial.println(humideCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"numero\"");
delay(100);
mySerial.println("Alerte le sol est humide: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
humideCount++;
}
digitalWrite(13,LOW);
Serial.print("sol est");
Serial. println(etat);
}
if(val >700){
etat="trop";
while(tropHumideCount < MAX_SMS_SENT){
Serial.print ("\n tropHumideCount est : ");
Serial.println(tropHumideCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"numero \"");
delay(100);
mySerial.println("Alerte le sol est trop humide: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
tropHumideCount++;
}
digitalWrite(13,LOW);
Serial.print("sol est");
Serial. println(etat);
}
delay(1000);
}
je voudrais ajouter le code qui permet de déclencher l'arrosager via gsm
Walter
mar, 03/12/2019 - 19:49
Ba tu fais le contraire tu regarde si tu as reçu un SMS en provenance de ton smartphone.
A priori avec la commande CNMI ?
ADOU
mer, 03/13/2019 - 12:14
Bonjour walter .
je ne comprend pas ce que vous expliquez
Walter
mer, 03/13/2019 - 22:21
simplement que ton programme envois un sms avec la commande "AT+CMGF", donc la tu veux recevoir un sms, donc tu utilise la commande correspondante à priori CNMI.
C'est bien ce que tu veux faire recevoir un SMS sur ton smartphone pour t'avertir que le sol est trop sec et envoyé un SMS de ce même smartphone pour déclencher l'arrosage.
Je ne vois pas ce qui te pose un problème en fait?
Que veux tu faire exactement?
Quel commande de ton module GSM te pose un problème.
ADOU
jeu, 03/14/2019 - 08:58
bonjour walter
ok j'ai compris.
j'ai puis faire les deux programmes mais ils sont indépendant.
objectif du code est déclencher l'arrosage a travers le téléphone et le faire sans téléphone
comment les faire fonctionner ensemble ?ces là que je suis bloque depuis hier nuit
voila les deux code
//////////////////////////////////connaître l'etat du sol via gsm//////////////////////////////////////////
val=analogRead(A0);
String etat;
Serial.print ("valeur est:");
Serial.println(val);
delay(100);
if (val <=400){
etat="sec";
while(secCount < MAX_SMS_SENT){
Serial.print ("\n secCount est : ");
Serial.println(secCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"90110401\"");
delay(100);
mySerial.println("Alerte le sol est sec: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
secCount++;
}
}
if(val>400 && val<700){
etat="humide";
while(humideCount < MAX_SMS_SENT){
Serial.print ("\n humideCount est : ");
Serial.println(humideCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"90110401\"");
delay(100);
mySerial.println("Alerte le sol est humide: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
humideCount++;
}
digitalWrite(13,LOW);
Serial.print("sol est");
Serial. println(etat);
}
if(val >700){
etat="trop";
while(tropHumideCount < MAX_SMS_SENT){
Serial.print ("\n tropHumideCount est : ");
Serial.println(tropHumideCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"90110401\"");
delay(100);
mySerial.println("Alerte le sol est trop humide: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
tropHumideCount++;
}
digitalWrite(13,LOW);
Serial.print("sol est");
Serial. println(etat);
}
delay(1000);
////////////////////////////////declencher l'arrossage via le smarphone /////////////////////////////////////////
#include <SoftwareSerial.h> //software serial library for serial communication b/w arduino & GSM
SoftwareSerial mySerial(7, 8);//connect Tx pin of GSM to pin 7of arduino && Rx pin of GSM to pin no 8of arduino
int led = 13;
String message;
void setup()
{
mySerial.begin(19200); // Setting the baud rate of GSM Module
Serial.begin(19200); // Setting the baud rate of Serial Monitor (Arduino)
delay(100);
mySerial.print ("ATE0r");
//Réponse();
mySerial.print ("ATr");
//Réponse();
mySerial.print ("AT + CMGF = 1r");
//Réponse();
mySerial.print ("AT + CNMI = 1,2,0,0,0r");
//Réponse();
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
}
void loop()
{
if (mySerial.available()>0){
message = mySerial.readString();
}
if(message.indexOf("ON") > -1){
Serial.println("LED ON");
digitalWrite(led,HIGH);
}
else if(message.indexOf("OFF") > -1){
Serial.println("LED OFF");
digitalWrite(led,LOW);
}
delay(10);
//////////////////// j'ai rassembler les deux codes qui n'arrive pas à fonctionner///////////////////////////
#include <SoftwareSerial.h> //software serial library for serial communication b/w arduino & GSM
SoftwareSerial mySerial(7, 8);//TX=7,rx=8
int val;
int l=13;
int i=0;
int secCount = 0;
int humideCount = 0;
int tropHumideCount = 0;
const int MAX_SMS_SENT = 2;
String message;
void setup() {
pinMode(13, OUTPUT);
mySerial.begin(19200);
Serial.begin(19200);
delay(100);
mySerial.print ("ATE0r");
//Réponse();
mySerial.print ("ATr");
//Réponse();
mySerial.print ("AT + CMGF = 1r");
//Réponse();
mySerial.print ("AT + CNMI = 1,2,0,0,0r");
//Réponse();
//pinMode(led,OUTPUT);
digitalWrite(13,LOW);
}
void loop() {
if (mySerial.available()>0){
message = mySerial.readString();
}
if(message.indexOf("ON") > -1){
Serial.println("LED ON");
digitalWrite(l,HIGH);
}
else if(message.indexOf("OFF") > -1){
Serial.println("LED OFF");
digitalWrite(l,LOW);
}
delay(10);
val=analogRead(A0);
String etat;
Serial.print ("valeur est:");
Serial.println(val);
delay(100);
if (val <=400){
etat="sec";
while(secCount < MAX_SMS_SENT){
Serial.print ("\n secCount est : ");
Serial.println(secCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"90110401\"");
delay(100);
mySerial.println("Alerte le sol est sec: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
secCount++;
}
}
if(val>400 && val<700){
etat="humide";
while(humideCount < MAX_SMS_SENT){
Serial.print ("\n humideCount est : ");
Serial.println(humideCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"90110401\"");
delay(100);
mySerial.println("Alerte le sol est humide: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
humideCount++;
}
digitalWrite(13,LOW);
Serial.print("sol est");
Serial. println(etat);
}
if(val >700){
etat="trop";
while(tropHumideCount < MAX_SMS_SENT){
Serial.print ("\n tropHumideCount est : ");
Serial.println(tropHumideCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"90110401\"");
delay(100);
mySerial.println("Alerte le sol est trop humide: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
tropHumideCount++;
}
digitalWrite(13,LOW);
Serial.print("sol est");
Serial. println(etat);
}
delay(1000);
}
MERCI D'AVNCE
Walter
jeu, 03/14/2019 - 10:51
Ok, je ne sais pas trop comment te répondre, ca fait un moment que tu es sur le forum et que tu code sur arduino.
Donc peut être que je m'imagine des choses et que c'est un simple oubli.
Mais as tu bien compris comment fonctionne l'arduino et à quoi servent les fonctions setup et loop.
Si ce n'est pas le cas, il faudrait que tu reprenne des cours ou tutorial sur l'arduino avant d'aller plus loin.
Ton erreur viens que tu fait des actions dans le code d'initialisation de ton arduino.
La fonction "setup" est appelée une seule fois au début de l'activation de l'arduino.
La fonction loop est appelé après "setup" en boucle tant que l'arduino est alimentée.
Donc en gros, dans la fonction "setup" mieux vaut ne pas avoir une partie de ton algo, mais uniquement l'initialisation du hardware de l'arduino.
ADOU
jeu, 03/14/2019 - 17:00
BONJOUR Manoé.
Manoé j'ai pas dit que walter me donne le code. j'ai un problème au niveau de mon code j'essai de trouver l'erreur .tout ce que vous avez dit j'ai compris.mais le programme ne marche toujours pas
Walter
jeu, 03/14/2019 - 17:23
Malheureusement ADOU, non si ton programme ne marche pas c'est que tu n'a pas compris ce que j'ai écrit rapidement et que Manoé a décrit plus en détail.
Je t'ai précisément dit pourquoi ton programme ne marche pas.
Je pense que te donner la ligne précise de ton erreur et les changements a effectuer, n'est pas dans ton intérêt.
Tu ne peux pas développer ce type de programme avec si peu de connaissance.
Tu dois dans un premier temps parfaire ta connaissance de l'envirronement même si tu dois rendre ton projet dans un temps limité.
Dans le cadre de ton projet à tu fait ou t'a ton demander une analyse, type UML.
Notamment le diagramme d'activité ou un équivalent?
Lorsque l'on aborde un sujet complexe ou que l'on maîtrise peu, on gagne beaucoup de temps à faire ce genre de diagramme, pour au moins avoir une idée claire de ce que doit faire le programme.
Normalement tu as toutes les informations pour fusionner correctement tes deux programmes.
Si tu as des questions précises n'hésites pas.
ADOU
jeu, 03/14/2019 - 17:40
bonsoir walter
j'ai pas fais analyse UML(si possible de l'expliquez svp).
je vais organiser le programme et poster
ADOU
jeu, 03/14/2019 - 17:59
REBONSOIR
WALTER ou es on doit mettre les commandes AT dans void loop?
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);
int val;
int l=13;
String message;
String etat;
int i=0;
int secCount = 0;
int humideCount = 0;
int tropHumideCount = 0;
const int MAX_SMS_SENT = 2;
void setup()
{
pinMode(13, OUTPUT);
mySerial.begin(19200);
Serial.begin(19200);
delay(500);
mySerial.print ("ATE0r");
mySerial.print ("ATr");
mySerial.print ("AT + CMGF = 1r");
mySerial.print ("AT + CNMI = 1,2,0,0,0r");
}
void loop(){
mySerial.print ("ATE0r");
mySerial.print ("ATr");
mySerial.print ("AT + CMGF = 1r");
mySerial.print ("AT + CNMI = 1,2,0,0,0r");
if (mySerial.available()>0){
message = mySerial.readString();
}
if(message.indexOf("ON") > -1){
Serial.println("LED ON");
digitalWrite(l,HIGH);
}
else if(message.indexOf("OFF") > -1){
Serial.println("LED OFF");
digitalWrite(l,LOW);
}
delay(10);
val=analogRead(A0);
// String etat;
Serial.print ("valeur est:");
Serial.println(val);
delay(100);
if (val <=400){
etat="sec";
while(secCount < MAX_SMS_SENT){
Serial.print ("\n secCount est : ");
Serial.println(secCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"90110401\"");
delay(100);
mySerial.println("Alerte le sol est sec: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
secCount++;
}
}
if(val>400 && val<700){
etat="humide";
while(humideCount < MAX_SMS_SENT){
Serial.print ("\n humideCount est : ");
Serial.println(humideCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"90110401\"");
delay(100);
mySerial.println("Alerte le sol est humide: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
humideCount++;
}
digitalWrite(13,LOW);
Serial.print("sol est");
Serial. println(etat);
}
if(val >700){
etat="trop";
while(tropHumideCount < MAX_SMS_SENT){
Serial.print ("\n tropHumideCount est : ");
Serial.println(tropHumideCount);
digitalWrite(13,HIGH);
//Pour envoyer un sms sous forme de texte
mySerial.print("AT+CMGF=1\r");
delay(100);
//Numero de telephone du destinataire
mySerial.println("AT + CMGS = \"90110401\"");
delay(100);
mySerial.println("Alerte le sol est trop humide: ");
delay(100);
mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
delay(100);
mySerial.println("c'est fait.");
tropHumideCount++;
}
digitalWrite(13,LOW);
Serial.print("sol est");
Serial. println(etat);
}
delay(1000);
}
ADOU
jeu, 03/14/2019 - 18:52
Merci Manoé
j'utilise le sim900
ADOU
jeu, 03/14/2019 - 19:02
merci j'ai changer le sim800 en sim900
ADOU
jeu, 03/14/2019 - 19:06
j'ai deja cette library dans arduino
Walter
jeu, 03/14/2019 - 19:31
Si tu mets en commentaire le code d'envois de SMS, cela fonctionne?
De façon général j'aurais tendance à te conseiller de couper ton code en fonction, voir mieux en objet.
tu as pas mal de commande AT en double, ton code gagnerait en lisibilité
Si tu as la librairie, pourquoi tu ne l'utilise pas, plutôt que de t'embêter à passer les commandes AT à la main?
Walter
mer, 03/20/2019 - 20:23
Du coup tu t'en es sortis ADOU?
Walter
ven, 03/22/2019 - 12:15
Oui je sais, c'est pourquoi je l'ai relancé, car personnellement je ne suis pas sûre d'essayer de l'aider, si il y n'a aucun retour :)