Laste version of the Balloons Ethernet Module

Dependencies:   EthernetInterface mbed-rtos mbed nRF24L01P

Fork of TCPSocket_HelloWorld by mbed official

main.cpp

Committer:
yanndouze
Date:
2015-11-19
Revision:
16:5d54ce685f6f
Parent:
11:59dcefdda506

File content as of revision 16:5d54ce685f6f:

/*
 * Balloons module Ethernet
 * Autheur : Yann DOUZE douze.yann@gmail.com
 * Date : 2015/06/24
 * Version 0.9 
 */

#include "mbed.h"
#include "EthernetInterface.h"
#include "nRF24L01P.h"

/****** declaration des define ******/
#define SERIAL_DEBUG2
//#define SERIAL_DEBUG
//#define C_SENSOR_DEBUG
#define SEND_DEBUG
#define ON 0
#define OFF 1
#define TRANSFER_SIZE   4

/****** declaration des objets ******/

Serial pc(USBTX, USBRX);
nRF24L01P my_nrf24l01p(p5,  p6,   p7,   p8,     p9,   p10);    // mosi, miso, sck, csn, ce, irq
                    //P0_9, P0_8, P0_7, P0_6,   P0_0, P0_6  sur Arch Pro (LPC1768)
                    //D11,  D12,  D13,  D10,    D8,   D9    sur ARduino
                    
DigitalOut LEDG(LED1);
DigitalOut LEDR(LED2);
DigitalOut LEDB(LED3);
DigitalOut LEDW(LED4);
DigitalOut Led_green(P2_3);
DigitalOut Led_blue(P0_4);

/****** variables globales ******/

char APIServer[] = "mcuconnectorapi.azurewebsites.net";
int DeviceId=1200;
unsigned long MACId=0;
char MobileId1[]="\"12\"";
char MobileId2[]="\"13\"";
char MobileId3[]="\"14\"";
int checkMessageAvailableInterval = 2000;// ms
char messageIsAvailable[] = "/api/IsMessageAvailable/device/";
//String APIADDRESS_pushData = "api/PushData/type/";// << Il faut bien rajouter /value/{value} après le type!
char sayHello[]="/api/SayHello/device/";
char Get_message[]="GET %s%d HTTP/1.1\r\nHost: %s\r\nUser-Agent: arduino-ethernet\r\nConnection: close\r\n\r\n";
char Send_message[]="GET %s%d/recipient/%d HTTP/1.1\r\nHost: %s\r\nUser-Agent: arduino-ethernet\r\nConnection: close\r\n\r\n";
extern "C" void mbed_mac_address(char *mac); 


