toggle two leds from web page
Embed:
(wiki syntax)
Show/hide line numbers
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