J'ai l'impression que Rx et TX sont inversés non?
SoftwareSerial Serial_SIM900(2, 3); // RX, TX
Et sur ta photo on a le pin 2 en Tx et le pin 3 en RX
Remarque ça doit être normal car RX sur RX et TX sur TX ça doit pas fonctionner ![]()
J'ai l'impression que Rx et TX sont inversés non?
SoftwareSerial Serial_SIM900(2, 3); // RX, TX
Et sur ta photo on a le pin 2 en Tx et le pin 3 en RX
Remarque ça doit être normal car RX sur RX et TX sur TX ça doit pas fonctionner ![]()
Voici le datasheet du module, si je lis bien je ne pense pas me tromper de connexions, SI?
Je comprends la remarque mais quand j'inverse dans le programme (3,2) au lieu de (2,3) plus aucunes commande ne sefait donc je suppose que c'est dans le bon ordre.
DS_IM120417009_IComSat.pdf (566 KB)
On y est! ça fonctionne, je ne voit pas vraiment ce qui a changé mais ça fonctionne. Voici le programme et le port série qui va avec. Un très grand merci pour votre aide.
#define DEBUG // Mode debogage
#include <SoftwareSerial.h>
SoftwareSerial SIM900(2,3);
void setup()
{
SIM900.begin(2400);
Serial.begin(9600);
Serial.println("configuration par defaut");
SIM900.println("ATZ"); // Pour remettre les configuration par defaut
GetSIM900();
Serial.println("affichage du numero des erreurs");
SIM900.println("AT+CMEE=1"); // Pour afficher le numero de l'erreur
GetSIM900();
Serial.println("Code PIN");
SIM900.println("AT+CPIN=1234"); // Code PIN
GetSIM900();
delay(20000); // Connexion au réseau
#ifdef DEBUG
Serial.println("Operateur");
SIM900.println("AT+COPS?"); // Opérateur
GetSIM900();
delay(15000);
//SET center number server needed for free provider
Serial.println("envoi de la commande: AT+CSCA=\"+32475161616\"");
SIM900.print("AT+CSCA=\"+32475161616\"\r");
GetSIM900();
delay(15000); // Connexion au réseau
Serial.println("Etat de la connexion au reseau :");
Serial.println("La connexion est etablie si +CREG: 0,1");
SIM900.println("AT+CREG?"); // Connexion au réseau
GetSIM900();
#endif
Serial.println("Activation du mode SMS");
SIM900.println("AT+CMGF=1"); // Activation du mode SMS
GetSIM900();
Serial.println("Envoi du numero de telephone");
SIM900.println("AT+CMGS=\"+32471469547\""); // Envoi du numéro de téléphone
GetSIM900();
Serial.println("Corps du message");
SIM900.println("Bonjour"); // Corps du message
Serial.println("CTR+Z");
SIM900.write(0x1A); // CTR+Z
GetSIM900();
}
void loop()
{
}
void GetSIM900()
{
delay(2000);
if(SIM900.available())
{
Serial.print("\n");
delay(3000);
while(SIM900.available())
{
Serial.print((char)SIM900.read()); // On vide la mémoire tampon du SIM900
}
Serial.print("\n");
}
}
configuration par defaut
ATZ
OK
affichage du numero des erreurs
AT+CMEE=1
OK
Code PIN
AT+CPIN=1234
OK
Operateur
AT+COPS?
+COPS: 0,0, »PROXIMUS »
OK
envoi de la commande: AT+CSCA= »+32475161616?
AT+CSCA= »+32475161616?
OK
Etat de la connexion au reseau :
La connexion est etablie si +CREG: 0,1
AT+CREG?
+CREG: 0,1
OK
Activation du mode SMS
AT+CMGF=1
OK
Envoi du numero de telephone
AT+CMGS= »+32471469547?
Corps du message
CTR+Z
Bonjour
+CMGS: 16
OK
Bonsoir,
Intéressant tout ça, j'ai du mal moi aussi avec mon shield TiniSine.
Déjà pas moyen de trouver un tél desimlocké pour effacer le code pin 1234 de ma carte free.
Il n'existerait pas une petite routine capable de faire ça ???
Merci
Cdlt JP
teste ca via la console en mettant un code qui retourne les infos
AT+CPIN?
>>> +CPIN: SIM PIN
>>> OK
AT+CPIN="9546"//code pin de la carte
>>>; OK
AT+CLCK="SC",0,"9546" // retire pin code
>>> OK
AT+CPIN?
>>> +CPIN: READY
Déjà merci pour la rapidité de la réponse.
Je suis un bleu pour tout ce qui sort de l'ordinaire.
Ca semble correspondre à la manip à faire avec le tél ?
Quel est le rôle des triple chevrons dans ce code ?
Il ne s'agit pas d'un triple décalage à droite !?
![]()
Donc je fais un copié coller de ces sept lignes ou bien le OK correspond -t-il à un CR ?
Une toute petite explication m'évitera de faire une c...nnerie ! Et sera didactique.
Merci !
JP
les >>>OK c'est la réponse du modem ![]()
tu rentre le code via l'ide suivant et tu tapes les commandes via la console
#include <SoftwareSerial.h> // For Arduino 1.0
SoftwareSerial mySerial(7, 8); // For Arduino 1.0
void setup()
{
mySerial.begin(9600); // the GPRS baud rate
Serial.begin(9600); // the GPRS baud rate
}
void loop()
{
if(Serial.available())
{
char c = Serial.read();
mySerial.print(c);
}
else if(mySerial.available())
{
char c = mySerial.read();
Serial.print(c);
}
}
Hyper sympa merci.
Je n'ai aucune expérience dans ce domaine, je viens donc de recevoir mon salaire. ![]()
Il se trouve qu'en ce moment j'ai des problèmes d'IDE. Impossible de lancer (sur Mac El Capitan) une version supérieure à la 1.0.6. Mais c'est un autre sujet pour lequel j'ai aussi ouvert un fil. C'est pour dire qu'il n'y a peut-être pas que mon ignorance en cause.
J'ai eu un résultat avec le code proposé par "Petrus6248" alors que le code proposé par TinYSine (le shield) ne donne rien.
Au niveau de la led bleue actuellement avec ton code elle clignote à la cadence d'un flash à la seconde ou un peu moins 7 ou 800ms. Mais à la 1ere question "AT+CPIN?" il ne se passe rien, aucune réponse. A la seconde non plus. Après j'arrête pour éviter de bloquer la carte si ce n'est pas déjà fait. De toutes façons je devrais avoir une réponse à la première au moins.
Pourquoi "Petrus6248" a-t-il mis SIM900.begin(2400); à la ligne 8 au lieu de 9600 ?
jp
J'ai repris les élements vus plus haut et rajouté la fonction " void GetSIM900() " en fin de programme.
Avec ce code j'ai des réponses :
#include <SoftwareSerial.h> // For Arduino 1.0
SoftwareSerial SIM900(2, 3); // For Arduino 1.0
void setup()
{
SIM900.begin(9600); // the GPRS baud rate
Serial.begin(9600); // the GPRS baud rate
}
void loop()
{
if(Serial.available())
{
char c = Serial.read();
SIM900.print(c);
}
else if(SIM900.available())
{
char c = SIM900.read();
Serial.print(c);
}
}
//---------------------------------------------------------------------
void GetSIM900()
{
delay(2000);
if(SIM900.available())
{
Serial.print("\n");
delay(3000);
while(SIM900.available())
{
Serial.print((char)SIM900.read()); // On vide la mémoire tampon du SIM900
}
Serial.print("\n");
}
}
Aux dernières nouvelles : à la question AT+CPIN+? ça répond +CME ERROR: 3.
Mais AT+CPIN="1234" repond quand même OK
Juste avant d'avoir relancé le programme complet ça répondait :>>> +CPIN: SIM PIN et OK
Puis AT+CPIN="1234" OK
Donc je n'ose pas rentrer : AT+CLCK="SC",0,"1234" La carte est peut-être bloquée maintenant.
Au programme complet les réponses sont les suivantes avec ce paradoxe :
AT+CPIN=1234 répond OK et +CMS ERROR: 311 (SIM PIN required) Donc le sms ne part pas. ![]()
configuration par defaut
ATZ
OK
affichage du numero des erreurs
AT+CMEE=1
OK
Code PIN
AT+CPIN=1234
OK
Activation du mode SMS
ÿÿÿÿÿÿÿÿAT+CMGF=1
OK
Envoi du numero de telephone
AT+CMGS="+33123456789"
+CMS ERROR: 311
Corps du message
CTR+Z
Bonjour
jpjcb66:
Aux dernières nouvelles : à la question AT+CPIN+?
![]()
Franchement , JP
t'a même pas un vieux phone "tout operateurs/demsilocké" qui traine dans un coin, juste pour passer en "no-pin" ?
si tu regarde bien les codes
SoftwareSerial mySerial(7, 8);
SoftwareSerial SIM900(2, 3);
seul change le numéro des pins
ton
void GetSIM900()
n'est appelé nul part dans le loop
tu tapes AT+CPIN+? au lieu de taper AT+CPIN?
donc fais attention, et regardes si retour chariot et nouvelle ligne sont bien sélectionnés dans la console, en bas
AT+CPIN+? , C'est une faute de frappe à la recopie, mes yeux commençaient à se croiser les bras....
Dans la console je ne me suis pas trompé.
En effet il n'y a pas d'appel à cette routine dans ce sketch ; comme quoi j'ai rien compris ! Mais ça vient...
Je vais essayer d'aller chez Free leur demander de m'enlever le code et peut-être débloquer la SIM car pour répondre à notre ami Artouste le seul phone désimlocké est mon ex-iPhone 3 et il n'en veut pas de cette p..... de carte. Maintenant tout les smartphones sont en micro SIM.
Bon, free m'a enlevé le code PIN ; une chance ils avaient un phone
![]()
Donc je vais pouvoir m'amuser sans craintes.
Bon, avec le sketch joint qui est l'exemple fourni par le vendeur du shield TinySine
ça fonctionne dans le sens Paris - Province (Smartphone -> Arduino).
Pour l'instant je ne reçois pas le message envoyé une fois dans le setup du sketch vers mon tel. (dont j'ai modifié le n° pour ne pas être la proie eu égard à mon niveau de toutes les blondes, brunes et autres rousses du forum). Le moniteur série me signale juste "SMS sent OK" mais je ne reçois rien.
J'avoue avoir un peu de mal avec ces commandes, mais j'y travaille.
@+ Bon WE
#include "SIM900.h"
#include <SoftwareSerial.h>
//If not used, is better to exclude the HTTP library,
//for RAM saving.
//If your sketch reboots itself proprably you have finished,
//your memory available.
//#include "inetGSM.h"
//If you want to use the Arduino functions to manage SMS, uncomment the lines below.
#include "sms.h"
SMSGSM sms;
//To change pins for Software Serial, use the two lines in GSM.cpp.
//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.
//Simple sketch to send and receive SMS.
int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];
char sms_position;
char phone_number[20]; // array for the phone number string
char sms_text[100];
int i;
//------------------------------------------------------
void setup()
{
//Serial connection.
Serial.begin(9600);
Serial.println("GSM Shield testing.");
//Start configuration of shield with baudrate.
//For http uses is raccomanded to use 4800 or slower.
if (gsm.begin(4800))
{
Serial.println("\nstatus=READY");
started=true;
}
else
Serial.println("\nstatus=IDLE");
if(started)
{
//Enable this two lines if you want to send an SMS.
if (sms.SendSMS("+33xxxxxxxxx", "Arduino SMS"))
Serial.println("\nSMS sent OK");
//if NO SPACE ,you need delte SMS from position 1 to position 20
//please enable this four lines
//for(i=1;i<=20;i++)
//{
//sms.DeleteSMS(i);
//}
}
}
//------------------------------------------------------
void loop()
{
if(started)
{
//Read if there are messages on SIM card and print them.
sms_position=sms.IsSMSPresent(SMS_UNREAD);
if (sms_position)
{
// read new SMS
Serial.print("SMS postion:");
Serial.println(sms_position,DEC);
sms.GetSMS(sms_position, phone_number, sms_text, 100);
// now we have phone number string in phone_num
Serial.println(phone_number);
// and SMS text in sms_text
Serial.println(sms_text);
}
else
{
Serial.println("NO NEW SMS,WAITTING");
}
delay(1000);
}
} //-----------------------------------------------------
Bonsoir,
Au grand dam de Madame j'ai passé le WE à tout essayer, lire les forums etc... Je ne m'en sors pas.
Le module semble fonctionner avec le sketch du post précédent. Mais que dans un sens.
Je reçois bien les SMS depuis mon phone.
Si un gentil spécialiste pouvait avoir l'amabilité fraternelle de se pencher sur mon triste sort et m'accorde un peu de son temps ça serait top. Dieu le lui rendra..., peut-être !
L'alim de labo indique une conso max d'environ 148,33mA (peak) et 64mA moyenne alors que je lis partout que le module tète plus de l'Amp en pointe.
J'ai essayé les différents sketchs de la lib GSM de l'IDE. Aucune ne fonctionne, il faudrait tout modifier pour inclure la "SIM900.h" et ce qui va avec.
Ci-dessous un extrait du moniteur série, ça semble correct dans les deux sens mais à l'émission je ne sais pas où ça va. Je vois juste passer le pic de conso. On voit que la carte a déjà stocké 35 sms en réception.
Merci par avance.
JP
Code: [Select]
GSM Shield testing.
status=READY
SMS sent OK
SMS postion:-2
NO NEW SMS,WAITTING
NO NEW SMS,WAITTING
NO NEW SMS,WAITTING
SMS postion:35
+33612xxxxxx
JPJ rame lamentablement.
NO NEW SMS,WAITTING
NO NEW SMS,WAITTING
NO NEW SMS,WAITTING
L'enquéquette progresse.
Ma carte Free ne fonctionne que dans un sens en terme de sms.
Je suis donc retourné chez free ; la fille n'a pas pu avec cette carte m'envoyer un sms ni en envoyer un sur un autre tel de chez eux.
Donc on va m'envoyer une nouvelle carte.
A suivre....
RESOLU en ce qui me concerne. La carte SIM était bien défectueuse.
Merci pour votre aide.
jpjcb66:
RESOLU en ce qui me concerne. La carte SIM était bien défectueuse.Merci pour votre aide.
salut JP
[HUM]
en gros finalement, c'etait juste un probleme d'alternat qui n'alternait pas ? 8)
Ou de free qui ne freetait plus... ![]()