Programme GSM M95 v2.0

Dependencies:   mbed

Fork of mbed_m95 by TeamLegrand

Committer:
mbedjf
Date:
Sun Mar 11 21:33:47 2018 +0000
Revision:
2:f3d64c53f369
Parent:
1:be115e3a98ae
Child:
3:41229ebb1467
Programme test m95 (jet N?3) - attention saisir le N? destinataire SMS en d?but de programme

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedjf 0:a2a2c45b4247 1 /* JF - Lycee Cabanis de Brive-la-Gaillarde - date : 20180304*/
mbedjf 0:a2a2c45b4247 2 /* Essai gsm modem M95 : envoi SMS */
mbedjf 0:a2a2c45b4247 3
mbedjf 0:a2a2c45b4247 4 #include "mbed.h"
mbedjf 0:a2a2c45b4247 5
mbedjf 0:a2a2c45b4247 6 void power_on(); // to turn on le modem gsm
mbedjf 0:a2a2c45b4247 7 void led1_blink(); // to blink led1
mbedjf 0:a2a2c45b4247 8 void reset(); // to reset gsm modem
mbedjf 1:be115e3a98ae 9 void init_gsm(); // to init gsm modem
mbedjf 1:be115e3a98ae 10 void data_gsm(); //to receive a reply from gsm
mbedjf 2:f3d64c53f369 11 void reset_buffer(); // to reset rx buffer
mbedjf 1:be115e3a98ae 12
mbedjf 0:a2a2c45b4247 13 DigitalOut led1(LED1);
mbedjf 0:a2a2c45b4247 14 DigitalOut led2(LED2);
mbedjf 0:a2a2c45b4247 15 DigitalOut led3(LED3);
mbedjf 0:a2a2c45b4247 16 DigitalOut led4(LED4);
mbedjf 0:a2a2c45b4247 17
mbedjf 0:a2a2c45b4247 18 DigitalOut bp_fire(p14);
mbedjf 0:a2a2c45b4247 19 DigitalOut pwrkey(p21);
mbedjf 0:a2a2c45b4247 20 DigitalOut emerg_off(p22);
mbedjf 0:a2a2c45b4247 21 DigitalIn status(p11);
mbedjf 0:a2a2c45b4247 22
mbedjf 0:a2a2c45b4247 23 Serial pc(USBTX, USBRX); // creation objet -> stream serial USB
mbedjf 0:a2a2c45b4247 24 Serial gsm(p9,p10); // creation objet -> stream serial uart p9 et p10
mbedjf 0:a2a2c45b4247 25
mbedjf 1:be115e3a98ae 26 char numero_destinataire[20]={"xxxxxxxxxx"};;
mbedjf 0:a2a2c45b4247 27 char message_transmis[100]={"Hello world ! Lycee Cabanis Brive SN2 !"};
mbedjf 1:be115e3a98ae 28 char code_pin[5]={"0000"};
mbedjf 1:be115e3a98ae 29 char reponse_gsm[256];
mbedjf 0:a2a2c45b4247 30 int element=0; //indice pour tableau
mbedjf 1:be115e3a98ae 31 int octet=0;
mbedjf 0:a2a2c45b4247 32
mbedjf 0:a2a2c45b4247 33 int main()
mbedjf 0:a2a2c45b4247 34 {
mbedjf 1:be115e3a98ae 35 //gsm.attach(&callback_rx);
mbedjf 0:a2a2c45b4247 36 //gsm.baud(9600); // vitesse uart gsm 9600 bauds
mbedjf 1:be115e3a98ae 37 //gsm.format(8,Serial::None,1); //Serial frame format
mbedjf 0:a2a2c45b4247 38 for (int i=0;i<20;i++) reponse_gsm[i]=0; // initialisation tableau réponses
mbedjf 0:a2a2c45b4247 39
mbedjf 0:a2a2c45b4247 40 pc.printf("Lycee cabanis - Brive-la-Gaillarde - date : 20180304");
mbedjf 0:a2a2c45b4247 41 pc.printf("\n\r>");
mbedjf 0:a2a2c45b4247 42 pc.printf("Essai gsm modem m95 : envoi SMS");
mbedjf 0:a2a2c45b4247 43 pc.printf("\n\r>");
mbedjf 0:a2a2c45b4247 44
mbedjf 0:a2a2c45b4247 45 init_gsm();
mbedjf 0:a2a2c45b4247 46 pc.printf("Appuyez sur ''bp enter'' pour envoi SMS");
mbedjf 0:a2a2c45b4247 47 pc.printf("\n\r>");
mbedjf 0:a2a2c45b4247 48
mbedjf 0:a2a2c45b4247 49 while (1) {
mbedjf 0:a2a2c45b4247 50
mbedjf 0:a2a2c45b4247 51 if(bp_fire==1){
mbedjf 0:a2a2c45b4247 52 // envoi message SMS au N° pré-saisi
mbedjf 0:a2a2c45b4247 53 gsm.printf("AT+CMGS=%s\r",numero_destinataire);
mbedjf 0:a2a2c45b4247 54 gsm.printf("%s",message_transmis);
mbedjf 0:a2a2c45b4247 55 gsm.putc(0x1A); // envoi ctrl+Z
mbedjf 0:a2a2c45b4247 56 //wait(30); // l'envoi du message SMS prends en 120 s maximum
mbedjf 0:a2a2c45b4247 57
mbedjf 0:a2a2c45b4247 58 pc.printf("AT+CMGS=%s\r",numero_destinataire);
mbedjf 0:a2a2c45b4247 59 pc.printf("\n\r>");
mbedjf 0:a2a2c45b4247 60 pc.printf("%s",message_transmis);
mbedjf 0:a2a2c45b4247 61 pc.putc(0x1A); // envoi ctrl+Z
mbedjf 0:a2a2c45b4247 62 pc.printf("\n\r>");
mbedjf 1:be115e3a98ae 63
mbedjf 1:be115e3a98ae 64 wait(15); // l'envoi du message SMS prends en 120 s maximum
mbedjf 0:a2a2c45b4247 65
mbedjf 1:be115e3a98ae 66 for (int i=0;i<20;i++) reponse_gsm[i]=0; // initialisation tableau réponses
mbedjf 1:be115e3a98ae 67 //reply_gsm(); // réponse du gsm
mbedjf 0:a2a2c45b4247 68
mbedjf 0:a2a2c45b4247 69 pc.printf("Appuyez sur ''bp_enter'' pour envoi SMS");
mbedjf 0:a2a2c45b4247 70 pc.printf("\n\r>");
mbedjf 0:a2a2c45b4247 71 }
mbedjf 0:a2a2c45b4247 72 }
mbedjf 0:a2a2c45b4247 73 }
mbedjf 0:a2a2c45b4247 74
mbedjf 0:a2a2c45b4247 75 // to turn on_off le modem gsm m95
mbedjf 1:be115e3a98ae 76 void power_on(){
mbedjf 0:a2a2c45b4247 77 pwrkey=1; // création impulsion turn on sur ligne pwrkey
mbedjf 1:be115e3a98ae 78 wait(3);
mbedjf 1:be115e3a98ae 79
mbedjf 1:be115e3a98ae 80 while(status==0); // attente démarrage modem m95
mbedjf 1:be115e3a98ae 81 led1_blink();
mbedjf 1:be115e3a98ae 82 led1=1;
mbedjf 2:f3d64c53f369 83 wait(1);
mbedjf 0:a2a2c45b4247 84 pwrkey=0;
mbedjf 0:a2a2c45b4247 85 }
mbedjf 0:a2a2c45b4247 86
mbedjf 1:be115e3a98ae 87 void power_off(){
mbedjf 1:be115e3a98ae 88 pwrkey=1; // création impulsion turn on sur ligne pwrkey
mbedjf 1:be115e3a98ae 89 wait(0.8);
mbedjf 1:be115e3a98ae 90 pwrkey=0;
mbedjf 1:be115e3a98ae 91 while(status==1);
mbedjf 1:be115e3a98ae 92 led1=0;
mbedjf 1:be115e3a98ae 93 }
mbedjf 1:be115e3a98ae 94
mbedjf 0:a2a2c45b4247 95 // to turn on_off le modem gsm m95
mbedjf 0:a2a2c45b4247 96 void reset(){
mbedjf 0:a2a2c45b4247 97 emerg_off=1; // création impulsion turn on sur ligne emerg_off
mbedjf 1:be115e3a98ae 98 wait(0.7);
mbedjf 0:a2a2c45b4247 99 emerg_off=0;
mbedjf 1:be115e3a98ae 100 wait(12);
mbedjf 0:a2a2c45b4247 101 }
mbedjf 0:a2a2c45b4247 102
mbedjf 0:a2a2c45b4247 103 // to blink led1
mbedjf 0:a2a2c45b4247 104 void led1_blink(){
mbedjf 0:a2a2c45b4247 105 //int i;
mbedjf 0:a2a2c45b4247 106 for(int i=0;i<3;i++)
mbedjf 0:a2a2c45b4247 107 {
mbedjf 0:a2a2c45b4247 108 led1=1;
mbedjf 0:a2a2c45b4247 109 wait(0.250);
mbedjf 0:a2a2c45b4247 110 led1=0;
mbedjf 0:a2a2c45b4247 111 wait(0.250);
mbedjf 0:a2a2c45b4247 112 }
mbedjf 0:a2a2c45b4247 113 }
mbedjf 1:be115e3a98ae 114 // Recevoir une réponse du gsm
mbedjf 1:be115e3a98ae 115 /*void callback_rx() {
mbedjf 1:be115e3a98ae 116 // Note: you need to actually read from the serial to clear the RX interrupt
mbedjf 1:be115e3a98ae 117 reponse_gsm[octet++]=gsm.getc());
mbedjf 1:be115e3a98ae 118 octet = octet++;
mbedjf 1:be115e3a98ae 119 }*/
mbedjf 1:be115e3a98ae 120 void data_gsm(){
mbedjf 1:be115e3a98ae 121 for (int i=0;i<255;i++) reponse_gsm[i]=0; // initialisation tableau réponses
mbedjf 1:be115e3a98ae 122 element=0;
mbedjf 1:be115e3a98ae 123 while (gsm.readable()){
mbedjf 1:be115e3a98ae 124 reponse_gsm[element]=gsm.getc();
mbedjf 1:be115e3a98ae 125 element++;
mbedjf 1:be115e3a98ae 126 }
mbedjf 1:be115e3a98ae 127 for(int i=0 ; i<element ; i++)pc.printf("%c",reponse_gsm[i]);
mbedjf 0:a2a2c45b4247 128 pc.printf("\n\r>");
mbedjf 1:be115e3a98ae 129 }
mbedjf 1:be115e3a98ae 130
mbedjf 1:be115e3a98ae 131 void reset_buffer(){
mbedjf 1:be115e3a98ae 132 while (gsm.readable()){
mbedjf 0:a2a2c45b4247 133 reponse_gsm[element]=gsm.getc();
mbedjf 0:a2a2c45b4247 134 element++;
mbedjf 0:a2a2c45b4247 135 }
mbedjf 1:be115e3a98ae 136 }
mbedjf 1:be115e3a98ae 137
mbedjf 0:a2a2c45b4247 138
mbedjf 1:be115e3a98ae 139 void init_gsm(){
mbedjf 1:be115e3a98ae 140 pc.printf("Patientez quelques instants : initialisation du modem gsm");
mbedjf 1:be115e3a98ae 141 pc.printf("\n\r>");
mbedjf 1:be115e3a98ae 142 wait(5); //tempo pour établissement tension alim. modem
mbedjf 1:be115e3a98ae 143 power_off(); // modem off
mbedjf 1:be115e3a98ae 144 pc.printf("Appuyez sur ''bp enter'' pour demarrer le modem gsm");
mbedjf 0:a2a2c45b4247 145 pc.printf("\n\r>");
mbedjf 1:be115e3a98ae 146 while(bp_fire==0);
mbedjf 1:be115e3a98ae 147
mbedjf 1:be115e3a98ae 148 /*led1=1;
mbedjf 1:be115e3a98ae 149 pwrkey=1;
mbedjf 1:be115e3a98ae 150 wait(5);
mbedjf 1:be115e3a98ae 151 pwrkey=0;*/
mbedjf 1:be115e3a98ae 152 //emerg_off=0;
mbedjf 1:be115e3a98ae 153 //reset(); // modem off (shutdowm)
mbedjf 1:be115e3a98ae 154 //wait(5);
mbedjf 1:be115e3a98ae 155 power_on(); // modem on
mbedjf 1:be115e3a98ae 156
mbedjf 1:be115e3a98ae 157 wait(10);
mbedjf 1:be115e3a98ae 158 //reply_gsm(5); // réponse du gsm;
mbedjf 1:be115e3a98ae 159 //reply_gsm(11); // réponse du gsm;
mbedjf 1:be115e3a98ae 160
mbedjf 1:be115e3a98ae 161 gsm.printf("AT\r"); // report erreur gsm
mbedjf 1:be115e3a98ae 162 data_gsm();
mbedjf 1:be115e3a98ae 163 wait(1);
mbedjf 1:be115e3a98ae 164 pc.printf("AT\r");
mbedjf 1:be115e3a98ae 165
mbedjf 1:be115e3a98ae 166 gsm.printf("AT?\r");
mbedjf 1:be115e3a98ae 167 pc.printf("AT?\r");
mbedjf 1:be115e3a98ae 168 data_gsm();
mbedjf 1:be115e3a98ae 169 gsm.printf("ATE0\r"); // pas d'echo vers le DTE pour les l'envoi des commandes
mbedjf 1:be115e3a98ae 170 wait(1);
mbedjf 1:be115e3a98ae 171 gsm.printf("ATE0?\r"); //
mbedjf 1:be115e3a98ae 172 pc.printf("ATE0?\r"); //
mbedjf 1:be115e3a98ae 173 data_gsm();
mbedjf 1:be115e3a98ae 174
mbedjf 2:f3d64c53f369 175 gsm.printf("AT+COPS=?\r"); // pour voir la Operator Selection
mbedjf 2:f3d64c53f369 176 wait(10); // 75s max. déterminé par le réseau
mbedjf 2:f3d64c53f369 177 pc.printf("AT+COPS?\r"); //
mbedjf 2:f3d64c53f369 178 data_gsm();
mbedjf 1:be115e3a98ae 179
mbedjf 1:be115e3a98ae 180
mbedjf 1:be115e3a98ae 181
mbedjf 2:f3d64c53f369 182 gsm.printf("AT+CSQ\r"); // Query the signal strength of current network
mbedjf 1:be115e3a98ae 183 wait(1);
mbedjf 2:f3d64c53f369 184 gsm.printf("AT+CSQ?\r"); //
mbedjf 2:f3d64c53f369 185 pc.printf("AT+CSQ?\r"); //
mbedjf 1:be115e3a98ae 186 data_gsm();
mbedjf 1:be115e3a98ae 187
mbedjf 1:be115e3a98ae 188
mbedjf 1:be115e3a98ae 189 gsm.printf("AT+CREG?\r"); // enregistrement du réseau
mbedjf 1:be115e3a98ae 190 wait(1);
mbedjf 2:f3d64c53f369 191 pc.printf("AT+CGREG?\r"); //
mbedjf 1:be115e3a98ae 192 data_gsm();
mbedjf 1:be115e3a98ae 193
mbedjf 1:be115e3a98ae 194 gsm.printf("AT+COPS?\r"); // enregistrement du réseau
mbedjf 1:be115e3a98ae 195 wait(1);
mbedjf 1:be115e3a98ae 196 pc.printf("AT+COPS?\r"); //
mbedjf 1:be115e3a98ae 197 data_gsm();
mbedjf 1:be115e3a98ae 198
mbedjf 1:be115e3a98ae 199 gsm.printf("AT+IPR=9600\r"); // vitesse transmission fixée (recommandé)
mbedjf 1:be115e3a98ae 200 wait(1);
mbedjf 1:be115e3a98ae 201 gsm.printf("AT+IPR?\r"); // vitesse transmission fixée (recommandé)
mbedjf 1:be115e3a98ae 202 pc.printf("AT+IPR?\r"); // vitesse transmission fixée (recommandé)
mbedjf 1:be115e3a98ae 203 data_gsm();
mbedjf 1:be115e3a98ae 204
mbedjf 1:be115e3a98ae 205 gsm.printf("AT&W\r"); // stokage vitesse
mbedjf 1:be115e3a98ae 206 wait(1);
mbedjf 1:be115e3a98ae 207 gsm.printf("AT&W?\r"); // stokage vitesse
mbedjf 1:be115e3a98ae 208 pc.printf("AT&W?\r"); // stokage vitesse
mbedjf 1:be115e3a98ae 209 data_gsm();
mbedjf 1:be115e3a98ae 210
mbedjf 1:be115e3a98ae 211 gsm.printf("AT+CMGF=1\r"); // sélection du format du message SMS
mbedjf 1:be115e3a98ae 212 wait(2);
mbedjf 1:be115e3a98ae 213 gsm.printf("AT+CMGF?"); // sélection du format du message SMS
mbedjf 1:be115e3a98ae 214 pc.printf("AT+CMGF?"); // sélection du format du message SMS
mbedjf 1:be115e3a98ae 215 data_gsm();
mbedjf 1:be115e3a98ae 216
mbedjf 1:be115e3a98ae 217 gsm.printf("AT+CMEE=2\r"); // report erreur gsm
mbedjf 1:be115e3a98ae 218 wait(1);
mbedjf 1:be115e3a98ae 219 gsm.printf("AT+CMEE?"); // report erreur gsm
mbedjf 1:be115e3a98ae 220 pc.printf("AT+CMEE?"); // report erreur gsm
mbedjf 1:be115e3a98ae 221 data_gsm();
mbedjf 1:be115e3a98ae 222
mbedjf 1:be115e3a98ae 223 gsm.printf("AT+CPIN=%s\r",code_pin); // stockage du PIN
mbedjf 1:be115e3a98ae 224 wait(6);
mbedjf 1:be115e3a98ae 225 gsm.printf("AT+CPIN?"); // stockage du PIN
mbedjf 1:be115e3a98ae 226 pc.printf("AT+CPIN?"); // stockage du PIN
mbedjf 1:be115e3a98ae 227 data_gsm();
mbedjf 1:be115e3a98ae 228
mbedjf 1:be115e3a98ae 229
mbedjf 1:be115e3a98ae 230
mbedjf 1:be115e3a98ae 231 gsm.printf("AT+CMGF=1\r"); // sélection du format du message SMS
mbedjf 1:be115e3a98ae 232 wait(2);
mbedjf 1:be115e3a98ae 233 gsm.printf("AT+CMGF?"); // sélection du format du message SMS
mbedjf 1:be115e3a98ae 234 pc.printf("AT+CMGF?"); // sélection du format du message SMS
mbedjf 1:be115e3a98ae 235 data_gsm();
mbedjf 1:be115e3a98ae 236
mbedjf 1:be115e3a98ae 237
mbedjf 0:a2a2c45b4247 238 }