Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
Generated on Sat Jul 30 2022 03:35:28 by
1.7.2