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