Hotboards MX
/
WIFI_web_toggle_leds
toggle two leds from web page
main.cpp@0:e6ea4e713e2d, 2016-06-24 (annotated)
- Committer:
- Hotboards
- Date:
- Fri Jun 24 18:03:28 2016 +0000
- Revision:
- 0:e6ea4e713e2d
first release
Who changed what in which revision?
User | Revision | Line number | New 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 |