MODEM SIM900 socket websocket and command sms
Dependencies: Pulse SDFileSystem TinyJpgDec mbed-rtos mbed
Diff: main.cpp
- Revision:
- 0:214db1fdfc95
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Jun 12 10:07:59 2015 +0000 @@ -0,0 +1,314 @@ +#include "mbed.h" +#include "modem.h" +#include "rtos.h" +#include "math.h" +/* DEFINICION DE PUERTOS */ +DigitalOut led1(LED1); +DigitalOut power(PA_13); +DigitalOut sound(PA_14); +/* */ +Serial pc(USBTX,USBRX); +char res[32]; +Modem modem(PA_11,PA_12,19200); +/*Sortie Digital */ +DigitalOut ch1(PC_3); +DigitalOut ch2(PC_2); +DigitalOut ch3(PH_1); +DigitalOut ch4(PH_0); +DigitalOut ch5(PC_15); +DigitalOut ch6(PC_14); +DigitalOut ch7(PC_13); +DigitalOut ch8(PB_7); +/*Entre analogic */ +AnalogIn tmp1(PC_0); +AnalogIn tmp2(PC_1); +AnalogIn tmp3(PB_0); +AnalogIn tmp4(PA_4); +AnalogIn tmp5(PA_1); +AnalogIn light(PA_0); +/*variables globales */ +int st[8]= {0}; // state de relay +//double ADC[6]= {0}; // sensor temperature et 1 sensor lumiere ADC[5] + +int x; +class sim900 +{ + +public: + int on(void); + int off(void); + void speak(int tmp); + int relay(int rel,int state,int seg); //1 gsm , 2 gprs + float read_Temp(int n_sensor); +}; + +class gprs +{ +public: +}; + +class sms:sim900 +{ +public: + int send_m(char *num,char *text); + int read_m(void); + int sms_cmd(void); +}; + +/*definicion de clases*/ +int sim900::on() +{ + int i=3; + i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD); + if(i==0) { + led1=1; + speak(2); + return 0; //ok encendido + } else { + power=1; + wait(0.5); + power=0; + wait(3); + i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD); + if(i==0) { + led1=1; + speak(2); + } else { + led1=0; + speak(4); + return -1; + } + return 0; + } + +} +int sim900::off() +{ + int i=3; + i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD); + if(i==0) { + speak(4); + power=1; + wait(1); + power=0; + led1=0; + return 0; //ok encendido + } else { + i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD); + if(i==0) { + speak(4); + power=1; + wait(1); + power=0; + led1=0; + return 0; //ok encendido + } else { + led1=0; + speak(4); + } + return -1; // no apagado + } + +} + +void sim900::speak(int tmp) +{ + for(int i=0; i<tmp; i++) { + sound=1; + wait(0.3); + sound=0; + wait(0.3); + } +} + +int sim900::relay(int rel,int state,int seg) +{ + switch (rel) { + case 1: + ch1=state; + break; + case 2: + ch2=state; + break; + case 3: + ch3=state; + break; + case 4: + ch4=state; + break; + case 5: + ch5=state; + break; + case 6: + ch6=state; + break; + case 7: + ch7=state; + break; + case 8: + ch8=state; + break; + } + wait(1); + ch1=0; + ch2=0; + ch3=0; + ch4=0; + return 0; +} + +float sim900::read_Temp(int n_sensor) +{ + double tr,y,temp; + uint16_t meas=0; + float Valim=3300; + float ADCres=65535; + double Result_V = 0; + double MinStepRes = 0; + + meas=tmp1.read_u16(); + + switch (n_sensor) { + case 1: + meas=tmp1.read_u16(); + break; + case 2: + meas=tmp2.read_u16(); + break; + case 3: + meas=tmp3.read_u16(); + break; + case 4: + meas=tmp4.read_u16(); + break; + case 5: + meas=tmp5.read_u16(); + break; + case 6: + meas=light.read_u16(); + break; + } + + MinStepRes = (Valim / ADCres); + Result_V = ((MinStepRes * meas))/1000.0; + tr=(Result_V*47000.0)/(3.3-Result_V); + y=log(tr/47000.0); + y=(1.0/298.15)+(y*(1.0/4450.0)); + temp=1.0/y; + temp=temp-273.15; + pc.printf("Temp=%f\r\n",temp); + return temp; +} + +int sms::send_m(char *num,char *text) +{ + char aux_string[22]= {0}; + int answer; + modem.sendCmd("AT+CMGF=1\r"); + wait(1); + sprintf(aux_string,"AT+CMGS=\"%s\"\r",num); + modem.sendCmd(aux_string); + wait(1); + modem.sendCmd(text); + wait(1); + answer=modem.sendCmdAndWaitForResp("\x1A", "OK", DEFAULT_TIMEOUT,CMD); + if(answer==0) { + pc.printf("message envoye"); + } else { + pc.printf("erreur ctrl z"); + } + return 0; +} + + + +int sms::read_m() +{ + char m[200]= {0}; + char *p; + 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}; + char phone_number[]="+33000000000"; + int r; + r=modem.sendCmdAndWaitForResp("AT+CMGR=1\r","+CMGR:",DEFAULT_TIMEOUT,CMD); + if(r==0) { + modem.readBuffer(m,200,1); // leer buffer y guardar en array m[]. + if(NULL!=(p=strstr(m,"+33"))) { + strncpy(phone_number,p,12); + pc.puts(phone_number); + } + + if(NULL!=(p=strstr(m,"CH1="))) { + strncpy(CH1,p+4,1); + st[0]=atoi(CH1); + relay(1,st[0],1); + pc.puts(CH1); + } + + if(NULL!=(p=strstr(m,"CH2="))) { + strncpy(CH2,p+4,1); + st[1]=atoi(CH2); + relay(2,st[1],1); + pc.puts(CH2); + } + if(NULL!=(p=strstr(m,"CH3="))) { + strncpy(CH3,p+4,1); + st[2]=atoi(CH3); + relay(3,st[2],1); + pc.puts(CH3); + } + if(NULL!=(p=strstr(m,"CH4="))) { + strncpy(CH4,p+4,1); + st[3]=atoi(CH4); + relay(4,st[3],1); + pc.puts(CH4); + } + if(NULL!=(p=strstr(m,"CH5="))) { + strncpy(CH5,p+4,1); + st[4]=atoi(CH5); + relay(5,st[0],1); + pc.puts(CH5); + } + if(NULL!=(p=strstr(m,"CH6="))) { + strncpy(CH6,p+4,1); + st[5]=atoi(CH6); + relay(6,st[5],1); + pc.puts(CH6); + } + if(NULL!=(p=strstr(m,"CH7="))) { + strncpy(CH7,p+4,1); + st[6]=atoi(CH7); + relay(7,st[6],1); + pc.puts(CH7); + } + if(NULL!=(p=strstr(m,"CH8="))) { + strncpy(CH8,p+4,1); + st[7]=atoi(CH8); + relay(8,st[7],1); + pc.puts(CH8); + } + modem.sendCmd("AT+CMGD=1\r"); + send_m(phone_number,"comando recibido\r"); + modem.cleanBuffer(m,200); + } + //pc.printf("%s",m); + return 0; +} + +int main() +{ + sim900 sim; + // float temperatura; + sms sms1; + modem.sendCmd("AT+CNMI=3,1,0,0\r"); + modem.sendCmd("AT+ECHO\r"); + x=sim.on(); + pc.printf("%d",x); + while(true) { + sms1.read_m(); + sim.read_Temp(2); + wait(1); + } + //x=sim.off(); + //pc.printf("%d",x); + +} \ No newline at end of file