Laste version of the Balloons Ethernet Module
Dependencies: EthernetInterface mbed-rtos mbed nRF24L01P
Fork of TCPSocket_HelloWorld by
main.cpp@16:5d54ce685f6f, 2015-11-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |