Programme GSM M95 v2.0
Dependencies: mbed
Fork of mbed_m95 by
main.cpp@2:f3d64c53f369, 2018-03-11 (annotated)
- 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?
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 |
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 | } |