toggle two leds from web page

Dependencies:   mbed

Committer:
Hotboards
Date:
Fri Jun 24 18:03:28 2016 +0000
Revision:
0:e6ea4e713e2d
first release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Hotboards 0:e6ea4e713e2d 1 #include "mbed.h"
Hotboards 0:e6ea4e713e2d 2 #include <string>
Hotboards 0:e6ea4e713e2d 3
Hotboards 0:e6ea4e713e2d 4 int rxCount = 0;
Hotboards 0:e6ea4e713e2d 5 int DataAvailable = 0;
Hotboards 0:e6ea4e713e2d 6 char rxbuff[128];
Hotboards 0:e6ea4e713e2d 7 char txbuff[64];
Hotboards 0:e6ea4e713e2d 8 char data[128];
Hotboards 0:e6ea4e713e2d 9 char cmdbuff[32];
Hotboards 0:e6ea4e713e2d 10 int linkID;
Hotboards 0:e6ea4e713e2d 11 int ipdLen;
Hotboards 0:e6ea4e713e2d 12 char type[16];
Hotboards 0:e6ea4e713e2d 13
Hotboards 0:e6ea4e713e2d 14 DigitalOut led(LED1); // led de usuario en la tarjeta nucleo
Hotboards 0:e6ea4e713e2d 15 DigitalOut led1(PB_14); // led1 a controlar
Hotboards 0:e6ea4e713e2d 16 DigitalOut led2(PB_15); // led 2 a controlar
Hotboards 0:e6ea4e713e2d 17
Hotboards 0:e6ea4e713e2d 18 Timer tmr1;
Hotboards 0:e6ea4e713e2d 19
Hotboards 0:e6ea4e713e2d 20 Serial wifi(PC_10,PC_11); // Puerto serial para comunicar con modulo WIFI
Hotboards 0:e6ea4e713e2d 21 Serial pc(USBTX,USBRX); // Puerto serial para comunicar con la pc
Hotboards 0:e6ea4e713e2d 22
Hotboards 0:e6ea4e713e2d 23 // prototipos de funciones
Hotboards 0:e6ea4e713e2d 24 //void webServerInit(void);
Hotboards 0:e6ea4e713e2d 25 //void reply(int tOut);
Hotboards 0:e6ea4e713e2d 26 //void WifiCmd(void);
Hotboards 0:e6ea4e713e2d 27
Hotboards 0:e6ea4e713e2d 28 // interrupcion serial usada para recibir datos desde modulo wifi
Hotboards 0:e6ea4e713e2d 29 void sISR()
Hotboards 0:e6ea4e713e2d 30 {
Hotboards 0:e6ea4e713e2d 31 while (wifi.readable())
Hotboards 0:e6ea4e713e2d 32 {
Hotboards 0:e6ea4e713e2d 33 rxbuff[rxCount] = wifi.getc(); // dato recibido se almacena en rxbuff
Hotboards 0:e6ea4e713e2d 34 pc.putc(rxbuff[rxCount]);
Hotboards 0:e6ea4e713e2d 35 rxCount++;
Hotboards 0:e6ea4e713e2d 36 }
Hotboards 0:e6ea4e713e2d 37
Hotboards 0:e6ea4e713e2d 38 if(strlen(rxbuff)>64) // si se ha llenado buffer lo indicamos
Hotboards 0:e6ea4e713e2d 39 { // para que sea revisado
Hotboards 0:e6ea4e713e2d 40 DataAvailable=1;
Hotboards 0:e6ea4e713e2d 41 }
Hotboards 0:e6ea4e713e2d 42 }
Hotboards 0:e6ea4e713e2d 43
Hotboards 0:e6ea4e713e2d 44 //-----------------------------------------------------------------//
Hotboards 0:e6ea4e713e2d 45 // esta funcion imprime en la terminal serial la respuesta a los
Hotboards 0:e6ea4e713e2d 46 // comandoa AT que enviemos al modolo wifi
Hotboards 0:e6ea4e713e2d 47 void reply(int tOut)
Hotboards 0:e6ea4e713e2d 48 {
Hotboards 0:e6ea4e713e2d 49 tmr1.reset();
Hotboards 0:e6ea4e713e2d 50 tmr1.start();
Hotboards 0:e6ea4e713e2d 51
Hotboards 0:e6ea4e713e2d 52 wifi.printf("\r\n");
Hotboards 0:e6ea4e713e2d 53
Hotboards 0:e6ea4e713e2d 54 while(tmr1.read_ms()<tOut)
Hotboards 0:e6ea4e713e2d 55 {
Hotboards 0:e6ea4e713e2d 56 if(wifi.readable())
Hotboards 0:e6ea4e713e2d 57 {
Hotboards 0:e6ea4e713e2d 58 pc.putc(wifi.getc());
Hotboards 0:e6ea4e713e2d 59 }
Hotboards 0:e6ea4e713e2d 60 }
Hotboards 0:e6ea4e713e2d 61 tmr1.stop();
Hotboards 0:e6ea4e713e2d 62 }
Hotboards 0:e6ea4e713e2d 63 //-----------------------------------------------------------------//
Hotboards 0:e6ea4e713e2d 64 // envia el comando en txbuff
Hotboards 0:e6ea4e713e2d 65 void WifiCmd(void)
Hotboards 0:e6ea4e713e2d 66 {
Hotboards 0:e6ea4e713e2d 67 wifi.printf("%s", txbuff);
Hotboards 0:e6ea4e713e2d 68 }
Hotboards 0:e6ea4e713e2d 69 //-----------------------------------------------------------------//
Hotboards 0:e6ea4e713e2d 70 // esta funcion crea el servidor web asumiendo que ya estamos conectados
Hotboards 0:e6ea4e713e2d 71 // a una red wifi
Hotboards 0:e6ea4e713e2d 72 void webServerInit(void)
Hotboards 0:e6ea4e713e2d 73 {
Hotboards 0:e6ea4e713e2d 74
Hotboards 0:e6ea4e713e2d 75 strcpy(txbuff,"AT+RST\r\n"); // reseteamos el modulo
Hotboards 0:e6ea4e713e2d 76 WifiCmd(); // enviamos comando a modulo wifi
Hotboards 0:e6ea4e713e2d 77 reply(5000); // mostramos en la terminal la respuesta
Hotboards 0:e6ea4e713e2d 78 pc.printf("\r\n-----------------------------------------------------------------\r\n");
Hotboards 0:e6ea4e713e2d 79
Hotboards 0:e6ea4e713e2d 80 strcpy(txbuff,"AT+CWMODE=1\r\n");
Hotboards 0:e6ea4e713e2d 81 WifiCmd();
Hotboards 0:e6ea4e713e2d 82 reply(2000);
Hotboards 0:e6ea4e713e2d 83 pc.printf("\r\n-----------------------------------------------------------------\r\n");
Hotboards 0:e6ea4e713e2d 84
Hotboards 0:e6ea4e713e2d 85 strcpy(txbuff,"AT+CIPMUX=1\r\n");
Hotboards 0:e6ea4e713e2d 86 WifiCmd();
Hotboards 0:e6ea4e713e2d 87 reply(2000);
Hotboards 0:e6ea4e713e2d 88 pc.printf("\r\n-----------------------------------------------------------------\r\n");
Hotboards 0:e6ea4e713e2d 89
Hotboards 0:e6ea4e713e2d 90 strcpy(txbuff,"AT+CIPSERVER=1,80\r\n");
Hotboards 0:e6ea4e713e2d 91 WifiCmd();
Hotboards 0:e6ea4e713e2d 92 reply(2000);
Hotboards 0:e6ea4e713e2d 93 pc.printf("\r\n-----------------------------------------------------------------\r\n");
Hotboards 0:e6ea4e713e2d 94
Hotboards 0:e6ea4e713e2d 95 strcpy(txbuff,"AT+CIFSR\r\n");
Hotboards 0:e6ea4e713e2d 96 WifiCmd();
Hotboards 0:e6ea4e713e2d 97 reply(2000);
Hotboards 0:e6ea4e713e2d 98 pc.printf("\r\n-----------------------------------------------------------------\r\n");
Hotboards 0:e6ea4e713e2d 99
Hotboards 0:e6ea4e713e2d 100 wifi.attach(&sISR); // habilitamos la lectura de datos enviados desde el
Hotboards 0:e6ea4e713e2d 101 // modulo wifi mediante interrupcion del puerto serial
Hotboards 0:e6ea4e713e2d 102 }
Hotboards 0:e6ea4e713e2d 103
Hotboards 0:e6ea4e713e2d 104 //-----------------------------------------------------------------//
Hotboards 0:e6ea4e713e2d 105
Hotboards 0:e6ea4e713e2d 106 int main()
Hotboards 0:e6ea4e713e2d 107 {
Hotboards 0:e6ea4e713e2d 108 wifi.baud(115200); // configuramos ambos puertos a 115200 bps
Hotboards 0:e6ea4e713e2d 109 pc.baud(115200);
Hotboards 0:e6ea4e713e2d 110 led1 =0;
Hotboards 0:e6ea4e713e2d 111 led2=0;
Hotboards 0:e6ea4e713e2d 112
Hotboards 0:e6ea4e713e2d 113 pc.printf("\r\n-----------------------Starting----------------------------------\r\n");
Hotboards 0:e6ea4e713e2d 114
Hotboards 0:e6ea4e713e2d 115 wait(3); // esperamos se inicialize el modulo wifi
Hotboards 0:e6ea4e713e2d 116
Hotboards 0:e6ea4e713e2d 117 webServerInit(); // iniciamos el servidor web
Hotboards 0:e6ea4e713e2d 118
Hotboards 0:e6ea4e713e2d 119
Hotboards 0:e6ea4e713e2d 120 while(1)
Hotboards 0:e6ea4e713e2d 121 {
Hotboards 0:e6ea4e713e2d 122 if(DataAvailable) // si se ha llenado el buffer, detenemos la lectura de caracteres
Hotboards 0:e6ea4e713e2d 123 { // y revisamos si hay una conexion de datos valida
Hotboards 0:e6ea4e713e2d 124 wifi.attach(NULL);
Hotboards 0:e6ea4e713e2d 125 rxCount=0;
Hotboards 0:e6ea4e713e2d 126 DataAvailable=0;
Hotboards 0:e6ea4e713e2d 127
Hotboards 0:e6ea4e713e2d 128 int i = strcspn (rxbuff,"+"); // tomamos el indice apartir del caracter "+"
Hotboards 0:e6ea4e713e2d 129
Hotboards 0:e6ea4e713e2d 130
Hotboards 0:e6ea4e713e2d 131 if(i) // si existe el caracter "+" dentro de la cadena
Hotboards 0:e6ea4e713e2d 132 {
Hotboards 0:e6ea4e713e2d 133 strcpy(data, rxbuff + i); // respaldamos los datos recibidos
Hotboards 0:e6ea4e713e2d 134 // leemos el indice, longitud y tipo de conexion
Hotboards 0:e6ea4e713e2d 135 int LINK = sscanf(data,"+IPD,%d,%d:%s", &linkID, &ipdLen, type);
Hotboards 0:e6ea4e713e2d 136
Hotboards 0:e6ea4e713e2d 137 if( strstr(data, "PIN=1") != NULL ) // si encontramos la palabra PIN=1
Hotboards 0:e6ea4e713e2d 138 {
Hotboards 0:e6ea4e713e2d 139 led1 = !led1; // cambiamos el estado de led1
Hotboards 0:e6ea4e713e2d 140 pc.printf("TOGGLE LED 1 \r\n");
Hotboards 0:e6ea4e713e2d 141 }
Hotboards 0:e6ea4e713e2d 142
Hotboards 0:e6ea4e713e2d 143 if( strstr(data,"PIN=2") != NULL ) // si encontramos la palabra PIN=2
Hotboards 0:e6ea4e713e2d 144 {
Hotboards 0:e6ea4e713e2d 145 led2 = !led2; // cambiamos el estado de led2
Hotboards 0:e6ea4e713e2d 146 pc.printf("TOGGLE LED 2 \r\n");
Hotboards 0:e6ea4e713e2d 147 }
Hotboards 0:e6ea4e713e2d 148
Hotboards 0:e6ea4e713e2d 149 if (strstr(data, "GET") != NULL) // si el metodo de conexion fue GET
Hotboards 0:e6ea4e713e2d 150 {
Hotboards 0:e6ea4e713e2d 151 pc.printf("LINKID:%d IPDLEN:%d TYPE %s",linkID,ipdLen,type);
Hotboards 0:e6ea4e713e2d 152
Hotboards 0:e6ea4e713e2d 153 sprintf(txbuff,"AT+CIPCLOSE=%d",linkID); // cerramos la conexion
Hotboards 0:e6ea4e713e2d 154 WifiCmd();
Hotboards 0:e6ea4e713e2d 155 reply(100);
Hotboards 0:e6ea4e713e2d 156 }
Hotboards 0:e6ea4e713e2d 157
Hotboards 0:e6ea4e713e2d 158 memset(data, '\0', sizeof(data)); // inicializamos los buffer de datos
Hotboards 0:e6ea4e713e2d 159 memset(rxbuff, '\0', sizeof(rxbuff));
Hotboards 0:e6ea4e713e2d 160 }
Hotboards 0:e6ea4e713e2d 161 wifi.attach(&sISR);
Hotboards 0:e6ea4e713e2d 162 }
Hotboards 0:e6ea4e713e2d 163 }// end while
Hotboards 0:e6ea4e713e2d 164 }// end main
Hotboards 0:e6ea4e713e2d 165
Hotboards 0:e6ea4e713e2d 166 //----------------------------------------------
Hotboards 0:e6ea4e713e2d 167
Hotboards 0:e6ea4e713e2d 168
Hotboards 0:e6ea4e713e2d 169