MODEM SIM900 socket websocket and command sms

Dependencies:   Pulse SDFileSystem TinyJpgDec mbed-rtos mbed

Committer:
metabi814
Date:
Fri Jun 12 10:07:59 2015 +0000
Revision:
0:214db1fdfc95
sim900 socket and websocket project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
metabi814 0:214db1fdfc95 1 #include "mbed.h"
metabi814 0:214db1fdfc95 2 #include "modem.h"
metabi814 0:214db1fdfc95 3 #include "rtos.h"
metabi814 0:214db1fdfc95 4 #include "math.h"
metabi814 0:214db1fdfc95 5 /* DEFINICION DE PUERTOS */
metabi814 0:214db1fdfc95 6 DigitalOut led1(LED1);
metabi814 0:214db1fdfc95 7 DigitalOut power(PA_13);
metabi814 0:214db1fdfc95 8 DigitalOut sound(PA_14);
metabi814 0:214db1fdfc95 9 /* */
metabi814 0:214db1fdfc95 10 Serial pc(USBTX,USBRX);
metabi814 0:214db1fdfc95 11 char res[32];
metabi814 0:214db1fdfc95 12 Modem modem(PA_11,PA_12,19200);
metabi814 0:214db1fdfc95 13 /*Sortie Digital */
metabi814 0:214db1fdfc95 14 DigitalOut ch1(PC_3);
metabi814 0:214db1fdfc95 15 DigitalOut ch2(PC_2);
metabi814 0:214db1fdfc95 16 DigitalOut ch3(PH_1);
metabi814 0:214db1fdfc95 17 DigitalOut ch4(PH_0);
metabi814 0:214db1fdfc95 18 DigitalOut ch5(PC_15);
metabi814 0:214db1fdfc95 19 DigitalOut ch6(PC_14);
metabi814 0:214db1fdfc95 20 DigitalOut ch7(PC_13);
metabi814 0:214db1fdfc95 21 DigitalOut ch8(PB_7);
metabi814 0:214db1fdfc95 22 /*Entre analogic */
metabi814 0:214db1fdfc95 23 AnalogIn tmp1(PC_0);
metabi814 0:214db1fdfc95 24 AnalogIn tmp2(PC_1);
metabi814 0:214db1fdfc95 25 AnalogIn tmp3(PB_0);
metabi814 0:214db1fdfc95 26 AnalogIn tmp4(PA_4);
metabi814 0:214db1fdfc95 27 AnalogIn tmp5(PA_1);
metabi814 0:214db1fdfc95 28 AnalogIn light(PA_0);
metabi814 0:214db1fdfc95 29 /*variables globales */
metabi814 0:214db1fdfc95 30 int st[8]= {0}; // state de relay
metabi814 0:214db1fdfc95 31 //double ADC[6]= {0}; // sensor temperature et 1 sensor lumiere ADC[5]
metabi814 0:214db1fdfc95 32
metabi814 0:214db1fdfc95 33 int x;
metabi814 0:214db1fdfc95 34 class sim900
metabi814 0:214db1fdfc95 35 {
metabi814 0:214db1fdfc95 36
metabi814 0:214db1fdfc95 37 public:
metabi814 0:214db1fdfc95 38 int on(void);
metabi814 0:214db1fdfc95 39 int off(void);
metabi814 0:214db1fdfc95 40 void speak(int tmp);
metabi814 0:214db1fdfc95 41 int relay(int rel,int state,int seg); //1 gsm , 2 gprs
metabi814 0:214db1fdfc95 42 float read_Temp(int n_sensor);
metabi814 0:214db1fdfc95 43 };
metabi814 0:214db1fdfc95 44
metabi814 0:214db1fdfc95 45 class gprs
metabi814 0:214db1fdfc95 46 {
metabi814 0:214db1fdfc95 47 public:
metabi814 0:214db1fdfc95 48 };
metabi814 0:214db1fdfc95 49
metabi814 0:214db1fdfc95 50 class sms:sim900
metabi814 0:214db1fdfc95 51 {
metabi814 0:214db1fdfc95 52 public:
metabi814 0:214db1fdfc95 53 int send_m(char *num,char *text);
metabi814 0:214db1fdfc95 54 int read_m(void);
metabi814 0:214db1fdfc95 55 int sms_cmd(void);
metabi814 0:214db1fdfc95 56 };
metabi814 0:214db1fdfc95 57
metabi814 0:214db1fdfc95 58 /*definicion de clases*/
metabi814 0:214db1fdfc95 59 int sim900::on()
metabi814 0:214db1fdfc95 60 {
metabi814 0:214db1fdfc95 61 int i=3;
metabi814 0:214db1fdfc95 62 i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD);
metabi814 0:214db1fdfc95 63 if(i==0) {
metabi814 0:214db1fdfc95 64 led1=1;
metabi814 0:214db1fdfc95 65 speak(2);
metabi814 0:214db1fdfc95 66 return 0; //ok encendido
metabi814 0:214db1fdfc95 67 } else {
metabi814 0:214db1fdfc95 68 power=1;
metabi814 0:214db1fdfc95 69 wait(0.5);
metabi814 0:214db1fdfc95 70 power=0;
metabi814 0:214db1fdfc95 71 wait(3);
metabi814 0:214db1fdfc95 72 i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD);
metabi814 0:214db1fdfc95 73 if(i==0) {
metabi814 0:214db1fdfc95 74 led1=1;
metabi814 0:214db1fdfc95 75 speak(2);
metabi814 0:214db1fdfc95 76 } else {
metabi814 0:214db1fdfc95 77 led1=0;
metabi814 0:214db1fdfc95 78 speak(4);
metabi814 0:214db1fdfc95 79 return -1;
metabi814 0:214db1fdfc95 80 }
metabi814 0:214db1fdfc95 81 return 0;
metabi814 0:214db1fdfc95 82 }
metabi814 0:214db1fdfc95 83
metabi814 0:214db1fdfc95 84 }
metabi814 0:214db1fdfc95 85 int sim900::off()
metabi814 0:214db1fdfc95 86 {
metabi814 0:214db1fdfc95 87 int i=3;
metabi814 0:214db1fdfc95 88 i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD);
metabi814 0:214db1fdfc95 89 if(i==0) {
metabi814 0:214db1fdfc95 90 speak(4);
metabi814 0:214db1fdfc95 91 power=1;
metabi814 0:214db1fdfc95 92 wait(1);
metabi814 0:214db1fdfc95 93 power=0;
metabi814 0:214db1fdfc95 94 led1=0;
metabi814 0:214db1fdfc95 95 return 0; //ok encendido
metabi814 0:214db1fdfc95 96 } else {
metabi814 0:214db1fdfc95 97 i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD);
metabi814 0:214db1fdfc95 98 if(i==0) {
metabi814 0:214db1fdfc95 99 speak(4);
metabi814 0:214db1fdfc95 100 power=1;
metabi814 0:214db1fdfc95 101 wait(1);
metabi814 0:214db1fdfc95 102 power=0;
metabi814 0:214db1fdfc95 103 led1=0;
metabi814 0:214db1fdfc95 104 return 0; //ok encendido
metabi814 0:214db1fdfc95 105 } else {
metabi814 0:214db1fdfc95 106 led1=0;
metabi814 0:214db1fdfc95 107 speak(4);
metabi814 0:214db1fdfc95 108 }
metabi814 0:214db1fdfc95 109 return -1; // no apagado
metabi814 0:214db1fdfc95 110 }
metabi814 0:214db1fdfc95 111
metabi814 0:214db1fdfc95 112 }
metabi814 0:214db1fdfc95 113
metabi814 0:214db1fdfc95 114 void sim900::speak(int tmp)
metabi814 0:214db1fdfc95 115 {
metabi814 0:214db1fdfc95 116 for(int i=0; i<tmp; i++) {
metabi814 0:214db1fdfc95 117 sound=1;
metabi814 0:214db1fdfc95 118 wait(0.3);
metabi814 0:214db1fdfc95 119 sound=0;
metabi814 0:214db1fdfc95 120 wait(0.3);
metabi814 0:214db1fdfc95 121 }
metabi814 0:214db1fdfc95 122 }
metabi814 0:214db1fdfc95 123
metabi814 0:214db1fdfc95 124 int sim900::relay(int rel,int state,int seg)
metabi814 0:214db1fdfc95 125 {
metabi814 0:214db1fdfc95 126 switch (rel) {
metabi814 0:214db1fdfc95 127 case 1:
metabi814 0:214db1fdfc95 128 ch1=state;
metabi814 0:214db1fdfc95 129 break;
metabi814 0:214db1fdfc95 130 case 2:
metabi814 0:214db1fdfc95 131 ch2=state;
metabi814 0:214db1fdfc95 132 break;
metabi814 0:214db1fdfc95 133 case 3:
metabi814 0:214db1fdfc95 134 ch3=state;
metabi814 0:214db1fdfc95 135 break;
metabi814 0:214db1fdfc95 136 case 4:
metabi814 0:214db1fdfc95 137 ch4=state;
metabi814 0:214db1fdfc95 138 break;
metabi814 0:214db1fdfc95 139 case 5:
metabi814 0:214db1fdfc95 140 ch5=state;
metabi814 0:214db1fdfc95 141 break;
metabi814 0:214db1fdfc95 142 case 6:
metabi814 0:214db1fdfc95 143 ch6=state;
metabi814 0:214db1fdfc95 144 break;
metabi814 0:214db1fdfc95 145 case 7:
metabi814 0:214db1fdfc95 146 ch7=state;
metabi814 0:214db1fdfc95 147 break;
metabi814 0:214db1fdfc95 148 case 8:
metabi814 0:214db1fdfc95 149 ch8=state;
metabi814 0:214db1fdfc95 150 break;
metabi814 0:214db1fdfc95 151 }
metabi814 0:214db1fdfc95 152 wait(1);
metabi814 0:214db1fdfc95 153 ch1=0;
metabi814 0:214db1fdfc95 154 ch2=0;
metabi814 0:214db1fdfc95 155 ch3=0;
metabi814 0:214db1fdfc95 156 ch4=0;
metabi814 0:214db1fdfc95 157 return 0;
metabi814 0:214db1fdfc95 158 }
metabi814 0:214db1fdfc95 159
metabi814 0:214db1fdfc95 160 float sim900::read_Temp(int n_sensor)
metabi814 0:214db1fdfc95 161 {
metabi814 0:214db1fdfc95 162 double tr,y,temp;
metabi814 0:214db1fdfc95 163 uint16_t meas=0;
metabi814 0:214db1fdfc95 164 float Valim=3300;
metabi814 0:214db1fdfc95 165 float ADCres=65535;
metabi814 0:214db1fdfc95 166 double Result_V = 0;
metabi814 0:214db1fdfc95 167 double MinStepRes = 0;
metabi814 0:214db1fdfc95 168
metabi814 0:214db1fdfc95 169 meas=tmp1.read_u16();
metabi814 0:214db1fdfc95 170
metabi814 0:214db1fdfc95 171 switch (n_sensor) {
metabi814 0:214db1fdfc95 172 case 1:
metabi814 0:214db1fdfc95 173 meas=tmp1.read_u16();
metabi814 0:214db1fdfc95 174 break;
metabi814 0:214db1fdfc95 175 case 2:
metabi814 0:214db1fdfc95 176 meas=tmp2.read_u16();
metabi814 0:214db1fdfc95 177 break;
metabi814 0:214db1fdfc95 178 case 3:
metabi814 0:214db1fdfc95 179 meas=tmp3.read_u16();
metabi814 0:214db1fdfc95 180 break;
metabi814 0:214db1fdfc95 181 case 4:
metabi814 0:214db1fdfc95 182 meas=tmp4.read_u16();
metabi814 0:214db1fdfc95 183 break;
metabi814 0:214db1fdfc95 184 case 5:
metabi814 0:214db1fdfc95 185 meas=tmp5.read_u16();
metabi814 0:214db1fdfc95 186 break;
metabi814 0:214db1fdfc95 187 case 6:
metabi814 0:214db1fdfc95 188 meas=light.read_u16();
metabi814 0:214db1fdfc95 189 break;
metabi814 0:214db1fdfc95 190 }
metabi814 0:214db1fdfc95 191
metabi814 0:214db1fdfc95 192 MinStepRes = (Valim / ADCres);
metabi814 0:214db1fdfc95 193 Result_V = ((MinStepRes * meas))/1000.0;
metabi814 0:214db1fdfc95 194 tr=(Result_V*47000.0)/(3.3-Result_V);
metabi814 0:214db1fdfc95 195 y=log(tr/47000.0);
metabi814 0:214db1fdfc95 196 y=(1.0/298.15)+(y*(1.0/4450.0));
metabi814 0:214db1fdfc95 197 temp=1.0/y;
metabi814 0:214db1fdfc95 198 temp=temp-273.15;
metabi814 0:214db1fdfc95 199 pc.printf("Temp=%f\r\n",temp);
metabi814 0:214db1fdfc95 200 return temp;
metabi814 0:214db1fdfc95 201 }
metabi814 0:214db1fdfc95 202
metabi814 0:214db1fdfc95 203 int sms::send_m(char *num,char *text)
metabi814 0:214db1fdfc95 204 {
metabi814 0:214db1fdfc95 205 char aux_string[22]= {0};
metabi814 0:214db1fdfc95 206 int answer;
metabi814 0:214db1fdfc95 207 modem.sendCmd("AT+CMGF=1\r");
metabi814 0:214db1fdfc95 208 wait(1);
metabi814 0:214db1fdfc95 209 sprintf(aux_string,"AT+CMGS=\"%s\"\r",num);
metabi814 0:214db1fdfc95 210 modem.sendCmd(aux_string);
metabi814 0:214db1fdfc95 211 wait(1);
metabi814 0:214db1fdfc95 212 modem.sendCmd(text);
metabi814 0:214db1fdfc95 213 wait(1);
metabi814 0:214db1fdfc95 214 answer=modem.sendCmdAndWaitForResp("\x1A", "OK", DEFAULT_TIMEOUT,CMD);
metabi814 0:214db1fdfc95 215 if(answer==0) {
metabi814 0:214db1fdfc95 216 pc.printf("message envoye");
metabi814 0:214db1fdfc95 217 } else {
metabi814 0:214db1fdfc95 218 pc.printf("erreur ctrl z");
metabi814 0:214db1fdfc95 219 }
metabi814 0:214db1fdfc95 220 return 0;
metabi814 0:214db1fdfc95 221 }
metabi814 0:214db1fdfc95 222
metabi814 0:214db1fdfc95 223
metabi814 0:214db1fdfc95 224
metabi814 0:214db1fdfc95 225 int sms::read_m()
metabi814 0:214db1fdfc95 226 {
metabi814 0:214db1fdfc95 227 char m[200]= {0};
metabi814 0:214db1fdfc95 228 char *p;
metabi814 0:214db1fdfc95 229 char CH1[5]= {0},CH2[5]= {0},CH3[5]= {0},CH4[5]= {0},CH5[5]= {0},CH6[5]= {0},CH7[5]= {0},CH8[1]= {0};
metabi814 0:214db1fdfc95 230 char phone_number[]="+33000000000";
metabi814 0:214db1fdfc95 231 int r;
metabi814 0:214db1fdfc95 232 r=modem.sendCmdAndWaitForResp("AT+CMGR=1\r","+CMGR:",DEFAULT_TIMEOUT,CMD);
metabi814 0:214db1fdfc95 233 if(r==0) {
metabi814 0:214db1fdfc95 234 modem.readBuffer(m,200,1); // leer buffer y guardar en array m[].
metabi814 0:214db1fdfc95 235 if(NULL!=(p=strstr(m,"+33"))) {
metabi814 0:214db1fdfc95 236 strncpy(phone_number,p,12);
metabi814 0:214db1fdfc95 237 pc.puts(phone_number);
metabi814 0:214db1fdfc95 238 }
metabi814 0:214db1fdfc95 239
metabi814 0:214db1fdfc95 240 if(NULL!=(p=strstr(m,"CH1="))) {
metabi814 0:214db1fdfc95 241 strncpy(CH1,p+4,1);
metabi814 0:214db1fdfc95 242 st[0]=atoi(CH1);
metabi814 0:214db1fdfc95 243 relay(1,st[0],1);
metabi814 0:214db1fdfc95 244 pc.puts(CH1);
metabi814 0:214db1fdfc95 245 }
metabi814 0:214db1fdfc95 246
metabi814 0:214db1fdfc95 247 if(NULL!=(p=strstr(m,"CH2="))) {
metabi814 0:214db1fdfc95 248 strncpy(CH2,p+4,1);
metabi814 0:214db1fdfc95 249 st[1]=atoi(CH2);
metabi814 0:214db1fdfc95 250 relay(2,st[1],1);
metabi814 0:214db1fdfc95 251 pc.puts(CH2);
metabi814 0:214db1fdfc95 252 }
metabi814 0:214db1fdfc95 253 if(NULL!=(p=strstr(m,"CH3="))) {
metabi814 0:214db1fdfc95 254 strncpy(CH3,p+4,1);
metabi814 0:214db1fdfc95 255 st[2]=atoi(CH3);
metabi814 0:214db1fdfc95 256 relay(3,st[2],1);
metabi814 0:214db1fdfc95 257 pc.puts(CH3);
metabi814 0:214db1fdfc95 258 }
metabi814 0:214db1fdfc95 259 if(NULL!=(p=strstr(m,"CH4="))) {
metabi814 0:214db1fdfc95 260 strncpy(CH4,p+4,1);
metabi814 0:214db1fdfc95 261 st[3]=atoi(CH4);
metabi814 0:214db1fdfc95 262 relay(4,st[3],1);
metabi814 0:214db1fdfc95 263 pc.puts(CH4);
metabi814 0:214db1fdfc95 264 }
metabi814 0:214db1fdfc95 265 if(NULL!=(p=strstr(m,"CH5="))) {
metabi814 0:214db1fdfc95 266 strncpy(CH5,p+4,1);
metabi814 0:214db1fdfc95 267 st[4]=atoi(CH5);
metabi814 0:214db1fdfc95 268 relay(5,st[0],1);
metabi814 0:214db1fdfc95 269 pc.puts(CH5);
metabi814 0:214db1fdfc95 270 }
metabi814 0:214db1fdfc95 271 if(NULL!=(p=strstr(m,"CH6="))) {
metabi814 0:214db1fdfc95 272 strncpy(CH6,p+4,1);
metabi814 0:214db1fdfc95 273 st[5]=atoi(CH6);
metabi814 0:214db1fdfc95 274 relay(6,st[5],1);
metabi814 0:214db1fdfc95 275 pc.puts(CH6);
metabi814 0:214db1fdfc95 276 }
metabi814 0:214db1fdfc95 277 if(NULL!=(p=strstr(m,"CH7="))) {
metabi814 0:214db1fdfc95 278 strncpy(CH7,p+4,1);
metabi814 0:214db1fdfc95 279 st[6]=atoi(CH7);
metabi814 0:214db1fdfc95 280 relay(7,st[6],1);
metabi814 0:214db1fdfc95 281 pc.puts(CH7);
metabi814 0:214db1fdfc95 282 }
metabi814 0:214db1fdfc95 283 if(NULL!=(p=strstr(m,"CH8="))) {
metabi814 0:214db1fdfc95 284 strncpy(CH8,p+4,1);
metabi814 0:214db1fdfc95 285 st[7]=atoi(CH8);
metabi814 0:214db1fdfc95 286 relay(8,st[7],1);
metabi814 0:214db1fdfc95 287 pc.puts(CH8);
metabi814 0:214db1fdfc95 288 }
metabi814 0:214db1fdfc95 289 modem.sendCmd("AT+CMGD=1\r");
metabi814 0:214db1fdfc95 290 send_m(phone_number,"comando recibido\r");
metabi814 0:214db1fdfc95 291 modem.cleanBuffer(m,200);
metabi814 0:214db1fdfc95 292 }
metabi814 0:214db1fdfc95 293 //pc.printf("%s",m);
metabi814 0:214db1fdfc95 294 return 0;
metabi814 0:214db1fdfc95 295 }
metabi814 0:214db1fdfc95 296
metabi814 0:214db1fdfc95 297 int main()
metabi814 0:214db1fdfc95 298 {
metabi814 0:214db1fdfc95 299 sim900 sim;
metabi814 0:214db1fdfc95 300 // float temperatura;
metabi814 0:214db1fdfc95 301 sms sms1;
metabi814 0:214db1fdfc95 302 modem.sendCmd("AT+CNMI=3,1,0,0\r");
metabi814 0:214db1fdfc95 303 modem.sendCmd("AT+ECHO\r");
metabi814 0:214db1fdfc95 304 x=sim.on();
metabi814 0:214db1fdfc95 305 pc.printf("%d",x);
metabi814 0:214db1fdfc95 306 while(true) {
metabi814 0:214db1fdfc95 307 sms1.read_m();
metabi814 0:214db1fdfc95 308 sim.read_Temp(2);
metabi814 0:214db1fdfc95 309 wait(1);
metabi814 0:214db1fdfc95 310 }
metabi814 0:214db1fdfc95 311 //x=sim.off();
metabi814 0:214db1fdfc95 312 //pc.printf("%d",x);
metabi814 0:214db1fdfc95 313
metabi814 0:214db1fdfc95 314 }