toggle two leds from web page

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include <string>
00003 
00004 int rxCount = 0;
00005 int DataAvailable = 0;
00006 char rxbuff[128];
00007 char txbuff[64];
00008 char data[128];
00009 char cmdbuff[32];
00010 int  linkID;
00011 int  ipdLen;
00012 char type[16];
00013 
00014 DigitalOut led(LED1);        // led de usuario en la tarjeta nucleo
00015 DigitalOut led1(PB_14);      // led1 a controlar
00016 DigitalOut led2(PB_15);      // led 2 a controlar
00017 
00018 Timer tmr1;
00019 
00020 Serial wifi(PC_10,PC_11);   // Puerto serial para comunicar con modulo WIFI
00021 Serial pc(USBTX,USBRX);     // Puerto serial para comunicar con la pc
00022 
00023 // prototipos de funciones
00024 //void webServerInit(void);
00025 //void reply(int tOut);
00026 //void WifiCmd(void);
00027 
00028 // interrupcion serial usada para recibir datos desde modulo wifi
00029 void sISR() 
00030 {    
00031     while (wifi.readable()) 
00032     {
00033       rxbuff[rxCount] = wifi.getc(); // dato recibido se almacena en rxbuff
00034       pc.putc(rxbuff[rxCount]);
00035       rxCount++;
00036     }
00037     
00038     if(strlen(rxbuff)>64)            // si se ha llenado buffer lo indicamos
00039     {                                // para que sea revisado
00040         DataAvailable=1;
00041     }  
00042 }
00043 
00044 //-----------------------------------------------------------------//
00045 // esta funcion imprime en la terminal serial la respuesta a los
00046 // comandoa AT que enviemos al modolo wifi
00047 void reply(int tOut)
00048 {
00049     tmr1.reset();
00050     tmr1.start();
00051     
00052     wifi.printf("\r\n");
00053     
00054     while(tmr1.read_ms()<tOut)
00055     {
00056         if(wifi.readable())
00057         {
00058             pc.putc(wifi.getc());
00059         }
00060     }
00061     tmr1.stop();
00062 }
00063 //-----------------------------------------------------------------//
00064 // envia el comando en txbuff
00065 void WifiCmd(void)
00066 {
00067    wifi.printf("%s", txbuff); 
00068 }
00069 //-----------------------------------------------------------------//
00070 // esta funcion crea el servidor web asumiendo que ya estamos conectados
00071 // a una red wifi
00072 void webServerInit(void)
00073 {
00074     
00075     strcpy(txbuff,"AT+RST\r\n");                // reseteamos el modulo
00076     WifiCmd();                                  // enviamos comando a modulo wifi
00077     reply(5000);                                // mostramos en la terminal la respuesta
00078     pc.printf("\r\n-----------------------------------------------------------------\r\n"); 
00079 
00080     strcpy(txbuff,"AT+CWMODE=1\r\n");
00081     WifiCmd();
00082     reply(2000);         
00083     pc.printf("\r\n-----------------------------------------------------------------\r\n");
00084     
00085     strcpy(txbuff,"AT+CIPMUX=1\r\n");
00086     WifiCmd();
00087     reply(2000);
00088     pc.printf("\r\n-----------------------------------------------------------------\r\n");
00089     
00090     strcpy(txbuff,"AT+CIPSERVER=1,80\r\n");
00091     WifiCmd();
00092     reply(2000);
00093     pc.printf("\r\n-----------------------------------------------------------------\r\n");
00094     
00095     strcpy(txbuff,"AT+CIFSR\r\n");
00096     WifiCmd();
00097     reply(2000);
00098     pc.printf("\r\n-----------------------------------------------------------------\r\n");
00099     
00100     wifi.attach(&sISR);           // habilitamos la lectura de datos enviados desde el
00101                                   // modulo wifi mediante interrupcion del puerto serial
00102 }
00103 
00104 //-----------------------------------------------------------------//
00105 
00106 int main() 
00107 {   
00108     wifi.baud(115200);     // configuramos ambos puertos a 115200 bps
00109     pc.baud(115200);
00110     led1 =0;
00111     led2=0;
00112     
00113     pc.printf("\r\n-----------------------Starting----------------------------------\r\n");
00114     
00115     wait(3);                   // esperamos  se inicialize el modulo wifi 
00116     
00117     webServerInit();           // iniciamos el servidor web
00118     
00119     
00120     while(1) 
00121     {
00122       if(DataAvailable)       // si se ha llenado el buffer, detenemos la lectura de caracteres
00123       {                       // y revisamos si hay una conexion de datos valida
00124            wifi.attach(NULL);
00125            rxCount=0;
00126            DataAvailable=0;
00127            
00128            int i = strcspn (rxbuff,"+");   // tomamos el indice apartir del caracter "+"
00129             
00130             
00131            if(i)                       // si existe el caracter "+" dentro de la cadena                      
00132            {
00133             strcpy(data, rxbuff + i);       // respaldamos los datos recibidos 
00134             // leemos el indice, longitud y tipo de conexion       
00135             int LINK = sscanf(data,"+IPD,%d,%d:%s", &linkID, &ipdLen, type);  
00136              
00137             if( strstr(data, "PIN=1") != NULL )  // si encontramos la palabra PIN=1
00138             {
00139              led1 = !led1;                       // cambiamos el estado de led1
00140              pc.printf("TOGGLE LED 1  \r\n");
00141             }
00142         
00143             if( strstr(data,"PIN=2") != NULL )   // si encontramos la palabra PIN=2
00144             {
00145              led2 = !led2;                       // cambiamos el estado de led2
00146              pc.printf("TOGGLE LED 2 \r\n");
00147             }
00148             
00149             if (strstr(data, "GET") != NULL)     // si el metodo de conexion fue GET
00150             {
00151              pc.printf("LINKID:%d  IPDLEN:%d  TYPE %s",linkID,ipdLen,type);
00152   
00153              sprintf(txbuff,"AT+CIPCLOSE=%d",linkID);  // cerramos la conexion
00154              WifiCmd();
00155              reply(100);
00156             }
00157             
00158              memset(data, '\0', sizeof(data));         // inicializamos los buffer de datos
00159              memset(rxbuff, '\0', sizeof(rxbuff));
00160         }
00161         wifi.attach(&sISR);
00162       }
00163     }// end while
00164 }// end main
00165 
00166 //----------------------------------------------
00167 
00168 
00169