Transmit data over WiFi modem
ESP_8266.cpp
- Committer:
- docent
- Date:
- 2019-06-13
- Revision:
- 0:0b46638559b3
File content as of revision 0:0b46638559b3:
#include "mbed.h" #include "ESP_8266.h" //#define DEBUG char tr_data[256]; Serial *pwifi; DigitalOut *pCH_PD; DigitalOut *pled; //------------ Timeout ift; RxWiFi_t rx_wifi; //----------- void ift_isr() { rx_wifi.event=1; } //--------------------- void RxWiFi_interrupt() { while(pwifi->readable()) { rx_wifi.buffer[rx_wifi.in] = pwifi->getc(); ift.attach(ift_isr, 0.01); if(rx_wifi.event==0 && rx_wifi.in<(RXWIFI_BUFFER_SIZE-1) ) rx_wifi.in = (rx_wifi.in + 1); } } //---------------------------------------------------- void IniWiFi(Serial *pw,DigitalOut *pcs,DigitalOut *pl) { pCH_PD=pcs; pled=pl; pwifi=pw; *pCH_PD=0; pwifi->baud(115200); pwifi->attach(&RxWiFi_interrupt, Serial::RxIrq); *pCH_PD=1; rx_wifi.event=0; rx_wifi.cipdinfo=0; while(rx_wifi.event==0) { wait_ms(25); *pled=!*pled; } rx_wifi.event=0; rx_wifi.in=0; rx_wifi.app=0; } //------------------------------------ void WriteWiFi(uint8_t *sbuf, int len) { if(pwifi->writeable()) { for (int i=0; i<len; i++) pwifi->putc(sbuf[i]); } } //---------------------------------- void SendToWiFi_(char *data,int len) { pwifi->printf("AT+CIPSEND=%d\r\n",len); while(rx_wifi.event==0) wait_us(10); rx_wifi.in =0; rx_wifi.event=0; WriteWiFi((uint8_t *)data,len); } //----------------------- void WiFiDataProcessing() { char *bptr,*aptr,*pptr; char data[256]; if(rx_wifi.event){ rx_wifi.app=0; rx_wifi.buffer[rx_wifi.in]=0; bptr=strstr(rx_wifi.buffer,"+IPD"); //-----------recive UDP data-------------------------- if(bptr!=NULL) { bptr=strchr(rx_wifi.buffer,','); bptr++; rx_wifi.len=strtol(bptr,&aptr,10); bptr=strchr(aptr,':'); pptr=strchr(aptr,','); if((bptr>pptr)&&(bptr!=NULL)&&(pptr!=NULL)) { aptr++; pptr=strchr(aptr,','); *pptr=0; pptr++; *bptr=0; } else bptr=NULL; if (bptr!=NULL) { bptr++; for (int i=0; i<rx_wifi.len; i++) data[i]=bptr[i]; rx_wifi.answer=wifi_executeCallback(data);//<------action------ #ifdef DEBUG pc_printfCallback("wifi_executeCallback"); #endif rx_wifi.app=1; rx_wifi.ipd=0; if(strcmp(rx_wifi.IPaddr,aptr)!=0) { sprintf(rx_wifi.IPaddr,"%s",aptr); sprintf(rx_wifi.UDPport,"%s",pptr); rx_wifi.event=0; rx_wifi.in =0; pwifi->printf("AT+CIPCLOSE\r\n"); while(rx_wifi.event==0) wait_us(10); rx_wifi.buffer[rx_wifi.in]=0; #ifdef DEBUG pc_printfCallback(rx_wifi.buffer); #endif rx_wifi.event=0; rx_wifi.in =0; pwifi->printf("AT+CIPSTART=\"UDP\",\"%s\",%s,1112,2\r\n",rx_wifi.IPaddr,rx_wifi.UDPport); rx_wifi.ipd=1; } else if(rx_wifi.answer==0) { /*//---------------------information feedback ----------------- rx_wifi.event=0; rx_wifi.in =0; SendToWiFi_(data,rx_wifi.len); */ } } } else { //-----------------------------recive Modem answer------------------------------------------- #ifdef DEBUG if(rx_wifi.buffer[0]<128) pc_printfCallback(rx_wifi.buffer); #else if(rx_wifi.buffer[0]<128){ char *endptr=strstr(rx_wifi.buffer,"AT+CIFSR"); if(endptr!=NULL) pc_printfCallback(rx_wifi.buffer);//pc.printf("%s",rx_wifi_buffer); } #endif if(strstr(rx_wifi.buffer,"WIFI GOT IP")!=NULL) { pwifi->printf("AT+CIPSTART=\"UDP\",\"192.168.255.255\",1112,1112,2\r\n"); } else if(strstr(rx_wifi.buffer,"CONNECT")!=NULL) { if (rx_wifi.cipdinfo==0) { rx_wifi.cipdinfo=1; pwifi->printf("AT+CIPDINFO=1\r\n"); } else if(rx_wifi.ipd) { rx_wifi.ipd=0; rx_wifi.event=0; rx_wifi.in =0; if(data[1]==' ') SendToWiFi_(data,rx_wifi.len); } else pwifi->printf("AT+CIFSR\r\n"); } } rx_wifi.in =0; rx_wifi.event=0; } } //-------------------- void SendResponseWiFi() { if(rx_wifi.app){ if (rx_wifi.answer&&rx_wifi.ipd==0){ ResponseWiFiCallback(tr_data,rx_wifi.answer); if(rx_wifi.answer) SendToWiFi_(tr_data,strlen(tr_data)); } rx_wifi.answer=0; rx_wifi.app=0; } }