Coordinator_1

Dependencies:   ESP8266 mbed nRF24L01P

Receiver.cpp

Committer:
monish
Date:
2016-07-07
Revision:
1:7f3a0c145a08
Parent:
0:e246677dfb3b

File content as of revision 1:7f3a0c145a08:

/*****Multiceiver wireless network with IoT*****/
 
#include "mbed.h"
#include "nRF24L01P.h"
#include "ESP8266.h"
 
//Serial Transmission
Serial pc(USBTX, USBRX); // tx, rx
 
//wifi UART port and baud rate
ESP8266 wifi(PTE0, PTE1, 115200); 
 
//nRF module 
nRF24L01P my_nrf24l01p(PTD2, PTD3, PTD1, PTD0, PTD5, PTD4);    // mosi, miso, sck, csn, ce, irq
 
//blue for pipe1 and green for pipe0
DigitalOut GreenLED(LED2);
DigitalOut RedLED(LED1);
 
//buffers for wifi library
char snd[255],resp[1000];
char http_cmd[300], comm[300];
int timeout = 6000; //timeout for wifi commands
 
char count[1];
char RxDataCnt_PIPE0, RxDataCnt_PIPE1;
char temp;
 
//potvalue and ldrvalue
char pot_val, ldr_val;
float potval, ldrval;
float opv=0;
float olv=0;
 
//Public and private keys for phant
char* Public_Key = "wrZ1PpONOpCk1QPM03wki1yDdZXb";
char* Private_Key = "OzYl9EOZOEcvPZ3Wbxjvs3A7OpXM";
    
//SSID and password for connection
#define SSID "Eduvance_WiFi"
#define PASS "eduvance"

//Remote IP
#define IP "192.168.0.2" //184.106.153.149-ThingsSpeak IP
 
//Wifi init function
void wifi_initialize(void){
    
    pc.printf("******** Resetting wifi module ********\r\n");
    wifi.Reset();
    
    //wait for 5 seconds for response, else display no response receiveed
    if (wifi.RcvReply(resp, 5000))    
        pc.printf("%s",resp);    
    else
        pc.printf("No response");
    
    pc.printf("******** Setting Station mode of wifi with AP ********\r\n");
    wifi.SetMode(1);    // set transparent  mode
    if (wifi.RcvReply(resp, timeout))    //receive a response from ESP
        pc.printf("%s",resp);    //Print the response onscreen
    else
        pc.printf("No response while setting mode. \r\n");
    
    pc.printf("******** Joining network with SSID and PASS ********\r\n");
    wifi.Join(SSID, PASS);     
    if (wifi.RcvReply(resp, timeout))    
        pc.printf("%s",resp);   
    else
        pc.printf("No response while connecting to network \r\n");
        
    pc.printf("******** Getting IP and MAC of module ********\r\n");
    wifi.GetIP(resp);     
    if (wifi.RcvReply(resp, timeout))    
        pc.printf("%s",resp);    
    else
        pc.printf("No response while getting IP \r\n");
    
    pc.printf("******** Setting WIFI UART passthrough ********\r\n");
    wifi.setTransparent();          
    if (wifi.RcvReply(resp, timeout))    
        pc.printf("%s",resp);    
    else
        pc.printf("No response while setting wifi passthrough. \r\n");
    wait(1);    
    
    pc.printf("******** Setting single connection mode ********\r\n");
    wifi.SetSingle();             
    wifi.RcvReply(resp, timeout);
    if (wifi.RcvReply(resp, timeout))    
        pc.printf("%s",resp);    
    else
        pc.printf("No response while setting single connection \r\n");
    wait(1);
}
 
