gsm and sd card

Dependencies:   Base64

Committer:
Sergey_K
Date:
Tue Jul 02 07:47:25 2019 +0000
Revision:
0:f7e73515c3fc
Child:
1:441cdd24333e
123

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sergey_K 0:f7e73515c3fc 1 //It is the code of the GPRS communication by the use of the Sim800 module.
Sergey_K 0:f7e73515c3fc 2 //This code has work is "to upload data on data.sparkfun.com in every 5 seconds.
Sergey_K 0:f7e73515c3fc 3 //To check the uploaded data the URL is "data.sparkfun.com/streams/roYVdJgWrXUpxVpDYJpA".
Sergey_K 0:f7e73515c3fc 4
Sergey_K 0:f7e73515c3fc 5 #include "mbed.h"
Sergey_K 0:f7e73515c3fc 6 #include <string>
Sergey_K 0:f7e73515c3fc 7 #include "gsmWork.h"
Sergey_K 0:f7e73515c3fc 8 #include "lcdWork.h"
Sergey_K 0:f7e73515c3fc 9 #define GSMRX PA_9
Sergey_K 0:f7e73515c3fc 10 #define GSMTX PA_10
Sergey_K 0:f7e73515c3fc 11 #define SAMPLE_FLAG1 (1UL << 0)
Sergey_K 0:f7e73515c3fc 12 #define SAMPLE_FLAG2 (1UL << 9)
Sergey_K 0:f7e73515c3fc 13
Sergey_K 0:f7e73515c3fc 14
Sergey_K 0:f7e73515c3fc 15
Sergey_K 0:f7e73515c3fc 16 typedef struct {
Sergey_K 0:f7e73515c3fc 17 uint8_t *lcdData;
Sergey_K 0:f7e73515c3fc 18 } mail_t;
Sergey_K 0:f7e73515c3fc 19
Sergey_K 0:f7e73515c3fc 20 Mail<mail_t, 32> mail_box;
Sergey_K 0:f7e73515c3fc 21
Sergey_K 0:f7e73515c3fc 22
Sergey_K 0:f7e73515c3fc 23 uint8_t request[50] = "Hello!I am SIM800,I send you request from stm32";
Sergey_K 0:f7e73515c3fc 24 uint8_t counter=0x00;
Sergey_K 0:f7e73515c3fc 25 uint8_t receiveMsg[50];
Sergey_K 0:f7e73515c3fc 26 char answer[300];
Sergey_K 0:f7e73515c3fc 27 //(const char*) receiveMsg[10];
Sergey_K 0:f7e73515c3fc 28 bool pressedButton = false;
Sergey_K 0:f7e73515c3fc 29 int i;
Sergey_K 0:f7e73515c3fc 30 InterruptIn button(USER_BUTTON);
Sergey_K 0:f7e73515c3fc 31
Sergey_K 0:f7e73515c3fc 32 DigitalOut myLed(LED1);
Sergey_K 0:f7e73515c3fc 33
Sergey_K 0:f7e73515c3fc 34
Sergey_K 0:f7e73515c3fc 35 Serial sim800(GSMRX,GSMTX); //Serial communication of the sim800 and pc.
Sergey_K 0:f7e73515c3fc 36 Serial pc(SERIAL_TX,SERIAL_RX);
Sergey_K 0:f7e73515c3fc 37
Sergey_K 0:f7e73515c3fc 38
Sergey_K 0:f7e73515c3fc 39 Thread gsmTask;
Sergey_K 0:f7e73515c3fc 40 Thread lcdTask;
Sergey_K 0:f7e73515c3fc 41
Sergey_K 0:f7e73515c3fc 42 void buttonPressed()
Sergey_K 0:f7e73515c3fc 43 {
Sergey_K 0:f7e73515c3fc 44 counter++;
Sergey_K 0:f7e73515c3fc 45 request[49]=counter;
Sergey_K 0:f7e73515c3fc 46 pressedButton=true;
Sergey_K 0:f7e73515c3fc 47
Sergey_K 0:f7e73515c3fc 48
Sergey_K 0:f7e73515c3fc 49 }
Sergey_K 0:f7e73515c3fc 50 void buttonReleased()
Sergey_K 0:f7e73515c3fc 51 {
Sergey_K 0:f7e73515c3fc 52 myLed=!myLed;
Sergey_K 0:f7e73515c3fc 53 pressedButton=false;
Sergey_K 0:f7e73515c3fc 54
Sergey_K 0:f7e73515c3fc 55 }
Sergey_K 0:f7e73515c3fc 56
Sergey_K 0:f7e73515c3fc 57 void simAnswer()
Sergey_K 0:f7e73515c3fc 58 {
Sergey_K 0:f7e73515c3fc 59 /*if (answer.indexOf("RDY") > -1)
Sergey_K 0:f7e73515c3fc 60 {
Sergey_K 0:f7e73515c3fc 61
Sergey_K 0:f7e73515c3fc 62
Sergey_K 0:f7e73515c3fc 63
Sergey_K 0:f7e73515c3fc 64 }
Sergey_K 0:f7e73515c3fc 65 else if (answer.indexOf("OK") > -1)
Sergey_K 0:f7e73515c3fc 66 {
Sergey_K 0:f7e73515c3fc 67
Sergey_K 0:f7e73515c3fc 68 }
Sergey_K 0:f7e73515c3fc 69 else if (answer.indexOf("ERROR") > -1)
Sergey_K 0:f7e73515c3fc 70 {
Sergey_K 0:f7e73515c3fc 71
Sergey_K 0:f7e73515c3fc 72 }
Sergey_K 0:f7e73515c3fc 73 else if(answer!="")
Sergey_K 0:f7e73515c3fc 74 {
Sergey_K 0:f7e73515c3fc 75
Sergey_K 0:f7e73515c3fc 76 }*/
Sergey_K 0:f7e73515c3fc 77
Sergey_K 0:f7e73515c3fc 78 }
Sergey_K 0:f7e73515c3fc 79
Sergey_K 0:f7e73515c3fc 80
Sergey_K 0:f7e73515c3fc 81
Sergey_K 0:f7e73515c3fc 82
Sergey_K 0:f7e73515c3fc 83 void sendAt(const char *AT,int ATdelay)
Sergey_K 0:f7e73515c3fc 84 {
Sergey_K 0:f7e73515c3fc 85 sim800.printf("%s\r\n",AT);
Sergey_K 0:f7e73515c3fc 86 }
Sergey_K 0:f7e73515c3fc 87
Sergey_K 0:f7e73515c3fc 88 void startGPRS()
Sergey_K 0:f7e73515c3fc 89 {
Sergey_K 0:f7e73515c3fc 90
Sergey_K 0:f7e73515c3fc 91 }
Sergey_K 0:f7e73515c3fc 92 //LCD DISPLAY WORK++++++++++++++++++++++++++++++++++
Sergey_K 0:f7e73515c3fc 93 void lcdStartWork() {
Sergey_K 0:f7e73515c3fc 94
Sergey_K 0:f7e73515c3fc 95 while(1)
Sergey_K 0:f7e73515c3fc 96 {
Sergey_K 0:f7e73515c3fc 97 if(pressedButton==true) {
Sergey_K 0:f7e73515c3fc 98
Sergey_K 0:f7e73515c3fc 99
Sergey_K 0:f7e73515c3fc 100
Sergey_K 0:f7e73515c3fc 101 myLed=!myLed;
Sergey_K 0:f7e73515c3fc 102
Sergey_K 0:f7e73515c3fc 103 mail_t *mail = mail_box.alloc();
Sergey_K 0:f7e73515c3fc 104 mail->lcdData = request;
Sergey_K 0:f7e73515c3fc 105 mail_box.put(mail);
Sergey_K 0:f7e73515c3fc 106 wait(1);
Sergey_K 0:f7e73515c3fc 107 pressedButton=false;
Sergey_K 0:f7e73515c3fc 108
Sergey_K 0:f7e73515c3fc 109
Sergey_K 0:f7e73515c3fc 110 }
Sergey_K 0:f7e73515c3fc 111 wait(0.3);
Sergey_K 0:f7e73515c3fc 112 }
Sergey_K 0:f7e73515c3fc 113
Sergey_K 0:f7e73515c3fc 114 }
Sergey_K 0:f7e73515c3fc 115 //GSM MODULE WORK_________________________________
Sergey_K 0:f7e73515c3fc 116 void gsmStartWork() {
Sergey_K 0:f7e73515c3fc 117
Sergey_K 0:f7e73515c3fc 118 while(1)
Sergey_K 0:f7e73515c3fc 119 {
Sergey_K 0:f7e73515c3fc 120 osEvent evt = mail_box.get();;
Sergey_K 0:f7e73515c3fc 121 if (evt.status == osEventMail) {
Sergey_K 0:f7e73515c3fc 122 mail_t *mail = (mail_t*)evt.value.p;
Sergey_K 0:f7e73515c3fc 123 uint8_t*receiveMsg = mail->lcdData;
Sergey_K 0:f7e73515c3fc 124 printf("lcdData: %s\n\r" , *receiveMsg);
Sergey_K 0:f7e73515c3fc 125 mail_box.free(mail);
Sergey_K 0:f7e73515c3fc 126 sim800.printf("AT\r\n");
Sergey_K 0:f7e73515c3fc 127 wait(1);
Sergey_K 0:f7e73515c3fc 128 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 129 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 130 }
Sergey_K 0:f7e73515c3fc 131 sim800.printf("AT+SAPBR=3,1,Contype,GPRS\r\n");
Sergey_K 0:f7e73515c3fc 132
Sergey_K 0:f7e73515c3fc 133 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 134 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 135 }
Sergey_K 0:f7e73515c3fc 136
Sergey_K 0:f7e73515c3fc 137 sim800.printf("AT+SAPBR=3,1,APN,internet.mts.ru\r\n");
Sergey_K 0:f7e73515c3fc 138 wait(1);
Sergey_K 0:f7e73515c3fc 139 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 140 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 141 }
Sergey_K 0:f7e73515c3fc 142 sim800.printf("AT+SAPBR=3,1,USER,mts\r\n");
Sergey_K 0:f7e73515c3fc 143 wait(1);
Sergey_K 0:f7e73515c3fc 144 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 145 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 146 }
Sergey_K 0:f7e73515c3fc 147 sendAt("AT+SAPBR=3,1,PWD,mts",0);
Sergey_K 0:f7e73515c3fc 148 wait(1);
Sergey_K 0:f7e73515c3fc 149 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 150 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 151 }
Sergey_K 0:f7e73515c3fc 152 sendAt("AT+SAPBR=1,1",0);
Sergey_K 0:f7e73515c3fc 153 wait(1);
Sergey_K 0:f7e73515c3fc 154 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 155 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 156 }
Sergey_K 0:f7e73515c3fc 157 sendAt("AT+HTTPINIT",0);
Sergey_K 0:f7e73515c3fc 158 wait(1);
Sergey_K 0:f7e73515c3fc 159 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 160 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 161 }
Sergey_K 0:f7e73515c3fc 162 sendAt("AT+HTTPPARA=CID,1",0);
Sergey_K 0:f7e73515c3fc 163 wait(1);
Sergey_K 0:f7e73515c3fc 164 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 165 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 166 }
Sergey_K 0:f7e73515c3fc 167 sendAt("AT+HTTPPARA=URL,157.230.245.76:1880/message",0);
Sergey_K 0:f7e73515c3fc 168 wait(1);
Sergey_K 0:f7e73515c3fc 169 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 170 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 171 }
Sergey_K 0:f7e73515c3fc 172 sendAt("AT+HTTPPARA=CONTENT,application/octet-stream",0);
Sergey_K 0:f7e73515c3fc 173 wait(1);
Sergey_K 0:f7e73515c3fc 174 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 175 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 176 }
Sergey_K 0:f7e73515c3fc 177 sendAt("AT+HTTPDATA=51,10000",0);
Sergey_K 0:f7e73515c3fc 178 wait(1);
Sergey_K 0:f7e73515c3fc 179 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 180 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 181 }
Sergey_K 0:f7e73515c3fc 182 sim800.write(*receiveMsg,51,NULL,SERIAL_EVENT_TX_COMPLETE);
Sergey_K 0:f7e73515c3fc 183 wait(1);
Sergey_K 0:f7e73515c3fc 184 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 185 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 186 }
Sergey_K 0:f7e73515c3fc 187 sendAt("AT+HTTPACTION=1",0);
Sergey_K 0:f7e73515c3fc 188 wait(1);
Sergey_K 0:f7e73515c3fc 189 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 190 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 191 }
Sergey_K 0:f7e73515c3fc 192 sendAt("AT+HTTPTERM",0);
Sergey_K 0:f7e73515c3fc 193 wait(1);
Sergey_K 0:f7e73515c3fc 194 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 195 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 196 }
Sergey_K 0:f7e73515c3fc 197 sendAt("AT+SAPBR=0,1",0);
Sergey_K 0:f7e73515c3fc 198
Sergey_K 0:f7e73515c3fc 199 }
Sergey_K 0:f7e73515c3fc 200 }
Sergey_K 0:f7e73515c3fc 201
Sergey_K 0:f7e73515c3fc 202 }
Sergey_K 0:f7e73515c3fc 203 //MAIN-----------------------------------------------
Sergey_K 0:f7e73515c3fc 204 int main()
Sergey_K 0:f7e73515c3fc 205 {
Sergey_K 0:f7e73515c3fc 206 pc.baud(9300);
Sergey_K 0:f7e73515c3fc 207 sim800.baud(9600);
Sergey_K 0:f7e73515c3fc 208 pc.printf("*******GPRS TEST*******\r\n");
Sergey_K 0:f7e73515c3fc 209
Sergey_K 0:f7e73515c3fc 210 button.rise(&buttonReleased);
Sergey_K 0:f7e73515c3fc 211 button.fall(&buttonPressed);
Sergey_K 0:f7e73515c3fc 212
Sergey_K 0:f7e73515c3fc 213 gsmTask.start(gsmStartWork);
Sergey_K 0:f7e73515c3fc 214 lcdTask.start(lcdStartWork);
Sergey_K 0:f7e73515c3fc 215
Sergey_K 0:f7e73515c3fc 216 /* pc.printf("*******GPRS TEST*******\r\n");
Sergey_K 0:f7e73515c3fc 217
Sergey_K 0:f7e73515c3fc 218
Sergey_K 0:f7e73515c3fc 219
Sergey_K 0:f7e73515c3fc 220 sim800.printf("AT+CGATT?\r\n"); //To check the GPRS is attached or not.
Sergey_K 0:f7e73515c3fc 221 sim800.scanf("%s%s",x,y);
Sergey_K 0:f7e73515c3fc 222
Sergey_K 0:f7e73515c3fc 223
Sergey_K 0:f7e73515c3fc 224 sim800.printf("AT+CIPSHUT\r\n"); //To reset the IP session if any.
Sergey_K 0:f7e73515c3fc 225 sim800.scanf("%s%s",x,y);
Sergey_K 0:f7e73515c3fc 226 pc.printf("%s %s\r\n",x,y);
Sergey_K 0:f7e73515c3fc 227
Sergey_K 0:f7e73515c3fc 228 sim800.printf("AT+SAPBR=3,1,Contype,GPRS\r\n"); //To Set the connection type to GPRS.
Sergey_K 0:f7e73515c3fc 229 sim800.scanf("%s",x);
Sergey_K 0:f7e73515c3fc 230 pc.printf("%s\r\n",x);
Sergey_K 0:f7e73515c3fc 231
Sergey_K 0:f7e73515c3fc 232 sim800.printf("AT+SAPBR=3,1,APN,www\r\n"); //To Set the APN to to "www" , It might be different for you, and depends on the network.
Sergey_K 0:f7e73515c3fc 233 sim800.scanf("%s",x);
Sergey_K 0:f7e73515c3fc 234 pc.printf("%s\r\n",x);
Sergey_K 0:f7e73515c3fc 235
Sergey_K 0:f7e73515c3fc 236 sim800.printf("AT+SAPBR =1,1\r\n"); //To Enable the GPRS.
Sergey_K 0:f7e73515c3fc 237 sim800.scanf("%s",x);
Sergey_K 0:f7e73515c3fc 238 pc.printf("%s\r\n",x);
Sergey_K 0:f7e73515c3fc 239
Sergey_K 0:f7e73515c3fc 240 sim800.printf("AT+SAPBR =2,1\r\n"); //To get the IP address.
Sergey_K 0:f7e73515c3fc 241 sim800.scanf("%s%s%s",x,y,z);
Sergey_K 0:f7e73515c3fc 242 pc.printf("%s %s %s\r\n",x,y,z);
Sergey_K 0:f7e73515c3fc 243
Sergey_K 0:f7e73515c3fc 244
Sergey_K 0:f7e73515c3fc 245 sim800.printf("AT+HTTPINIT\r\n"); //To enable the HTTP mode.
Sergey_K 0:f7e73515c3fc 246 sim800.scanf("%s",x);
Sergey_K 0:f7e73515c3fc 247 pc.printf("%s\r\n",x);
Sergey_K 0:f7e73515c3fc 248
Sergey_K 0:f7e73515c3fc 249 sim800.printf("AT+HTTPPARA=CID,1\r\n"); //To sets up HTTP parameters for the HTTP call.
Sergey_K 0:f7e73515c3fc 250 sim800.scanf("%s",x);
Sergey_K 0:f7e73515c3fc 251 pc.printf("%s\r\n",x);
Sergey_K 0:f7e73515c3fc 252
Sergey_K 0:f7e73515c3fc 253
Sergey_K 0:f7e73515c3fc 254 float lng,lat = 0;
Sergey_K 0:f7e73515c3fc 255 while(lat == 0)
Sergey_K 0:f7e73515c3fc 256 {
Sergey_K 0:f7e73515c3fc 257 sim800.printf("AT+CIPGSMLOC=1,1\r\n"); //To check the Location of GSM in Co-Ordinates(Longitude,Latitude).
Sergey_K 0:f7e73515c3fc 258 sim800.scanf("%s%s%s",x,y,z);
Sergey_K 0:f7e73515c3fc 259 sscanf(y,"0,%f,%f",&lng,&lat); //To sperate out the value of longitude and latitude from the string 'y'.
Sergey_K 0:f7e73515c3fc 260 }
Sergey_K 0:f7e73515c3fc 261 pc.printf("%0.6f %0.6f",lng,lat);
Sergey_K 0:f7e73515c3fc 262 */
Sergey_K 0:f7e73515c3fc 263 /*
Sergey_K 0:f7e73515c3fc 264 while(1)
Sergey_K 0:f7e73515c3fc 265 {
Sergey_K 0:f7e73515c3fc 266
Sergey_K 0:f7e73515c3fc 267 sim800.printf("AT+HTTPPARA=URL,data.sparkfun.com/input/roYVdJgWrXUpxVpDYJpA?private_key=jkgpNMYr81cgMGgbypgr&co_lat=%0.6f&co_long=%0.6f&ldr=%0.2f&pot=%0.2f\r\n",lat,lng,potval,ldrval);
Sergey_K 0:f7e73515c3fc 268 //The above command is for "To Set the url to the address of the webpage you want to access".
Sergey_K 0:f7e73515c3fc 269 sim800.scanf("%s",x);
Sergey_K 0:f7e73515c3fc 270 pc.printf("%s\r\n",x);
Sergey_K 0:f7e73515c3fc 271
Sergey_K 0:f7e73515c3fc 272 sim800.printf("AT+HTTPACTION=0\r\n"); //To Start the HTTP GET session, by giving this command.
Sergey_K 0:f7e73515c3fc 273 sim800.scanf("%s%s%s",x,y,z);
Sergey_K 0:f7e73515c3fc 274 pc.printf("%s %s %s\r\n",x,y,z);
Sergey_K 0:f7e73515c3fc 275
Sergey_K 0:f7e73515c3fc 276 sim800.printf("AT+HTTPREAD\r\n"); //To read the received data.
Sergey_K 0:f7e73515c3fc 277 sim800.scanf("%s%s%s%s%s",x,y,z,l,m);
Sergey_K 0:f7e73515c3fc 278 pc.printf("%s %s %s %s %s\r\n",x,y,z,l,m);
Sergey_K 0:f7e73515c3fc 279
Sergey_K 0:f7e73515c3fc 280 wait(5);
Sergey_K 0:f7e73515c3fc 281 }*/
Sergey_K 0:f7e73515c3fc 282 while(1) {
Sergey_K 0:f7e73515c3fc 283 if(pc.readable()) {
Sergey_K 0:f7e73515c3fc 284 sim800.putc(pc.getc());
Sergey_K 0:f7e73515c3fc 285 }
Sergey_K 0:f7e73515c3fc 286 if(sim800.readable()) {
Sergey_K 0:f7e73515c3fc 287 pc.putc(sim800.getc());
Sergey_K 0:f7e73515c3fc 288 }
Sergey_K 0:f7e73515c3fc 289 }
Sergey_K 0:f7e73515c3fc 290 }