Programme GSM M95 v2.0
Dependencies: mbed
Fork of mbed_m95 by
main.cpp@3:41229ebb1467, 2018-03-16 (annotated)
- 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?
User | Revision | Line number | New 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 |