WiFi DipCortex / CC3000 Demo - Contains a menu driven set of tests to initalise and control the CC3000 radio. Also allowing you to test various TCP and UDP connections.

Dependencies:   NTPClient WebSocketClient cc3000_hostdriver_mbedsocket mbed HTTPClient

http://www.soldersplash.co.uk/products/wifi-dipcortex/

Please Note, this example uses the serial port so you will need an external RS232 TTL to USB adapter.

Committer:
SolderSplashLabs
Date:
Sat Oct 12 22:10:17 2013 +0000
Revision:
5:506f580e7ead
Parent:
4:4e5e094a81c0
Tweaks for robustness

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SolderSplashLabs 4:4e5e094a81c0 1 #include "mbed.h"
SolderSplashLabs 4:4e5e094a81c0 2 #include "cc3000.h"
SolderSplashLabs 4:4e5e094a81c0 3
SolderSplashLabs 4:4e5e094a81c0 4 #include "TCPSocketConnection.h"
SolderSplashLabs 4:4e5e094a81c0 5 #include "TCPSocketServer.h"
SolderSplashLabs 4:4e5e094a81c0 6
SolderSplashLabs 4:4e5e094a81c0 7 #include "HTTPClient.h"
SolderSplashLabs 4:4e5e094a81c0 8 #include "Websocket.h"
SolderSplashLabs 4:4e5e094a81c0 9
SolderSplashLabs 4:4e5e094a81c0 10 extern cc3000 wifi;
SolderSplashLabs 4:4e5e094a81c0 11 extern Serial pc;
SolderSplashLabs 4:4e5e094a81c0 12 HTTPClient http;
SolderSplashLabs 4:4e5e094a81c0 13
SolderSplashLabs 4:4e5e094a81c0 14 const char WEB_SOCKET_URL[] = {"ws://sockets.mbed.org/ws/SolderSplashLabs/wo"};
SolderSplashLabs 4:4e5e094a81c0 15 const char* ECHO_SERVER_ADDRESS = "192.168.0.10";
SolderSplashLabs 4:4e5e094a81c0 16 const int ECHO_SERVER_PORT_TCP = 80;
SolderSplashLabs 4:4e5e094a81c0 17 char hello[] = "Hello World\r\n";
SolderSplashLabs 4:4e5e094a81c0 18 char str[512];
SolderSplashLabs 4:4e5e094a81c0 19
SolderSplashLabs 4:4e5e094a81c0 20 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 4:4e5e094a81c0 21 /*!
SolderSplashLabs 4:4e5e094a81c0 22 @brief Exercise the HTTP Client library
SolderSplashLabs 4:4e5e094a81c0 23 */
SolderSplashLabs 4:4e5e094a81c0 24 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 4:4e5e094a81c0 25 void HttpClientTest ( void )
SolderSplashLabs 4:4e5e094a81c0 26 {
SolderSplashLabs 4:4e5e094a81c0 27 //GET data
SolderSplashLabs 4:4e5e094a81c0 28 printf("\r\nTrying to fetch page... \r\n");
SolderSplashLabs 4:4e5e094a81c0 29 int ret = http.get("http://mbed.org/media/uploads/donatien/hello.txt", str, 128);
SolderSplashLabs 4:4e5e094a81c0 30 if (!ret)
SolderSplashLabs 4:4e5e094a81c0 31 {
SolderSplashLabs 4:4e5e094a81c0 32 printf("Page fetched successfully - read %d characters \r\n", strlen(str));
SolderSplashLabs 4:4e5e094a81c0 33 printf("Result: %s \r\n", str);
SolderSplashLabs 4:4e5e094a81c0 34 }
SolderSplashLabs 4:4e5e094a81c0 35 else
SolderSplashLabs 4:4e5e094a81c0 36 {
SolderSplashLabs 4:4e5e094a81c0 37 printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
SolderSplashLabs 4:4e5e094a81c0 38 }
SolderSplashLabs 4:4e5e094a81c0 39
SolderSplashLabs 4:4e5e094a81c0 40 //POST data
SolderSplashLabs 4:4e5e094a81c0 41 HTTPMap map;
SolderSplashLabs 4:4e5e094a81c0 42 HTTPText inText(str, 512);
SolderSplashLabs 4:4e5e094a81c0 43 map.put("Hello", "World");
SolderSplashLabs 4:4e5e094a81c0 44 map.put("test", "1234");
SolderSplashLabs 4:4e5e094a81c0 45 printf(" \r\nTrying to post data... \r\n");
SolderSplashLabs 4:4e5e094a81c0 46 ret = http.post("http://httpbin.org/post", map, &inText);
SolderSplashLabs 4:4e5e094a81c0 47 if (!ret)
SolderSplashLabs 4:4e5e094a81c0 48 {
SolderSplashLabs 4:4e5e094a81c0 49 printf("Executed POST successfully - read %d characters \r\n", strlen(str));
SolderSplashLabs 4:4e5e094a81c0 50 printf("Result: %s \r\n", str);
SolderSplashLabs 4:4e5e094a81c0 51 }
SolderSplashLabs 4:4e5e094a81c0 52 else
SolderSplashLabs 4:4e5e094a81c0 53 {
SolderSplashLabs 4:4e5e094a81c0 54 printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
SolderSplashLabs 4:4e5e094a81c0 55 }
SolderSplashLabs 4:4e5e094a81c0 56
SolderSplashLabs 4:4e5e094a81c0 57 //PUT data
SolderSplashLabs 4:4e5e094a81c0 58 strcpy(str, "This is a PUT test!");
SolderSplashLabs 4:4e5e094a81c0 59 HTTPText outText(str);
SolderSplashLabs 4:4e5e094a81c0 60 //HTTPText inText(str, 512);
SolderSplashLabs 4:4e5e094a81c0 61 printf(" \r\nTrying to put resource... \r\n");
SolderSplashLabs 4:4e5e094a81c0 62 ret = http.put("http://httpbin.org/put", outText, &inText);
SolderSplashLabs 4:4e5e094a81c0 63 if (!ret)
SolderSplashLabs 4:4e5e094a81c0 64 {
SolderSplashLabs 4:4e5e094a81c0 65 printf("Executed PUT successfully - read %d characters \r\n", strlen(str));
SolderSplashLabs 4:4e5e094a81c0 66 printf("Result: %s \r\n", str);
SolderSplashLabs 4:4e5e094a81c0 67 }
SolderSplashLabs 4:4e5e094a81c0 68 else
SolderSplashLabs 4:4e5e094a81c0 69 {
SolderSplashLabs 4:4e5e094a81c0 70 printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
SolderSplashLabs 4:4e5e094a81c0 71 }
SolderSplashLabs 4:4e5e094a81c0 72
SolderSplashLabs 4:4e5e094a81c0 73 //DELETE data
SolderSplashLabs 4:4e5e094a81c0 74 //HTTPText inText(str, 512);
SolderSplashLabs 4:4e5e094a81c0 75 printf(" \r\nTrying to delete resource... \r\n");
SolderSplashLabs 4:4e5e094a81c0 76 ret = http.del("http://httpbin.org/delete", &inText);
SolderSplashLabs 4:4e5e094a81c0 77 if (!ret)
SolderSplashLabs 4:4e5e094a81c0 78 {
SolderSplashLabs 4:4e5e094a81c0 79 printf("Executed DELETE successfully - read %d characters \r\n", strlen(str));
SolderSplashLabs 4:4e5e094a81c0 80 printf("Result: %s \r\n", str);
SolderSplashLabs 4:4e5e094a81c0 81 }
SolderSplashLabs 4:4e5e094a81c0 82 else
SolderSplashLabs 4:4e5e094a81c0 83 {
SolderSplashLabs 4:4e5e094a81c0 84 printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
SolderSplashLabs 4:4e5e094a81c0 85 }
SolderSplashLabs 4:4e5e094a81c0 86
SolderSplashLabs 4:4e5e094a81c0 87 }
SolderSplashLabs 4:4e5e094a81c0 88
SolderSplashLabs 4:4e5e094a81c0 89 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 4:4e5e094a81c0 90 /*!
SolderSplashLabs 4:4e5e094a81c0 91 @brief Open a WebSocket, send a string
SolderSplashLabs 4:4e5e094a81c0 92 */
SolderSplashLabs 4:4e5e094a81c0 93 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 4:4e5e094a81c0 94 void WebSocketTest ( void )
SolderSplashLabs 4:4e5e094a81c0 95 {
SolderSplashLabs 4:4e5e094a81c0 96 int res = 0;
SolderSplashLabs 4:4e5e094a81c0 97 uint16_t counter = 0;
SolderSplashLabs 4:4e5e094a81c0 98 uint16_t reconnects = 0;
SolderSplashLabs 4:4e5e094a81c0 99 uint8_t myMAC[8];
SolderSplashLabs 4:4e5e094a81c0 100 char websocketstr[100];
SolderSplashLabs 4:4e5e094a81c0 101
SolderSplashLabs 4:4e5e094a81c0 102 wifi.get_mac_address(myMAC);
SolderSplashLabs 4:4e5e094a81c0 103
SolderSplashLabs 4:4e5e094a81c0 104 Websocket ws((char *)WEB_SOCKET_URL);
SolderSplashLabs 4:4e5e094a81c0 105 if ( ws.connect() )
SolderSplashLabs 4:4e5e094a81c0 106 {
SolderSplashLabs 4:4e5e094a81c0 107 printf("Connected to websocket server.\r\n");
SolderSplashLabs 4:4e5e094a81c0 108
SolderSplashLabs 4:4e5e094a81c0 109 printf("\r\n!! Press any key to stop sending !!\r\n\r\n");
SolderSplashLabs 4:4e5e094a81c0 110 while (1)
SolderSplashLabs 4:4e5e094a81c0 111 {
SolderSplashLabs 4:4e5e094a81c0 112 counter ++;
SolderSplashLabs 4:4e5e094a81c0 113 sprintf(websocketstr, "WiFi DipCortex / CC3000 - %05d - %02x:%02x:%02x:%02x:%02x:%02x\r\n", counter, myMAC[0], myMAC[1], myMAC[2], myMAC[3], myMAC[4], myMAC[5]);
SolderSplashLabs 5:506f580e7ead 114
SolderSplashLabs 5:506f580e7ead 115 if ( wifi.is_connected() )
SolderSplashLabs 4:4e5e094a81c0 116 {
SolderSplashLabs 5:506f580e7ead 117 res = ws.send(websocketstr);
SolderSplashLabs 5:506f580e7ead 118 printf("Reconnects : %05d, Messages Sent : %05d, Websocket send returned : %d.\r\n", reconnects, counter, res);
SolderSplashLabs 5:506f580e7ead 119
SolderSplashLabs 5:506f580e7ead 120 if ( -1 == res )
SolderSplashLabs 4:4e5e094a81c0 121 {
SolderSplashLabs 5:506f580e7ead 122 printf("Websocket Failure, reconnecting .... \r\n");
SolderSplashLabs 5:506f580e7ead 123 ws.close();
SolderSplashLabs 5:506f580e7ead 124 if ( ws.connect() )
SolderSplashLabs 5:506f580e7ead 125 {
SolderSplashLabs 5:506f580e7ead 126 // Reconnected
SolderSplashLabs 5:506f580e7ead 127 reconnects ++;
SolderSplashLabs 5:506f580e7ead 128 }
SolderSplashLabs 5:506f580e7ead 129 else
SolderSplashLabs 5:506f580e7ead 130 {
SolderSplashLabs 5:506f580e7ead 131 // Failure!
SolderSplashLabs 5:506f580e7ead 132 break;
SolderSplashLabs 5:506f580e7ead 133 }
SolderSplashLabs 4:4e5e094a81c0 134 }
SolderSplashLabs 5:506f580e7ead 135
SolderSplashLabs 5:506f580e7ead 136 wait_ms(1000);
SolderSplashLabs 4:4e5e094a81c0 137 }
SolderSplashLabs 5:506f580e7ead 138 else
SolderSplashLabs 5:506f580e7ead 139 {
SolderSplashLabs 5:506f580e7ead 140 printf("WiFi Connection Lost .... \r\n");
SolderSplashLabs 5:506f580e7ead 141 }
SolderSplashLabs 4:4e5e094a81c0 142
SolderSplashLabs 4:4e5e094a81c0 143 if ( pc.readable() )
SolderSplashLabs 4:4e5e094a81c0 144 {
SolderSplashLabs 4:4e5e094a81c0 145 pc.getc();
SolderSplashLabs 4:4e5e094a81c0 146 break;
SolderSplashLabs 4:4e5e094a81c0 147 }
SolderSplashLabs 4:4e5e094a81c0 148 }
SolderSplashLabs 4:4e5e094a81c0 149
SolderSplashLabs 4:4e5e094a81c0 150 ws.close();
SolderSplashLabs 4:4e5e094a81c0 151 printf("Websocket Closed \r\n");
SolderSplashLabs 4:4e5e094a81c0 152 }
SolderSplashLabs 4:4e5e094a81c0 153 }
SolderSplashLabs 4:4e5e094a81c0 154
SolderSplashLabs 4:4e5e094a81c0 155 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 4:4e5e094a81c0 156 /*!
SolderSplashLabs 4:4e5e094a81c0 157 @brief Open a TCP port send a string and wait for a reply
SolderSplashLabs 4:4e5e094a81c0 158 */
SolderSplashLabs 4:4e5e094a81c0 159 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 4:4e5e094a81c0 160 void TcpClientTest ( void )
SolderSplashLabs 4:4e5e094a81c0 161 {
SolderSplashLabs 4:4e5e094a81c0 162 uint16_t counter = 0;
SolderSplashLabs 4:4e5e094a81c0 163 TCPSocketConnection socket;
SolderSplashLabs 4:4e5e094a81c0 164 char buf[256];
SolderSplashLabs 4:4e5e094a81c0 165 int n = 0;
SolderSplashLabs 4:4e5e094a81c0 166
SolderSplashLabs 4:4e5e094a81c0 167 if (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT_TCP) < 0)
SolderSplashLabs 4:4e5e094a81c0 168 {
SolderSplashLabs 4:4e5e094a81c0 169 printf("Unable to connect to (%s) on port (%d)\r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT_TCP);
SolderSplashLabs 4:4e5e094a81c0 170 }
SolderSplashLabs 4:4e5e094a81c0 171 else
SolderSplashLabs 4:4e5e094a81c0 172 {
SolderSplashLabs 4:4e5e094a81c0 173 // Block for 1 second
SolderSplashLabs 4:4e5e094a81c0 174 socket.set_blocking( true, 1000 );
SolderSplashLabs 4:4e5e094a81c0 175
SolderSplashLabs 4:4e5e094a81c0 176 printf("\r\n!! Press any key to stop sending !!\r\n\r\n");
SolderSplashLabs 4:4e5e094a81c0 177 while (1)
SolderSplashLabs 4:4e5e094a81c0 178 {
SolderSplashLabs 4:4e5e094a81c0 179 counter ++;
SolderSplashLabs 4:4e5e094a81c0 180
SolderSplashLabs 4:4e5e094a81c0 181 n = socket.send_all(hello, sizeof(hello) - 1);
SolderSplashLabs 4:4e5e094a81c0 182
SolderSplashLabs 4:4e5e094a81c0 183 if ( n > 0 )
SolderSplashLabs 4:4e5e094a81c0 184 {
SolderSplashLabs 4:4e5e094a81c0 185 printf("%05d : TCP Socket Sent : Hello World\r\n", counter);
SolderSplashLabs 4:4e5e094a81c0 186 }
SolderSplashLabs 4:4e5e094a81c0 187 else
SolderSplashLabs 4:4e5e094a81c0 188 {
SolderSplashLabs 4:4e5e094a81c0 189 printf("Failed to send\r\n");
SolderSplashLabs 4:4e5e094a81c0 190 break;
SolderSplashLabs 4:4e5e094a81c0 191 }
SolderSplashLabs 4:4e5e094a81c0 192
SolderSplashLabs 4:4e5e094a81c0 193 n = socket.receive(buf, 256);
SolderSplashLabs 4:4e5e094a81c0 194
SolderSplashLabs 4:4e5e094a81c0 195 if ( n > 0 )
SolderSplashLabs 4:4e5e094a81c0 196 {
SolderSplashLabs 4:4e5e094a81c0 197 printf("TCP Socket Recv'd : %s \r\n", buf);
SolderSplashLabs 4:4e5e094a81c0 198 buf[n] = '\0';
SolderSplashLabs 4:4e5e094a81c0 199 }
SolderSplashLabs 4:4e5e094a81c0 200 else
SolderSplashLabs 4:4e5e094a81c0 201 {
SolderSplashLabs 4:4e5e094a81c0 202 buf[0] = '\0';
SolderSplashLabs 5:506f580e7ead 203 printf("TCP : Failed to Recv\r\n");
SolderSplashLabs 4:4e5e094a81c0 204 break;
SolderSplashLabs 4:4e5e094a81c0 205 }
SolderSplashLabs 4:4e5e094a81c0 206
SolderSplashLabs 4:4e5e094a81c0 207 wait_ms(50);
SolderSplashLabs 4:4e5e094a81c0 208
SolderSplashLabs 4:4e5e094a81c0 209 // Should we stop?
SolderSplashLabs 4:4e5e094a81c0 210 if ( pc.readable() )
SolderSplashLabs 4:4e5e094a81c0 211 {
SolderSplashLabs 4:4e5e094a81c0 212 pc.getc();
SolderSplashLabs 4:4e5e094a81c0 213 break;
SolderSplashLabs 4:4e5e094a81c0 214 }
SolderSplashLabs 4:4e5e094a81c0 215 }
SolderSplashLabs 5:506f580e7ead 216 if ( wifi.is_connected() )
SolderSplashLabs 5:506f580e7ead 217 {
SolderSplashLabs 5:506f580e7ead 218 socket.close();
SolderSplashLabs 5:506f580e7ead 219 }
SolderSplashLabs 4:4e5e094a81c0 220 printf("Completed.\r\n");
SolderSplashLabs 4:4e5e094a81c0 221 }
SolderSplashLabs 4:4e5e094a81c0 222 }
SolderSplashLabs 4:4e5e094a81c0 223
SolderSplashLabs 4:4e5e094a81c0 224 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 4:4e5e094a81c0 225 /*!
SolderSplashLabs 4:4e5e094a81c0 226 @brief Opens a sockets to listen for connections, upon connection a message is sent and the
SolderSplashLabs 4:4e5e094a81c0 227 client disconnected
SolderSplashLabs 4:4e5e094a81c0 228 */
SolderSplashLabs 4:4e5e094a81c0 229 // ------------------------------------------------------------------------------------------------------------
SolderSplashLabs 4:4e5e094a81c0 230 void TcpServerTest ( void )
SolderSplashLabs 4:4e5e094a81c0 231 {
SolderSplashLabs 4:4e5e094a81c0 232 int32_t status;
SolderSplashLabs 4:4e5e094a81c0 233 char buffer[256];
SolderSplashLabs 4:4e5e094a81c0 234 TCPSocketServer server;
SolderSplashLabs 4:4e5e094a81c0 235 TCPSocketConnection client;
SolderSplashLabs 4:4e5e094a81c0 236
SolderSplashLabs 4:4e5e094a81c0 237 server.bind(15000);
SolderSplashLabs 4:4e5e094a81c0 238 server.listen();
SolderSplashLabs 4:4e5e094a81c0 239 printf("\r\n!! Press any key to stop listening !!\r\n\r\n");
SolderSplashLabs 4:4e5e094a81c0 240 while (1)
SolderSplashLabs 4:4e5e094a81c0 241 {
SolderSplashLabs 4:4e5e094a81c0 242 status = server.accept(client);
SolderSplashLabs 4:4e5e094a81c0 243 if (status >= 0)
SolderSplashLabs 4:4e5e094a81c0 244 {
SolderSplashLabs 4:4e5e094a81c0 245 client.set_blocking(false, 1500); // Timeout after (1.5)s
SolderSplashLabs 4:4e5e094a81c0 246 printf("Connection from: %s \r\n", client.get_address());
SolderSplashLabs 4:4e5e094a81c0 247 //client.receive(buffer, sizeof(buffer));
SolderSplashLabs 4:4e5e094a81c0 248 //printf("Received: %s \r\n",buffer);
SolderSplashLabs 4:4e5e094a81c0 249 printf("Sending the message to the server. \r\n");
SolderSplashLabs 4:4e5e094a81c0 250 client.send_all(hello, sizeof(hello));
SolderSplashLabs 4:4e5e094a81c0 251 client.close();
SolderSplashLabs 4:4e5e094a81c0 252 }
SolderSplashLabs 4:4e5e094a81c0 253
SolderSplashLabs 4:4e5e094a81c0 254 // Should we stop?
SolderSplashLabs 4:4e5e094a81c0 255 if ( pc.readable() )
SolderSplashLabs 4:4e5e094a81c0 256 {
SolderSplashLabs 4:4e5e094a81c0 257 pc.getc();
SolderSplashLabs 4:4e5e094a81c0 258 break;
SolderSplashLabs 4:4e5e094a81c0 259 }
SolderSplashLabs 5:506f580e7ead 260
SolderSplashLabs 5:506f580e7ead 261 if ( wifi.is_connected() )
SolderSplashLabs 5:506f580e7ead 262 {
SolderSplashLabs 5:506f580e7ead 263 break;
SolderSplashLabs 5:506f580e7ead 264 }
SolderSplashLabs 5:506f580e7ead 265 }
SolderSplashLabs 5:506f580e7ead 266
SolderSplashLabs 5:506f580e7ead 267 if ( wifi.is_connected() )
SolderSplashLabs 5:506f580e7ead 268 {
SolderSplashLabs 5:506f580e7ead 269 server.close();
SolderSplashLabs 4:4e5e094a81c0 270 }
SolderSplashLabs 4:4e5e094a81c0 271 }