TeamLegrand
/
GSM_QuectelM95_Final
v3.0
main.cpp@0:c9055116ebbd, 2018-06-06 (annotated)
- 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?
User | Revision | Line number | New 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 | } |