Communicates with the WiFi - be very careful when using as it is tempremental.

Dependencies:   mbed

initiateWifi.cpp

Committer:
qdanilc
Date:
2017-05-26
Revision:
9:8cf34e4f9ca0
Parent:
8:e09edf050cca
Child:
10:e5eee7bc1a7d

File content as of revision 9:8cf34e4f9ca0:

#include "mbed.h"
#include "RawSerial.h"
#include "string.h"
#include "stdio.h"

//setup the other wifi pins
DigitalOut rstPin (PTE29);
DigitalOut chpdPin (PTE23);


RawSerial esp (PTC4, PTC3, 115200); //setup a serial to the  (board) Tx = PTC4 and  Rx = PTC3 pins at baud rate 115200

Serial pc(USBTX, USBRX, 115200);

DigitalOut redLED(LED1); // twp leds
DigitalOut greenLED(LED2); // to allow visual check of bidirectional comms
DigitalOut blueLED(LED3);  //to prove it's working

char input; //character to store inputs/outputs in communication

//char * getRequest = "GET / HTTP/1.1\r\nHost: time.jsontest.com\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nUser-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36\r\nAccept-Encoding: gzip,deflate,sdch\r\nAccept-Language: en-US,en;q=0.8";
//char * getRequest = "GET / HTTP/1.1\r\nHost: time.jsontest.com\r\n\r\n";
//char buf[20];
//sprintf(buf, "AT+CIPSEND=1,%d", sizeof(getRequest));

char* startCommands[5]= {
    "AT+RST",
    "AT+CWMODE=1",
    //"AT+CWJAP=\"Hotspot\",\"password\"", skip signing in for debugging purposes
    "AT+CIPMUX=1",
    "AT+CIPSTART=1,\"TCP\",\"time.jsontest.com\",80" //time.jsontest.com
};


void sendCommand(char* command, int commandNumber)
{
    pc.printf("\r\ncommand %d",commandNumber);  //identify the command number
    pc.printf("\r\n");

    esp.printf("%s\r\n",command);    //send command

}


void getTime()
{
    int * timeDate [2]; //stores time and date

    pc.printf("Syncing time with internet\r\n");
    char *msg=(char *)malloc(50);
    char *msg2= "GET / HTTP/1.1\r\nhost: time.jsontest.com\r\n\r\n";

    sprintf(msg,"AT+CIPSEND=1,%d",strlen(msg2));

    pc.printf("%s\r\n",msg);
    esp.printf("%s\r\n",msg);
    pc.printf("%s\r\n",msg2);
    esp.printf("%s\r\n",msg2);
    
    

}
char * buffer [128];
char * nextBuff;


int k = 0; //counter for comm numb




void start()
{
    pc.printf("Initialising start sequence\r\n");

    int numberOfCommands = sizeof(startCommands)/sizeof(startCommands[0]); // check if this works
    for (int i = 0; i<numberOfCommands; i++) {

        sendCommand(startCommands[i],i);
        wait (6); //wait an arbitrary time between each command

    }
}

void reset()     //resets the module by turning rst off for 2 seconds then on again
{
    rstPin = 0;
    wait(2);
    rstPin = 1;
    pc.printf("Reset complete\r\n");

}

void esp_recv()
{
    redLED = !redLED;
    while(esp.readable()) {
        pc.putc(esp.getc());
    }
}


void pc_recv()
{
    char c;
    greenLED = !greenLED;
    while(pc.readable()) {
        c=pc.getc();
        esp.putc(c);

        /*
        /////////////////////////////////////////////////////////////////////////////////////this section is for debugging purposes only remove when done
                if(c=='x') {
                    pc.printf("\r\ncommand %d",k);  //identify the command number
                    pc.printf("\r\n");

                    esp.printf("%s\r\n",startCommands[k]);    //send command
                    pc.putc(10); //ie makes enter perform as expected

                    if (k <10) {
                        k++;   //reset k if required
                    } else {
                        k=0;
                    }
                }
        *////////////////////////////////////////////////////////////////////////////////////

        if(c==13) {
            pc.putc(10); //ie makes enter perform as expected
            esp.putc(10);
        }
    }
}

void initiateWifi()
{

    //initialise the pins
    rstPin = 1;
    chpdPin = 1;

    reset();    //perform an initial reset

    blueLED = 1; //turn on test light

    pc.attach(&pc_recv, Serial::RxIrq); // attach the two interrupt services
    esp.attach(&esp_recv, Serial::RxIrq);

    wait(10);
    start();

    wait (3);
    getTime();
    /*
    pc.printf("%d",dateTime[0]);
    pc.printf("%d",dateTime[1]);
    */
}