Bonsoir à tous,
je viens vers vous pour un petit soucis dans un projet.
J'utilise une SIM900, avec la bibliothèque softwareserial et des commandes AT, et j'aimerai avoir l'information si le shield en question est bien connecté au réseau (il n'est pas visible car dans un boitier, je ne peux donc pas voir directement l'état de la led correspondante).
Dans mon programme, et comme dans l'exemple trouver sur le net, j'utilise la fonction SIM900.available() comme condition pour lire les SMS reçu par le shield. Je pensais pouvoir utiliser cette notion de "available", comme indication si la carte est connectée ou non. Malheureusement, en utilisant la fonction ainsi (exemple sans les fonctions utiles à mon projet) :
les deux messages alternent sans arrêt.
J'ai cherché d'autres commandes pouvant me renvoyer une information caractéristique de la présence ou non du réseau (niveau du signal : CSQ, ou autre CREG) mais la valeur renvoyé ne change pas que la carte soit activée ou non.
Avez vous une idée ? j'utilise mal toutes ces fonctions qui devraient pouvoir m'aider ?
Je précise que je suis débutant, c'est mon premier projet.
L'envoi et la récéption de SMS marche sans soucis.
Tu devrais essayer ceci. Crée une variable booléenne (appelons la 'flag') que tu mets à true lorsque le 'available' est positif et qui restera à true pendant une certaine durée, disons une minute. Ensuite tu la remets à false.
Et tu fais le test à la fois sur le available et sur cette variable, avant d'afficher ton message.
if(SIM900.available()>0){
lcd.setCursor(0,1);
lcd.print("Réseau OK");
flag = true;
chrono = millis() ;
}
else if (flag != true)
{
lcd.setCursor(0,1);
lcd.print("Pas de réseau");
}
}
if (millis() - chrono > 60000) {
flag = false;
chrono = millis() ;
}
Et chrono doit être définie en variable globale de toute unsigned long
tester AT+COPS? et sa réponse selon que le téléphone est connecté ou pas a un réseau cellulaire
AT+COPS=? renvoie la liste des opérateurs disponibles
AT+COPS? le nom de l'opérateur connecté
AT+CREG? le second chiffre devrait te dire si tu est ou pas sur un réseau et même indiquer (chiffre 5) si tu es en roaming
Voilà avec et sans carte sim Free Mobile(Roaming -> Orange)
[tt]Avec carte FreeMobile/ Roaming Orange
AT+CREG?
+CREG: 0,[b]5[/b]
OK
AT+COPS?
+COPS: 0,0,[b]"Orange F"[/b]
OK
Sans carte SIM
AT+CREG?
+CREG: 0,[b]0[/b]
OK
AT+COPS?
+COPS: 0
OK
Je crois que je maîtrise surtout mal les commandes AT comme je le sentais.
Je vais approfondir avec CREG !
tu peux juste m'indiquer la ligne de code qui corresponds stp ?
car je me mélange entre AT+CREG=? AT+CREG? ... ou plus simple, connais-tu un tuto pour que je trouve enfin des exemples pour code arduino et que je comprenne la syntaxe. Je trouve bcp d'exemple à partir d'un logiciel (AT Commander tester) que je n'ai pas du tout approché. A tord peut être ?
J'oubliais, quelle variable utilises tu pour extraire ces infos ?
Les lignes reproduites ci-dessus n'ont pas été obtenues avec un code Arduino mais en envoyant directement les commandes AT sur un module SIM800 'à la main' avec un terminal
C'était juste pour montrer l'existence de ces commandes et leur réponses.
Pour tester les commandes découvertes en parcourant la doc des modules SIM, le plus rapide consiste à les envoyer 'à la main' !!
Sous Arduino j'utilise plutôt des librairies , comme GSMSim qui possède d'ailleurs des commandes telles que :
gsm.isRegistered() , qui utilise AT+CREG?
gsm.operatorName(), qui utilise AT+COPS?
On les voit à l'oeuvre dans l'exemple GSMSim_Module_Info
Une bonne librairie de commandes AT analyse les réponses , dont les 'OK' , elle ne se contente pas de balancer des commandes AT en espérant que ça marche à tout les coups !
Si on veut se passer de librairie on peut toujours étudier le code des fonctions intéressantes et s'en inspirer
Je pensais pouvoir me passer de librairie car elle ne m'était pas utile pour les fonctions de bases que j'utilise (envoi et réception de SMS). Et comme tu l'as dis, j'ai tenter de reprendre ces fonctions en ajoutant les commandes AT trouver dans le document que tu mentionne (la fonction CPAS aussi). Mais je n'avais pas de résultat probant (sans doute par manque de maitrise de la syntaxe).
Je vais me concentrer sur la libraire GSMsim que je ne connaissais pas (la libraire "GSM" plus classique n'ayant pas fonctionné).