void wifi_send(void){
    
    pc.printf("******** Starting TCP connection on IP and port ********\r\n");
    wifi.startTCPConn(IP, 8080);  //cipstart
    wifi.RcvReply(resp, timeout);
    if (wifi.RcvReply(resp, timeout))    
        pc.printf("%s",resp);    
    else
        pc.printf("No response while starting TCP connection \r\n");
    wait(1);
    
    //create link 
    sprintf(http_cmd,"/input/%s?private_key=%s&ldr=%0.2f&pot=%0.2f",Public_Key,Private_Key,ldrval,potval); 
    //sprintf(http_cmd,"/input/%s?private_key=%s&ldr=%.2f&pot=%.2f",Public_Key,Private_Key,ldrval,potval); 
    pc.printf(http_cmd);
    
    pc.printf("******** Sending URL to wifi ********\r\n");
    wifi.sendURL(http_cmd, comm);   //cipsend and get command
    if (wifi.RcvReply(resp, timeout))    
        pc.printf("%s",resp);    
    else
        pc.printf("No response while sending URL \r\n");
    
}
 
int main() {
    
    
    //specifying address same as transmitter for pipe0 and pipe1
    long long RxAddress_PIPE1 = 0xE2E2E2E2E2;
    long long RxAddress_PIPE0 = 0xC2C2C2C2C2;
    
    my_nrf24l01p.powerUp();
    my_nrf24l01p.setRfFrequency(2475);
    
    //set rx address with default address and for specified pipe
    my_nrf24l01p.setRxAddress(RxAddress_PIPE1, DEFAULT_NRF24L01P_ADDRESS_WIDTH, NRF24L01P_PIPE_P1);
    my_nrf24l01p.setRxAddress(RxAddress_PIPE0, DEFAULT_NRF24L01P_ADDRESS_WIDTH, NRF24L01P_PIPE_P0);
    
    // Display the (default) setup of the nRF24L01+ chip
    pc.printf( "nRF24L01+ Frequency    : %d MHz\r\n",  my_nrf24l01p.getRfFrequency() );
    pc.printf( "nRF24L01+ Output power : %d dBm\r\n",  my_nrf24l01p.getRfOutputPower() );
    pc.printf( "nRF24L01+ Data Rate    : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
    
    //display rx address for both pipes
    pc.printf( "nRF24L01+ RX Address - PIPE0  : 0x%010llX\r\n", my_nrf24l01p.getRxAddress(NRF24L01P_PIPE_P0) );
    pc.printf( "nRF24L01+ RX Address - PIPE1  : 0x%010llX\r\n", my_nrf24l01p.getRxAddress(NRF24L01P_PIPE_P1) );
    pc.printf( "Wireless Sensor Network - Multiceiver\r\n" );
    
    RxDataCnt_PIPE0 = 1;
    RxDataCnt_PIPE1 = 1;
    
    //set transfer size explicitly for both pipes
    my_nrf24l01p.setTransferSize(RxDataCnt_PIPE1, NRF24L01P_PIPE_P1);
    my_nrf24l01p.setTransferSize(RxDataCnt_PIPE0, NRF24L01P_PIPE_P0);
    
    my_nrf24l01p.setReceiveMode();
    my_nrf24l01p.enable();
    
    wifi_initialize();
 
    while (1) {
        
        //check if data is available in pipe0
        if ( my_nrf24l01p.readable(NRF24L01P_PIPE_P0) ) {
 
            // ...read the data into the receive buffer
            temp = my_nrf24l01p.read( NRF24L01P_PIPE_P0, count, RxDataCnt_PIPE0 );
            
            pot_val = count[0];
            potval=pot_val;
            
            pc.printf("Received: %d bytes from PIPE0; POT=%d\r\n",temp, potval);
            
            // Toggle LED2 (to help debug nRF24L01+ -> Host communication)
            GreenLED = !GreenLED;
        }
        
        //check if data is there in pipe1
        if ( my_nrf24l01p.readable(NRF24L01P_PIPE_P1) ) {
 
            // ...read the data into the receive buffer
            temp = my_nrf24l01p.read( NRF24L01P_PIPE_P1, count, RxDataCnt_PIPE1 );
            
            ldr_val = count[0];
            ldrval=ldr_val; 
            pc.printf("Received: %d bytes from PIPE1; LDR=%d\r\n",temp, ldrval);
            
            // Toggle LED2 (to help debug nRF24L01+ -> Host communication)
            RedLED = !RedLED;
        }
        if(olv!=ldrval || opv!=potval)
        {
        wifi_send();
        }
        olv=ldrval;
        opv=potval;
        }
}