Nucleo STM32 F401RE , NodeMCU and TCP Conneciton

Dependencies:   BufferedSerial mbed-rtos mbed

Fork of NucleoF401_ESP8622 by Veysel KARADAG

Connection SCHEMA

/media/uploads/veyselka/schema.jpg

SOCKET DATA

/media/uploads/veyselka/portpeeker.jpg

DETAIL DESCRIPTION

http://veyselkaradag.blogspot.com.tr/

wifi.cpp

Committer:
veyselka
Date:
2015-02-19
Revision:
4:a78539de849b
Parent:
1:4a50b910342c

File content as of revision 4:a78539de849b:

/* ---------------------------------------------------------------------------
** This software is in the public domain, furnished "as is", without technical
** support, and with no warranty, express or implied, as to its usefulness for
** any purpose.
**
** wifi.ccp
** NodeMCU at Commands
** Author: <veyselka@hotmail.com> <v.karadag@gmail.com> Veysel KARADAG
** -------------------------------------------------------------------------*/

#include "esp8622.h"
#include "mbed.h"
#include "wifi.h"
#include "rtos.h"


esp8622 esp(PA_9, PA_10,9600);


/*******************************************************************************
* Function Name  : connectRouter
* Description    : Connect NodeMCU to WIFI Router / AP
* Input          : SSID, PASSWORD
* Output         : NONE
* Return         : 1-COnnected 0-NOT CONCECTED
*******************************************************************************/

int connectRouter(char *ssid, char *password ){
 

    char cmd[32];
    
    esp.sendCmd("AT+CWMODE=3\r\n");

    Thread::wait(100);
    
    sprintf(cmd,"AT+CWJAP=\"%s\",\"%s\"\r\n",ssid,password);
    
    esp.sendCmd(cmd);
    
    memset(cmd,0,32);
    esp.readFromBuffer(cmd,DEFAULT_TIMEOUT,10);

    if(strncmp(cmd,"AT\r\r\n\r\nOK",9)==0)
        return 1;
    else
        return 0;
   
}


/*******************************************************************************
* Function Name  : at_TEST
* Description    : SEND Modem AT and CHECK RESPONSE
* Input          : NONE
* Output         : NONE
* Return         : 1-TESTED 0-FAILED
*******************************************************************************/

int at_TEST(void){
    
    return esp.sendATTest();    
        
}

/*******************************************************************************
* Function Name  : read_ip
* Description    : READ MODEM STA IP and, IP
* Input          : IP & STA_IP
* Output         : IPi STA_IP
* Return         : NONE always 1
*******************************************************************************/
int read_ip(char *ip , char *sta_ip ){
    
    char rx_buffer[64];
    char *token;
    
   
    memset(rx_buffer,0,64); 
     
        
    esp.sendCmd("AT+CIFSR\r\n");
    
    esp.readFromBuffer(rx_buffer,DEFAULT_TIMEOUT,64);
    
    printf("CMD:%s:\r\n",rx_buffer);
        
    token = strtok (rx_buffer,"\n");
    sprintf(ip,"%s",token);
    remove_all_chars(ip,'\r');
    
    token = strtok (NULL,"\n");
    sprintf(sta_ip,"%s",token);
    remove_all_chars(sta_ip,'\r');
    
    return 1;
}



/*******************************************************************************
* Function Name  : remove_all_chars
* Description    : remove char c in string..
* Input          : Data
* Output         : None
* Return         : NONE
*******************************************************************************/

void remove_all_chars(char* str, char c) {
    char *pr = str, *pw = str;
    while (*pr) {
        *pw = *pr++;
        pw += (*pw != c);
    }
    *pw = '\0';
}

/*******************************************************************************
* Function Name  : send_SOC_DATA
* Description    : Connect SERVER SOCKET and SEND DATA
* Input          : SERVER IP, SERVER PORT, DATA
* Output         : NONE
* Return         : 1- SENDED  0- FAILED
*******************************************************************************/
int send_SOC_DATA(char *ip,int soc , char *data ){

    char cmd[128];
    int len;
    
    sprintf(cmd,"AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",ip,soc);
    printf("CMD:%s:\r\n",cmd);
    
    esp.sendCmd(cmd);
    memset(cmd,0,128);
    esp.readFromBuffer(cmd,DEFAULT_TIMEOUT,10);
  
    
    if( strncmp(cmd,"\r\nOK",4)!=0){
        
        if(strncmp(cmd,"ALREAY",6)!=0 )
            return 0;       
    }
        
    len=strlen(data);
    memset(cmd,0,128);
    sprintf(cmd,"AT+CIPSEND=%d\r\n",len);
    printf("CMD:%s:\r\n",cmd);
    
    esp.sendCmd(cmd);
    memset(cmd,0,128);
    esp.readFromBuffer(cmd,DEFAULT_TIMEOUT,1);
    
    if(strncmp(cmd,">",1)!=0)
        return 0;
    esp.sendCmd(data);
    
    memset(cmd,0,128);
    esp.readFromBuffer(cmd,DEFAULT_TIMEOUT,6);
    
    if(strncmp(cmd,"\r\nSEND OK",9)!=0)
        return 1;

    return 0;
}



/*******************************************************************************
* Function Name  : Echo_OFF
* Description    : MODEM ECHO OPTION OFF
* Input          : NONE
* Output         : NONE
* Return         : NONE
*******************************************************************************/

void Echo_OFF(void){
    
    esp.sendCmd("ATE0\r\n");   
    
    
}