Programme GSM M95 v2.0

Dependencies:   mbed

Fork of mbed_m95 by TeamLegrand

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?

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 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 }