Laste version of the Balloons Ethernet Module

Dependencies:   EthernetInterface mbed-rtos mbed nRF24L01P

Fork of TCPSocket_HelloWorld by mbed official

Committer:
yanndouze
Date:
Thu Nov 19 11:54:01 2015 +0000
Revision:
16:5d54ce685f6f
Parent:
11:59dcefdda506
Pour toi Christophe; Derni?re version du Module_Ethernet balloons...;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yanndouze 16:5d54ce685f6f 1 /*
yanndouze 16:5d54ce685f6f 2 * Balloons module Ethernet
yanndouze 16:5d54ce685f6f 3 * Autheur : Yann DOUZE douze.yann@gmail.com
yanndouze 16:5d54ce685f6f 4 * Date : 2015/06/24
yanndouze 16:5d54ce685f6f 5 * Version 0.9
yanndouze 16:5d54ce685f6f 6 */
yanndouze 16:5d54ce685f6f 7
donatien 0:bb128f0e952f 8 #include "mbed.h"
donatien 0:bb128f0e952f 9 #include "EthernetInterface.h"
yanndouze 16:5d54ce685f6f 10 #include "nRF24L01P.h"
yanndouze 16:5d54ce685f6f 11
yanndouze 16:5d54ce685f6f 12 /****** declaration des define ******/
yanndouze 16:5d54ce685f6f 13 #define SERIAL_DEBUG2
yanndouze 16:5d54ce685f6f 14 //#define SERIAL_DEBUG
yanndouze 16:5d54ce685f6f 15 //#define C_SENSOR_DEBUG
yanndouze 16:5d54ce685f6f 16 #define SEND_DEBUG
yanndouze 16:5d54ce685f6f 17 #define ON 0
yanndouze 16:5d54ce685f6f 18 #define OFF 1
yanndouze 16:5d54ce685f6f 19 #define TRANSFER_SIZE 4
yanndouze 16:5d54ce685f6f 20
yanndouze 16:5d54ce685f6f 21 /****** declaration des objets ******/
yanndouze 16:5d54ce685f6f 22
yanndouze 16:5d54ce685f6f 23 Serial pc(USBTX, USBRX);
yanndouze 16:5d54ce685f6f 24 nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10); // mosi, miso, sck, csn, ce, irq
yanndouze 16:5d54ce685f6f 25 //P0_9, P0_8, P0_7, P0_6, P0_0, P0_6 sur Arch Pro (LPC1768)
yanndouze 16:5d54ce685f6f 26 //D11, D12, D13, D10, D8, D9 sur ARduino
yanndouze 16:5d54ce685f6f 27
yanndouze 16:5d54ce685f6f 28 DigitalOut LEDG(LED1);
yanndouze 16:5d54ce685f6f 29 DigitalOut LEDR(LED2);
yanndouze 16:5d54ce685f6f 30 DigitalOut LEDB(LED3);
yanndouze 16:5d54ce685f6f 31 DigitalOut LEDW(LED4);
yanndouze 16:5d54ce685f6f 32 DigitalOut Led_green(P2_3);
yanndouze 16:5d54ce685f6f 33 DigitalOut Led_blue(P0_4);
yanndouze 16:5d54ce685f6f 34
yanndouze 16:5d54ce685f6f 35 /****** variables globales ******/
yanndouze 16:5d54ce685f6f 36
yanndouze 16:5d54ce685f6f 37 char APIServer[] = "mcuconnectorapi.azurewebsites.net";
yanndouze 16:5d54ce685f6f 38 int DeviceId=1200;
yanndouze 16:5d54ce685f6f 39 unsigned long MACId=0;
yanndouze 16:5d54ce685f6f 40 char MobileId1[]="\"12\"";
yanndouze 16:5d54ce685f6f 41 char MobileId2[]="\"13\"";
yanndouze 16:5d54ce685f6f 42 char MobileId3[]="\"14\"";
yanndouze 16:5d54ce685f6f 43 int checkMessageAvailableInterval = 2000;// ms
yanndouze 16:5d54ce685f6f 44 char messageIsAvailable[] = "/api/IsMessageAvailable/device/";
yanndouze 16:5d54ce685f6f 45 //String APIADDRESS_pushData = "api/PushData/type/";// << Il faut bien rajouter /value/{value} après le type!
yanndouze 16:5d54ce685f6f 46 char sayHello[]="/api/SayHello/device/";
yanndouze 16:5d54ce685f6f 47 char Get_message[]="GET %s%d HTTP/1.1\r\nHost: %s\r\nUser-Agent: arduino-ethernet\r\nConnection: close\r\n\r\n";
yanndouze 16:5d54ce685f6f 48 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";
yanndouze 16:5d54ce685f6f 49 extern "C" void mbed_mac_address(char *mac);
yanndouze 16:5d54ce685f6f 50
donatien 0:bb128f0e952f 51
emilmont 7:65188f4a8c25 52 int main() {
yanndouze 16:5d54ce685f6f 53 LEDB=1;
yanndouze 16:5d54ce685f6f 54 LEDW=1;
yanndouze 16:5d54ce685f6f 55 LEDR=0;
yanndouze 16:5d54ce685f6f 56 LEDG=1;
yanndouze 16:5d54ce685f6f 57 Led_green=0;
yanndouze 16:5d54ce685f6f 58 Led_blue=0;
donatien 0:bb128f0e952f 59 EthernetInterface eth;
yanndouze 16:5d54ce685f6f 60 int Last_MobileId=12;
yanndouze 16:5d54ce685f6f 61 char mac[6];
yanndouze 16:5d54ce685f6f 62 char http_cmd[256];
yanndouze 16:5d54ce685f6f 63 char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
yanndouze 16:5d54ce685f6f 64 txData[0]='A'; //A comme allume
yanndouze 16:5d54ce685f6f 65 txData[1]='L'; //L comme lampe
yanndouze 16:5d54ce685f6f 66 txData[3]=0x30;
yanndouze 16:5d54ce685f6f 67 int SendCounter=0;
yanndouze 16:5d54ce685f6f 68 int txDataCnt = 4;
yanndouze 16:5d54ce685f6f 69 int rxDataCnt = 0;
yanndouze 16:5d54ce685f6f 70 pc.baud(115200);
yanndouze 16:5d54ce685f6f 71 pc.printf("Hello World ! \r\n");
yanndouze 16:5d54ce685f6f 72 pc.printf("Ethetnet Init ! \r\n");
donatien 0:bb128f0e952f 73
yanndouze 16:5d54ce685f6f 74 eth.init(); //Use DHCP
yanndouze 16:5d54ce685f6f 75 int ret=eth.connect();
yanndouze 16:5d54ce685f6f 76 if(ret==0)
yanndouze 16:5d54ce685f6f 77 {
yanndouze 16:5d54ce685f6f 78 pc.printf("IP Address is %s \r\n", eth.getIPAddress());
yanndouze 16:5d54ce685f6f 79 LEDB=0;
yanndouze 16:5d54ce685f6f 80 Led_blue=1;
yanndouze 16:5d54ce685f6f 81 mbed_mac_address(mac);
yanndouze 16:5d54ce685f6f 82 for(int i=0; i<6;i++) {
yanndouze 16:5d54ce685f6f 83 printf("%02X ", mac[i]);
yanndouze 16:5d54ce685f6f 84 MACId+=mac[i];
yanndouze 16:5d54ce685f6f 85 }
yanndouze 16:5d54ce685f6f 86 printf("\n");
yanndouze 16:5d54ce685f6f 87 //MACId = atol(mac);
yanndouze 16:5d54ce685f6f 88 printf("MacId= %d\n",MACId);
yanndouze 16:5d54ce685f6f 89 }
yanndouze 16:5d54ce685f6f 90 else
yanndouze 16:5d54ce685f6f 91 {
yanndouze 16:5d54ce685f6f 92 pc.printf("No Ethernet connection \r\n");
yanndouze 16:5d54ce685f6f 93 LEDB=1;
yanndouze 16:5d54ce685f6f 94 Led_blue=0;
yanndouze 16:5d54ce685f6f 95 }
donatien 0:bb128f0e952f 96
yanndouze 16:5d54ce685f6f 97
yanndouze 16:5d54ce685f6f 98 TCPSocketConnection sock;
yanndouze 16:5d54ce685f6f 99 my_nrf24l01p.powerUp();
yanndouze 16:5d54ce685f6f 100 // Display the (default) setup of the nRF24L01+ chip
yanndouze 16:5d54ce685f6f 101 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() );
yanndouze 16:5d54ce685f6f 102 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() );
yanndouze 16:5d54ce685f6f 103 pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
yanndouze 16:5d54ce685f6f 104 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
yanndouze 16:5d54ce685f6f 105 pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
yanndouze 16:5d54ce685f6f 106
yanndouze 16:5d54ce685f6f 107 //pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
emilmont 7:65188f4a8c25 108
yanndouze 16:5d54ce685f6f 109 my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
yanndouze 16:5d54ce685f6f 110
yanndouze 16:5d54ce685f6f 111 my_nrf24l01p.setReceiveMode();
yanndouze 16:5d54ce685f6f 112 my_nrf24l01p.enable();
yanndouze 16:5d54ce685f6f 113 LEDW=0;
yanndouze 16:5d54ce685f6f 114 while(1)
yanndouze 16:5d54ce685f6f 115 {
yanndouze 16:5d54ce685f6f 116 sock.connect(APIServer, 80);
yanndouze 16:5d54ce685f6f 117 #ifdef SERIAL_DEBUG
yanndouze 16:5d54ce685f6f 118 pc.printf("Fetch url ! \r\n");
yanndouze 16:5d54ce685f6f 119 #endif
yanndouze 16:5d54ce685f6f 120 sprintf(http_cmd,Get_message,messageIsAvailable,DeviceId,APIServer);
yanndouze 16:5d54ce685f6f 121
yanndouze 16:5d54ce685f6f 122 //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";
yanndouze 16:5d54ce685f6f 123 #ifdef SERIAL_DEBUG
yanndouze 16:5d54ce685f6f 124 pc.printf("message : %d \r\n %s \r\n",strlen(http_cmd),http_cmd);
yanndouze 16:5d54ce685f6f 125 #endif
yanndouze 16:5d54ce685f6f 126
yanndouze 16:5d54ce685f6f 127 sock.send_all(http_cmd, sizeof(http_cmd)-1);
yanndouze 16:5d54ce685f6f 128
yanndouze 16:5d54ce685f6f 129 char buffer[300];
yanndouze 16:5d54ce685f6f 130 int ret;
yanndouze 16:5d54ce685f6f 131 while (true) {
yanndouze 16:5d54ce685f6f 132 ret = sock.receive(buffer, sizeof(buffer)-1);
yanndouze 16:5d54ce685f6f 133 if (ret <= 0)
yanndouze 16:5d54ce685f6f 134 break;
yanndouze 16:5d54ce685f6f 135 buffer[ret] = '\0';
yanndouze 16:5d54ce685f6f 136 #ifdef SERIAL_DEBUG
yanndouze 16:5d54ce685f6f 137 pc.printf("Received %d chars from server:\r\n%s\r\n", ret, buffer);
yanndouze 16:5d54ce685f6f 138 #endif
yanndouze 16:5d54ce685f6f 139 }
yanndouze 16:5d54ce685f6f 140 sock.close();
yanndouze 16:5d54ce685f6f 141
yanndouze 16:5d54ce685f6f 142 if(strstr(buffer,MobileId1))
yanndouze 16:5d54ce685f6f 143 {
yanndouze 16:5d54ce685f6f 144 LEDG = 0;
yanndouze 16:5d54ce685f6f 145 Led_green=1;
yanndouze 16:5d54ce685f6f 146 pc.printf("Une pensee est arrive du mobile 12! \r\n");
yanndouze 16:5d54ce685f6f 147 txData[2]=SendCounter++;
yanndouze 16:5d54ce685f6f 148 txData[3]=12;
yanndouze 16:5d54ce685f6f 149 if(SendCounter==255) SendCounter=0;
yanndouze 16:5d54ce685f6f 150 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );
yanndouze 16:5d54ce685f6f 151 Last_MobileId=12;
yanndouze 16:5d54ce685f6f 152 }
yanndouze 16:5d54ce685f6f 153 if(strstr(buffer,MobileId2))
yanndouze 16:5d54ce685f6f 154 {
yanndouze 16:5d54ce685f6f 155 LEDG = 0;
yanndouze 16:5d54ce685f6f 156 Led_green=1;
yanndouze 16:5d54ce685f6f 157 pc.printf("Une pensee est arrive du mobile 13! \r\n");
yanndouze 16:5d54ce685f6f 158 txData[2]=SendCounter++;
yanndouze 16:5d54ce685f6f 159 txData[3]=13;
yanndouze 16:5d54ce685f6f 160 if(SendCounter==255) SendCounter=0;
yanndouze 16:5d54ce685f6f 161 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );
yanndouze 16:5d54ce685f6f 162 Last_MobileId=13;
yanndouze 16:5d54ce685f6f 163 }
yanndouze 16:5d54ce685f6f 164 if(strstr(buffer,MobileId3))
yanndouze 16:5d54ce685f6f 165 {
yanndouze 16:5d54ce685f6f 166 LEDG = 0;
yanndouze 16:5d54ce685f6f 167 Led_green=1;
yanndouze 16:5d54ce685f6f 168 pc.printf("Une pensee est arrive du mobile 14! \r\n");
yanndouze 16:5d54ce685f6f 169 txData[2]=SendCounter++;
yanndouze 16:5d54ce685f6f 170 txData[3]=14;
yanndouze 16:5d54ce685f6f 171 if(SendCounter==255) SendCounter=0;
yanndouze 16:5d54ce685f6f 172 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );
yanndouze 16:5d54ce685f6f 173 Last_MobileId=14;
yanndouze 16:5d54ce685f6f 174 }
yanndouze 16:5d54ce685f6f 175
yanndouze 16:5d54ce685f6f 176 if ( my_nrf24l01p.readable() ) {
yanndouze 16:5d54ce685f6f 177 // ...read the data into the receive buffer
yanndouze 16:5d54ce685f6f 178 rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
yanndouze 16:5d54ce685f6f 179 if(rxData[3]==0x31){
yanndouze 16:5d54ce685f6f 180 pc.putc( rxData[0] );
yanndouze 16:5d54ce685f6f 181 pc.putc( rxData[1] );
yanndouze 16:5d54ce685f6f 182 pc.printf(" Message %d \r\n",rxData[2]);
yanndouze 16:5d54ce685f6f 183 }
yanndouze 16:5d54ce685f6f 184 // Toggle LED2 (to help debug nRF24L01+ -> Host communication)
yanndouze 16:5d54ce685f6f 185 sock.connect(APIServer, 80);
yanndouze 16:5d54ce685f6f 186 #ifdef SERIAL_DEBUG2
yanndouze 16:5d54ce685f6f 187 pc.printf("Send SayHello !\r\n");
yanndouze 16:5d54ce685f6f 188 #endif
yanndouze 16:5d54ce685f6f 189 sprintf(http_cmd,Send_message,sayHello,DeviceId,Last_MobileId,APIServer);
yanndouze 16:5d54ce685f6f 190
yanndouze 16:5d54ce685f6f 191 //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";
yanndouze 16:5d54ce685f6f 192 #ifdef SERIAL_DEBUG2
yanndouze 16:5d54ce685f6f 193 pc.printf("message : %d \r\n %s \r\n",strlen(http_cmd),http_cmd);
yanndouze 16:5d54ce685f6f 194 #endif
yanndouze 16:5d54ce685f6f 195
yanndouze 16:5d54ce685f6f 196 sock.send_all(http_cmd, sizeof(http_cmd)-1);
yanndouze 16:5d54ce685f6f 197 while (true) {
yanndouze 16:5d54ce685f6f 198 ret = sock.receive(buffer, sizeof(buffer)-1);
yanndouze 16:5d54ce685f6f 199 if (ret <= 0)
yanndouze 16:5d54ce685f6f 200 break;
yanndouze 16:5d54ce685f6f 201 buffer[ret] = '\0';
yanndouze 16:5d54ce685f6f 202 #ifdef SERIAL_DEBUG2
yanndouze 16:5d54ce685f6f 203 pc.printf("Received %d chars from server:\r\n%s\r\n", ret, buffer);
yanndouze 16:5d54ce685f6f 204 #endif
yanndouze 16:5d54ce685f6f 205 }
yanndouze 16:5d54ce685f6f 206 sock.close();
yanndouze 16:5d54ce685f6f 207
yanndouze 16:5d54ce685f6f 208 LEDG=1;
yanndouze 16:5d54ce685f6f 209 Led_green=0;
yanndouze 16:5d54ce685f6f 210 }
yanndouze 16:5d54ce685f6f 211
yanndouze 16:5d54ce685f6f 212
yanndouze 16:5d54ce685f6f 213 wait_ms(checkMessageAvailableInterval);
emilmont 7:65188f4a8c25 214 }
yanndouze 16:5d54ce685f6f 215
donatien 0:bb128f0e952f 216 }