int main() {
    LEDB=1;
    LEDW=1;
    LEDR=0;
    LEDG=1;
    Led_green=0;
    Led_blue=0;
    EthernetInterface eth;
    int Last_MobileId=12;
    char mac[6];
    char http_cmd[256];
    char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
    txData[0]='A'; //A comme allume
    txData[1]='L'; //L comme lampe
    txData[3]=0x30;     
    int SendCounter=0;
    int txDataCnt = 4;
    int rxDataCnt = 0;
    pc.baud(115200);
    pc.printf("Hello World ! \r\n");
    pc.printf("Ethetnet Init ! \r\n");
    
    eth.init(); //Use DHCP
    int ret=eth.connect();
    if(ret==0)
    {
        pc.printf("IP Address is %s \r\n", eth.getIPAddress());
        LEDB=0;
        Led_blue=1;
        mbed_mac_address(mac);
        for(int i=0; i<6;i++) {
            printf("%02X ", mac[i]);
            MACId+=mac[i];
        }
        printf("\n");
        //MACId = atol(mac);
        printf("MacId= %d\n",MACId);
    }
    else
    {
        pc.printf("No Ethernet connection \r\n");
        LEDB=1;
        Led_blue=0;
    }
    
        
    TCPSocketConnection sock;
    my_nrf24l01p.powerUp();
     // 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() );
    pc.printf( "nRF24L01+ TX Address   : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
    pc.printf( "nRF24L01+ RX Address   : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );

    //pc.printf( "Type keys to test transfers:\r\n  (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
    
    my_nrf24l01p.setTransferSize( TRANSFER_SIZE );

    my_nrf24l01p.setReceiveMode();
    my_nrf24l01p.enable();
    LEDW=0;
    while(1)
    {
        sock.connect(APIServer, 80);
        #ifdef SERIAL_DEBUG
        pc.printf("Fetch url ! \r\n");
        #endif
        sprintf(http_cmd,Get_message,messageIsAvailable,DeviceId,APIServer);
       
        //char http_cmd[] = "GET /api/IsMessageAvailable/device/1200 HTTP/1.1\r\nHost: mcuconnectorapi2.azurewebsites.net\r\nUser-Agent: arduino-ethernet\r\nConnection: close\r\n\r\n";                                       
        #ifdef SERIAL_DEBUG
        pc.printf("message : %d \r\n %s \r\n",strlen(http_cmd),http_cmd);
        #endif
        
        sock.send_all(http_cmd, sizeof(http_cmd)-1);
        
        char buffer[300];
        int ret;
        while (true) {
            ret = sock.receive(buffer, sizeof(buffer)-1);
            if (ret <= 0)
                break;
            buffer[ret] = '\0';
            #ifdef SERIAL_DEBUG
            pc.printf("Received %d chars from server:\r\n%s\r\n", ret, buffer);
            #endif
        }
        sock.close();

        if(strstr(buffer,MobileId1))
        {
            LEDG = 0;
            Led_green=1;
            pc.printf("Une pensee est arrive du mobile 12! \r\n");
            txData[2]=SendCounter++;
            txData[3]=12;
            if(SendCounter==255) SendCounter=0;
             my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );   
             Last_MobileId=12;      
        }
        if(strstr(buffer,MobileId2))
        {
            LEDG = 0;
            Led_green=1;
            pc.printf("Une pensee est arrive du mobile 13! \r\n");
            txData[2]=SendCounter++;
            txData[3]=13;
            if(SendCounter==255) SendCounter=0;
             my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );  
             Last_MobileId=13;       
        }
        if(strstr(buffer,MobileId3))
        {
            LEDG = 0;
            Led_green=1;
            pc.printf("Une pensee est arrive du mobile 14! \r\n");
            txData[2]=SendCounter++;
            txData[3]=14;
            if(SendCounter==255) SendCounter=0;
             my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );
             Last_MobileId=14;      
        }
        
        if ( my_nrf24l01p.readable() ) {
            // ...read the data into the receive buffer
            rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
            if(rxData[3]==0x31){
                pc.putc( rxData[0] );
                pc.putc( rxData[1] );
                pc.printf(" Message %d \r\n",rxData[2]);
            }
            // Toggle LED2 (to help debug nRF24L01+ -> Host communication)
            sock.connect(APIServer, 80);
            #ifdef SERIAL_DEBUG2
            pc.printf("Send SayHello !\r\n");
            #endif
            sprintf(http_cmd,Send_message,sayHello,DeviceId,Last_MobileId,APIServer);
           
            //char http_cmd[] = "GET /api/IsMessageAvailable/device/1200 HTTP/1.1\r\nHost: mcuconnectorapi2.azurewebsites.net\r\nUser-Agent: arduino-ethernet\r\nConnection: close\r\n\r\n";                                       
            #ifdef SERIAL_DEBUG2
            pc.printf("message : %d \r\n %s \r\n",strlen(http_cmd),http_cmd);
            #endif
            
            sock.send_all(http_cmd, sizeof(http_cmd)-1);
            while (true) {
                ret = sock.receive(buffer, sizeof(buffer)-1);
                if (ret <= 0)
                    break;
                buffer[ret] = '\0';
                #ifdef SERIAL_DEBUG2
                pc.printf("Received %d chars from server:\r\n%s\r\n", ret, buffer);
                #endif
            }
            sock.close();
            
            LEDG=1;
            Led_green=0;
        }
        
       
        wait_ms(checkMessageAvailableInterval);   
    }

}