Hotboards MX
/
WIFI_web_toggle_leds
toggle two leds from web page
Revision 0:e6ea4e713e2d, committed 2016-06-24
- Comitter:
- Hotboards
- Date:
- Fri Jun 24 18:03:28 2016 +0000
- Commit message:
- first release
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Jun 24 18:03:28 2016 +0000 @@ -0,0 +1,169 @@ +#include "mbed.h" +#include <string> + +int rxCount = 0; +int DataAvailable = 0; +char rxbuff[128]; +char txbuff[64]; +char data[128]; +char cmdbuff[32]; +int linkID; +int ipdLen; +char type[16]; + +DigitalOut led(LED1); // led de usuario en la tarjeta nucleo +DigitalOut led1(PB_14); // led1 a controlar +DigitalOut led2(PB_15); // led 2 a controlar + +Timer tmr1; + +Serial wifi(PC_10,PC_11); // Puerto serial para comunicar con modulo WIFI +Serial pc(USBTX,USBRX); // Puerto serial para comunicar con la pc + +// prototipos de funciones +//void webServerInit(void); +//void reply(int tOut); +//void WifiCmd(void); + +// interrupcion serial usada para recibir datos desde modulo wifi +void sISR() +{ + while (wifi.readable()) + { + rxbuff[rxCount] = wifi.getc(); // dato recibido se almacena en rxbuff + pc.putc(rxbuff[rxCount]); + rxCount++; + } + + if(strlen(rxbuff)>64) // si se ha llenado buffer lo indicamos + { // para que sea revisado + DataAvailable=1; + } +} + +//-----------------------------------------------------------------// +// esta funcion imprime en la terminal serial la respuesta a los +// comandoa AT que enviemos al modolo wifi +void reply(int tOut) +{ + tmr1.reset(); + tmr1.start(); + + wifi.printf("\r\n"); + + while(tmr1.read_ms()<tOut) + { + if(wifi.readable()) + { + pc.putc(wifi.getc()); + } + } + tmr1.stop(); +} +//-----------------------------------------------------------------// +// envia el comando en txbuff +void WifiCmd(void) +{ + wifi.printf("%s", txbuff); +} +//-----------------------------------------------------------------// +// esta funcion crea el servidor web asumiendo que ya estamos conectados +// a una red wifi +void webServerInit(void) +{ + + strcpy(txbuff,"AT+RST\r\n"); // reseteamos el modulo + WifiCmd(); // enviamos comando a modulo wifi + reply(5000); // mostramos en la terminal la respuesta + pc.printf("\r\n-----------------------------------------------------------------\r\n"); + + strcpy(txbuff,"AT+CWMODE=1\r\n"); + WifiCmd(); + reply(2000); + pc.printf("\r\n-----------------------------------------------------------------\r\n"); + + strcpy(txbuff,"AT+CIPMUX=1\r\n"); + WifiCmd(); + reply(2000); + pc.printf("\r\n-----------------------------------------------------------------\r\n"); + + strcpy(txbuff,"AT+CIPSERVER=1,80\r\n"); + WifiCmd(); + reply(2000); + pc.printf("\r\n-----------------------------------------------------------------\r\n"); + + strcpy(txbuff,"AT+CIFSR\r\n"); + WifiCmd(); + reply(2000); + pc.printf("\r\n-----------------------------------------------------------------\r\n"); + + wifi.attach(&sISR); // habilitamos la lectura de datos enviados desde el + // modulo wifi mediante interrupcion del puerto serial +} + +//-----------------------------------------------------------------// + +int main() +{ + wifi.baud(115200); // configuramos ambos puertos a 115200 bps + pc.baud(115200); + led1 =0; + led2=0; + + pc.printf("\r\n-----------------------Starting----------------------------------\r\n"); + + wait(3); // esperamos se inicialize el modulo wifi + + webServerInit(); // iniciamos el servidor web + + + while(1) + { + if(DataAvailable) // si se ha llenado el buffer, detenemos la lectura de caracteres + { // y revisamos si hay una conexion de datos valida + wifi.attach(NULL); + rxCount=0; + DataAvailable=0; + + int i = strcspn (rxbuff,"+"); // tomamos el indice apartir del caracter "+" + + + if(i) // si existe el caracter "+" dentro de la cadena + { + strcpy(data, rxbuff + i); // respaldamos los datos recibidos + // leemos el indice, longitud y tipo de conexion + int LINK = sscanf(data,"+IPD,%d,%d:%s", &linkID, &ipdLen, type); + + if( strstr(data, "PIN=1") != NULL ) // si encontramos la palabra PIN=1 + { + led1 = !led1; // cambiamos el estado de led1 + pc.printf("TOGGLE LED 1 \r\n"); + } + + if( strstr(data,"PIN=2") != NULL ) // si encontramos la palabra PIN=2 + { + led2 = !led2; // cambiamos el estado de led2 + pc.printf("TOGGLE LED 2 \r\n"); + } + + if (strstr(data, "GET") != NULL) // si el metodo de conexion fue GET + { + pc.printf("LINKID:%d IPDLEN:%d TYPE %s",linkID,ipdLen,type); + + sprintf(txbuff,"AT+CIPCLOSE=%d",linkID); // cerramos la conexion + WifiCmd(); + reply(100); + } + + memset(data, '\0', sizeof(data)); // inicializamos los buffer de datos + memset(rxbuff, '\0', sizeof(rxbuff)); + } + wifi.attach(&sISR); + } + }// end while +}// end main + +//---------------------------------------------- + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Jun 24 18:03:28 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/6c34061e7c34 \ No newline at end of file