v3.0

Dependencies:   MODSERIAL mbed

Committer:
Quentin19
Date:
Wed Jun 06 06:09:22 2018 +0000
Revision:
0:c9055116ebbd
Progamme final GSM Quectel M95

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Quentin19 0:c9055116ebbd 1 #include "mbed.h"
Quentin19 0:c9055116ebbd 2 #include "MODSERIAL.h"
Quentin19 0:c9055116ebbd 3 #include "MACROS.h"
Quentin19 0:c9055116ebbd 4 #include <string>
Quentin19 0:c9055116ebbd 5
Quentin19 0:c9055116ebbd 6 char position[16]={"45.1234,1.12345"};
Quentin19 0:c9055116ebbd 7 char reponse_gsm[256];
Quentin19 0:c9055116ebbd 8 int element=0;
Quentin19 0:c9055116ebbd 9
Quentin19 0:c9055116ebbd 10 Serial pc(USBTX,USBRX);
Quentin19 0:c9055116ebbd 11 MODSERIAL gsm(p9,p10);
Quentin19 0:c9055116ebbd 12
Quentin19 0:c9055116ebbd 13 DigitalOut pwrkey(p21);
Quentin19 0:c9055116ebbd 14 DigitalOut emerg_off(p22);
Quentin19 0:c9055116ebbd 15 DigitalIn status(p11);
Quentin19 0:c9055116ebbd 16
Quentin19 0:c9055116ebbd 17 void reception();
Quentin19 0:c9055116ebbd 18 void clear_pc(void);
Quentin19 0:c9055116ebbd 19 void clear_buffer(void);
Quentin19 0:c9055116ebbd 20 void power_on();
Quentin19 0:c9055116ebbd 21 void init_gsm();
Quentin19 0:c9055116ebbd 22 void data_gsm();
Quentin19 0:c9055116ebbd 23
Quentin19 0:c9055116ebbd 24 int main() {
Quentin19 0:c9055116ebbd 25
Quentin19 0:c9055116ebbd 26 for (int i=0;i<20;i++) reponse_gsm[i]=0; //initialisation tableau réponse
Quentin19 0:c9055116ebbd 27
Quentin19 0:c9055116ebbd 28 gsm.baud(115200);
Quentin19 0:c9055116ebbd 29 pc.baud(115200);
Quentin19 0:c9055116ebbd 30
Quentin19 0:c9055116ebbd 31 clear_buffer();
Quentin19 0:c9055116ebbd 32 pc.printf("Le buffer serie est vide\r\n");
Quentin19 0:c9055116ebbd 33 wait(2);
Quentin19 0:c9055116ebbd 34 clear_pc();
Quentin19 0:c9055116ebbd 35 pc.printf("Le buffer pc est vide\r\n");
Quentin19 0:c9055116ebbd 36
Quentin19 0:c9055116ebbd 37 init_gsm();
Quentin19 0:c9055116ebbd 38 clear_buffer();
Quentin19 0:c9055116ebbd 39 while(1){
Quentin19 0:c9055116ebbd 40
Quentin19 0:c9055116ebbd 41 reception();
Quentin19 0:c9055116ebbd 42 wait(5);
Quentin19 0:c9055116ebbd 43 }
Quentin19 0:c9055116ebbd 44
Quentin19 0:c9055116ebbd 45 }
Quentin19 0:c9055116ebbd 46
Quentin19 0:c9055116ebbd 47
Quentin19 0:c9055116ebbd 48 void init_gsm(){
Quentin19 0:c9055116ebbd 49
Quentin19 0:c9055116ebbd 50 power_on();
Quentin19 0:c9055116ebbd 51 wait(2);
Quentin19 0:c9055116ebbd 52
Quentin19 0:c9055116ebbd 53 pc.printf("=======================\r\n");
Quentin19 0:c9055116ebbd 54 pc.printf("Configuration du module\r\n");
Quentin19 0:c9055116ebbd 55 pc.printf("=======================\r\n");
Quentin19 0:c9055116ebbd 56
Quentin19 0:c9055116ebbd 57 gsm.printf("AT\r");
Quentin19 0:c9055116ebbd 58 wait(0.3);
Quentin19 0:c9055116ebbd 59 pc.printf("AT\r\n");
Quentin19 0:c9055116ebbd 60 data_gsm();
Quentin19 0:c9055116ebbd 61 gsm.printf("AT+CPIN=1234\r"); // je rentre le code pin
Quentin19 0:c9055116ebbd 62 wait(5);
Quentin19 0:c9055116ebbd 63 pc.printf("AT+CPIN=1234\r\n");
Quentin19 0:c9055116ebbd 64 data_gsm();
Quentin19 0:c9055116ebbd 65 gsm.printf("ATE0\r"); // pas d'echo vers le DTE pour les l'envoi des commandes
Quentin19 0:c9055116ebbd 66 wait(0.3);
Quentin19 0:c9055116ebbd 67 gsm.printf("AT+CMGF=1\r"); // je passe en mode texte
Quentin19 0:c9055116ebbd 68 wait(0.3);
Quentin19 0:c9055116ebbd 69 gsm.printf("AT+CNMI=2,1,0,0,0\r");
Quentin19 0:c9055116ebbd 70 wait(0.3);
Quentin19 0:c9055116ebbd 71 gsm.printf("AT+CMGD=1,4\r");
Quentin19 0:c9055116ebbd 72 wait(0.3);
Quentin19 0:c9055116ebbd 73 }
Quentin19 0:c9055116ebbd 74
Quentin19 0:c9055116ebbd 75 void data_gsm(){
Quentin19 0:c9055116ebbd 76 for(int i=0;i<255;i++) reponse_gsm[i]=0;
Quentin19 0:c9055116ebbd 77 element=0;
Quentin19 0:c9055116ebbd 78 while(gsm.readable()){
Quentin19 0:c9055116ebbd 79 reponse_gsm[element]=gsm.getc();
Quentin19 0:c9055116ebbd 80 element++;
Quentin19 0:c9055116ebbd 81 }
Quentin19 0:c9055116ebbd 82 for(int i=0; i<element; i++)pc.printf("%c",reponse_gsm[i]);
Quentin19 0:c9055116ebbd 83 pc.printf("\n\r");
Quentin19 0:c9055116ebbd 84
Quentin19 0:c9055116ebbd 85 }
Quentin19 0:c9055116ebbd 86
Quentin19 0:c9055116ebbd 87 void power_on(){
Quentin19 0:c9055116ebbd 88 pwrkey=1;
Quentin19 0:c9055116ebbd 89 wait(3);
Quentin19 0:c9055116ebbd 90 while(status==0);
Quentin19 0:c9055116ebbd 91 wait(1);
Quentin19 0:c9055116ebbd 92 pwrkey=0;
Quentin19 0:c9055116ebbd 93 pc.printf("\n | Module connected | \r\n");
Quentin19 0:c9055116ebbd 94 }
Quentin19 0:c9055116ebbd 95
Quentin19 0:c9055116ebbd 96 void clear_buffer(){
Quentin19 0:c9055116ebbd 97 char char1;
Quentin19 0:c9055116ebbd 98 while(gsm.readable()){
Quentin19 0:c9055116ebbd 99 char1 = gsm.getc();
Quentin19 0:c9055116ebbd 100 }
Quentin19 0:c9055116ebbd 101 return;
Quentin19 0:c9055116ebbd 102 }
Quentin19 0:c9055116ebbd 103
Quentin19 0:c9055116ebbd 104 void clear_pc(){
Quentin19 0:c9055116ebbd 105 char char1;
Quentin19 0:c9055116ebbd 106 while(pc.readable()){
Quentin19 0:c9055116ebbd 107 char1 = pc.getc();
Quentin19 0:c9055116ebbd 108 pc.printf("Le buffer pc est vide\r\n");
Quentin19 0:c9055116ebbd 109 }
Quentin19 0:c9055116ebbd 110 return;
Quentin19 0:c9055116ebbd 111 }
Quentin19 0:c9055116ebbd 112
Quentin19 0:c9055116ebbd 113 void reception(){
Quentin19 0:c9055116ebbd 114 int notification =0 ;
Quentin19 0:c9055116ebbd 115 int nouveau_message = 0 ;
Quentin19 0:c9055116ebbd 116 char sms[256];
Quentin19 0:c9055116ebbd 117 char sms_brut[256];
Quentin19 0:c9055116ebbd 118 char num_mem[3];
Quentin19 0:c9055116ebbd 119 int longueur_msg1=0;
Quentin19 0:c9055116ebbd 120 int longueur_msg2=0;
Quentin19 0:c9055116ebbd 121 char numero[12];
Quentin19 0:c9055116ebbd 122
Quentin19 0:c9055116ebbd 123 pc.printf("Reception !\r\n");
Quentin19 0:c9055116ebbd 124
Quentin19 0:c9055116ebbd 125 // attente notification
Quentin19 0:c9055116ebbd 126 while(gsm.readable()){
Quentin19 0:c9055116ebbd 127 sms[longueur_msg1] = gsm.getc();
Quentin19 0:c9055116ebbd 128 pc.printf("%c ",sms[longueur_msg1]);
Quentin19 0:c9055116ebbd 129 longueur_msg1++;
Quentin19 0:c9055116ebbd 130 nouveau_message = 1 ;
Quentin19 0:c9055116ebbd 131 }
Quentin19 0:c9055116ebbd 132 sms[longueur_msg1] = '\0';
Quentin19 0:c9055116ebbd 133
Quentin19 0:c9055116ebbd 134 notification = 0 ;
Quentin19 0:c9055116ebbd 135 if (nouveau_message == 1)
Quentin19 0:c9055116ebbd 136 {
Quentin19 0:c9055116ebbd 137 pc.printf("Nouveau message : %s \r\n", sms);
Quentin19 0:c9055116ebbd 138
Quentin19 0:c9055116ebbd 139 if (strncmp(sms,"\r\n+CMTI",7)==0)
Quentin19 0:c9055116ebbd 140 {notification = 1 ;
Quentin19 0:c9055116ebbd 141 pc.printf("Nouvelle notification ! \r\n");
Quentin19 0:c9055116ebbd 142 }
Quentin19 0:c9055116ebbd 143 else
Quentin19 0:c9055116ebbd 144 {notification = 0 ;
Quentin19 0:c9055116ebbd 145 pc.printf("Pas de notification ! \r\n");
Quentin19 0:c9055116ebbd 146 }
Quentin19 0:c9055116ebbd 147 nouveau_message = 0 ;
Quentin19 0:c9055116ebbd 148 // si notification
Quentin19 0:c9055116ebbd 149 if (notification == 1)
Quentin19 0:c9055116ebbd 150 {
Quentin19 0:c9055116ebbd 151 num_mem[0]=sms[14];
Quentin19 0:c9055116ebbd 152 num_mem[1]=sms[15];
Quentin19 0:c9055116ebbd 153 num_mem[2]='\0';
Quentin19 0:c9055116ebbd 154 pc.printf("Notification recue : %s, longueur_msg= %d \r\n", sms, longueur_msg1);
Quentin19 0:c9055116ebbd 155 pc.printf("Numero memoire : %s \r\n", num_mem );
Quentin19 0:c9055116ebbd 156 // lecture memoire sms
Quentin19 0:c9055116ebbd 157 notification = 0 ;
Quentin19 0:c9055116ebbd 158
Quentin19 0:c9055116ebbd 159 pc.printf("AT+CMGR=%s",num_mem );
Quentin19 0:c9055116ebbd 160 gsm.printf("AT+CMGR=%s\r",num_mem );
Quentin19 0:c9055116ebbd 161 wait(1);
Quentin19 0:c9055116ebbd 162
Quentin19 0:c9055116ebbd 163
Quentin19 0:c9055116ebbd 164
Quentin19 0:c9055116ebbd 165 longueur_msg2 = 0 ;
Quentin19 0:c9055116ebbd 166 while(gsm.readable()){
Quentin19 0:c9055116ebbd 167 sms[longueur_msg2] = gsm.getc();
Quentin19 0:c9055116ebbd 168 pc.printf("%c ",sms[longueur_msg2]);
Quentin19 0:c9055116ebbd 169 longueur_msg2++;
Quentin19 0:c9055116ebbd 170 }
Quentin19 0:c9055116ebbd 171 sms[longueur_msg2] = '\0';
Quentin19 0:c9055116ebbd 172 pc.printf("sms recu : %s, longueur_msg= %d \r\n", sms, longueur_msg2);
Quentin19 0:c9055116ebbd 173 // suppression en tete
Quentin19 0:c9055116ebbd 174 numero[0]=sms[23];
Quentin19 0:c9055116ebbd 175 numero[1]=sms[24];
Quentin19 0:c9055116ebbd 176 numero[2]=sms[25];
Quentin19 0:c9055116ebbd 177 numero[3]=sms[26];
Quentin19 0:c9055116ebbd 178 numero[4]=sms[27];
Quentin19 0:c9055116ebbd 179 numero[5]=sms[28];
Quentin19 0:c9055116ebbd 180 numero[6]=sms[29];
Quentin19 0:c9055116ebbd 181 numero[7]=sms[30];
Quentin19 0:c9055116ebbd 182 numero[8]=sms[31];
Quentin19 0:c9055116ebbd 183 numero[9]=sms[32];
Quentin19 0:c9055116ebbd 184 numero[10]=sms[33];
Quentin19 0:c9055116ebbd 185 numero[11]=sms[34];
Quentin19 0:c9055116ebbd 186 numero[12]='\0';
Quentin19 0:c9055116ebbd 187 pc.printf("Le numero du message : %s \r\n", numero);
Quentin19 0:c9055116ebbd 188 for (int i=0;i<100;i++)
Quentin19 0:c9055116ebbd 189 {
Quentin19 0:c9055116ebbd 190 sms_brut[i]= sms[66+i];
Quentin19 0:c9055116ebbd 191 }
Quentin19 0:c9055116ebbd 192 // affichage message brut
Quentin19 0:c9055116ebbd 193 pc.printf("sms brut : %s", sms_brut);
Quentin19 0:c9055116ebbd 194
Quentin19 0:c9055116ebbd 195 if (strncmp(sms_brut,"POS?",4)==0)
Quentin19 0:c9055116ebbd 196 { pc.printf("Demande de position !");
Quentin19 0:c9055116ebbd 197
Quentin19 0:c9055116ebbd 198 pc.printf("AT+CMGS=\"%s\"\r",numero);
Quentin19 0:c9055116ebbd 199 gsm.printf("AT+CMGS=\"%s\"\r",numero);
Quentin19 0:c9055116ebbd 200 gsm.printf("%s",position);
Quentin19 0:c9055116ebbd 201 gsm.putc(0x1A);
Quentin19 0:c9055116ebbd 202 pc.printf("SMS position parti !");
Quentin19 0:c9055116ebbd 203 clear_buffer();
Quentin19 0:c9055116ebbd 204 pc.printf("buffer vide !");
Quentin19 0:c9055116ebbd 205 }
Quentin19 0:c9055116ebbd 206 }
Quentin19 0:c9055116ebbd 207 }
Quentin19 0:c9055116ebbd 208 }