Programme GSM M95 v2.0

Dependencies:   mbed

Fork of mbed_m95 by TeamLegrand

Committer:
Quentin19
Date:
Fri Mar 16 07:55:36 2018 +0000
Revision:
3:41229ebb1467
Parent:
2:f3d64c53f369
Programme d'envoi de sms pour module GSM M95

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