Demo apps : receive a string from a client and respond with a different string, TCP/IP client

Dependencies:   CC3000_Hostdriver mbed

Note

Avnet Wi-Go board

For those using Avnet's Wi-Go board, there also is a full IOT demo available at
http://mbed.org/users/frankvnk/code/Wi-Go_IOT_Demo/

New cc3000 HostDriver release

For new projects, use cc3000 mbed socket compatible API driver and examples

Info

Demo application for testing the wireless CC3000 module on the Wi-Go board.

Warning

The on-board Firmware must be updated to mbed enable a Wi-Go system.
Goto the Component page to get the FirmwareUpdate tool (scroll down to the FirmwareUpdate topic).

Setup

Note

It is recommended to run initial tests WITHOUT security settings.

  • Setup a wireless router with a non-secured wireless connection using the wireless settings stored in doTCPIP.h.
  • Alternatively, these settings can be altered to match the wireless router settings (SSID, security and static IP parameters).
    When the unsecure test works, AP_KEY and AP_SECURITY can be enabled and set to your preferred values.
    Valid values for AP_SECURITY are : NONE, WEP, WPA and WPA2
// Modify the following settings as necessary for your Wi-Fi Network setup:
#define IP_ALLOC_METHOD USE_DHCP        // for DHCP assigned IP address   
//#define IP_ALLOC_METHOD USE_STATIC_IP // for static IP address

// Default SSID Settings
//#define AP_KEY         "thisthis" 
//#define AP_SECURITY    WPA2          // WPA2 must be enabled for use with iPhone or Android phone hotspot!

#define SSID           "iot"
#define STATIC_IP_OCT1 192
#define STATIC_IP_OCT2 168
#define STATIC_IP_OCT3 0
#define STATIC_IP_OCT4 10

#define STATIC_GW_OCT4 1       // Static Gateway address  = STATIC_IP_OCT1.STATIC_IP_OCT2.STATIC_IP_OCT3.STATIC_GW_OCT4


  • Download Python 2.7 from http://www.python.org/download/
    Install it on a computer able to make a wireless connection to the router we previously set up.
  • Make a wireless connection between your computer and the router.
  • Download this Python script to the Python2.7 folder (credit : Jim Carver from Avnet).
  • Import the CC3000_Simple_Socket code into your compiler and save it to the Wi-Go board.

Running the application for the first time

  • Open a terminal program (eg: TeraTerm) and connect to the Wi-Go module (serial speed : 115200 baud).
  • Press the reset button on the Wi-Go module.
  • Following startup screen will appear (the dots in the MAC address will show your CC3000's real MAC address):
CC3000 Python demo.


Wi-Go MAC address ..:..:..:..:..:..

FTC        1
PP_version 3.3
SERV_PACK  1.11
DRV_VER    7.13.19
FW_VER     7.12.14

<0> Normal run. SmartConfig will
    start if no valid connection exists.
<1> Connect using fixed SSID : iot
<2> TCP/IP client:
    Discover public IP address.
    Get time and date from a daytime server in Italy.
<9> SmartConfig.


  • For the initial test, select option <1> (Connect using fixed SSID : ...).
  • If all goes well, the following screen is shown (the IP address and mDNS status can be different):
Starting TCP/IP Server
RunSmartConfig= 0
Attempting SSID Connection
waiting
waiting
waiting
mDNS Status= 31be
Connected

*** Wi-Go board DHCP assigned IP Address = 192.168.0.101
mDNS Status= 3dbe
Server waiting for connection to Python


  • On the computer where you installed Python2.7:
    • Make sure the wireless connection between your computer and the router is active.
    • Open a DOS prompt and go to the folder where Python2.7 is installed.
    • Type following command :
python wigo_test.py -a 192.168.0.101 -p 15000


Note

Don't forget to replace the IP address with the real IP address assigned by DHCP to the CC3000 module.

If a connection is established, the DOS window will show

-----------------
run tcp client
-----------------
connected to  remote ip=192.168.0.101 remote port=15000
Press ENTER ....


In return the Wi-Go board will send following info to the serial port:

Connected


When we press Enter in the DOS window, the Wi-Go board will send following info to the serial port:

Input = Hello Wi-Go
status= 13
Done, press any key to repeat


And the DOS window will show:

recv from :  data:  Hello Python


Application option <2> : TCP/IP client

This is a simple demo to discover a public IP address and get the date and time from a daytime server (port 13).

Using the application's options <0> or <9>

Options <0> (Normal run) and <9> (SmartConfig) are very similar.
They both allow us to connect the CC3000 to another wireless network, without changing the pre-configured settings stored in doTCPIP.h.

As mentioned before, option <0> will automatically start SmartConfig if no valid connection exists (First Time Config),
but if the CC3000 was previously configured using SmartConfig, it will automatically connect to the wireless network.

Option <9> can be used to switch to another wireless connection.


See TI's pages on how to use the SmartConfig tool:

The Prefix can be set in cc3000.cpp. Do not change the default value for the prefix (TTT) when you want to use TI's Smartconfig application.

char aucCC3000_prefix[] = {'T', 'T', 'T'};      // Smart Config Prefix

The Device Name mentioned on the SmartConfig page is declared in doTCPIP.cpp

char DevServname[] = "CC3000";

Files at this revision

API Documentation at this revision

Comitter:
frankvnk
Date:
Sun Aug 18 07:06:20 2013 +0000
Parent:
1:32d1ef95eceb
Child:
3:63bff0590657
Commit message:
improved program output

Changed in this revision

cc3000.cpp Show annotated file Show diff for this revision Revisions of this file
doTCPIP.cpp Show annotated file Show diff for this revision Revisions of this file
doTCPIP.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/cc3000.cpp	Thu Aug 15 12:12:52 2013 +0000
+++ b/cc3000.cpp	Sun Aug 18 07:06:20 2013 +0000
@@ -64,7 +64,7 @@
 extern unsigned char ConnectUsingSmartConfig; 
 extern volatile unsigned long ulCC3000Connected;
 extern volatile unsigned long SendmDNSAdvertisment;
-extern int server_running;
+//extern int server_running;
 extern char DevServname[];
 volatile unsigned long ulSmartConfigFinished, ulCC3000DHCP, OkToDoShutDown, ulCC3000DHCP_configured;
 volatile unsigned char ucStopSmartConfig;
@@ -302,7 +302,7 @@
 
 void StartSmartConfig(void)
 {
-    server_running = 1;
+//    server_running = 1;
     RED_OFF;
     GREEN_OFF;
     BLUE_ON;
@@ -365,3 +365,4 @@
 }
 
 
+
--- a/doTCPIP.cpp	Thu Aug 15 12:12:52 2013 +0000
+++ b/doTCPIP.cpp	Sun Aug 18 07:06:20 2013 +0000
@@ -36,7 +36,7 @@
 #include "doTCPIP.h"
 
 volatile unsigned char newData;
-int server_running;
+//int server_running;
 unsigned char ForceFixedSSID;
 char runSmartConfig;            // Flag indicating whether user requested to perform Smart Config
 volatile unsigned long ulCC3000Connected;
@@ -85,7 +85,7 @@
     while(1)
     {
         newsock = -2;
-        printf("Server waiting for connection to Python\n");
+        printf("\nServer waiting for connection to Python\n");
         LED_D2_ON;
         while((newsock == -1) || (newsock == -2))
         {
@@ -95,12 +95,39 @@
         //receive TCP data
         if(newsock >= 0)
         {
-            recv(newsock, requestBuffer,20,0);
-            printf("Input = %s\n", requestBuffer);
-            stat = -2;
-            stat = send(newsock, python_msg, strlen(python_msg), 0);
-            printf("status= %d\n", stat);
-            LED_D2_OFF; 
+            stat = recv(newsock, requestBuffer,20,0);
+            if(stat > 0)
+            {
+                printf("Receive Status= %d, Input = %s\n", stat, requestBuffer);
+                stat = -2;
+                stat = send(newsock, python_msg, strlen(python_msg), 0);
+                printf("Send status= %d\n", stat);
+                LED_D2_OFF;
+            }
+            else
+            {
+                printf("ERROR %d", stat);
+                switch (stat)
+                {
+                    case -1:
+                    {
+                        printf(": remote socket closed.\n");
+                        break;
+                    }
+                    case -2:
+                    {
+                        printf(": no buffers available.\n");
+                        break;
+                    }
+                    case -57:
+                    {
+                        printf(": timeout - no reply from remote.\n");
+                        break;
+                    }
+                    default:
+                    printf("\n");
+                }
+            }
         } else printf("bad socket= %d\n", newsock);
         closesocket(newsock);
         printf("Done, press any key to repeat\n");
@@ -218,7 +245,7 @@
 void do_FTC(void)
 {
     printf("Running First Time Configuration\n");
-    server_running = 1;
+//    server_running = 1;
     runSmartConfig = 1;
     initTCPIP();
     RED_OFF;
--- a/doTCPIP.h	Thu Aug 15 12:12:52 2013 +0000
+++ b/doTCPIP.h	Sun Aug 18 07:06:20 2013 +0000
@@ -95,7 +95,7 @@
 extern userFS_t userFS;
 
 extern unsigned long ulSmartConfigFinished,ulCC3000DHCP, OkToDoShutDown, ulCC3000DHCP_configured;
-extern int server_running;
+//extern int server_running;
 extern volatile unsigned char newData;
 extern unsigned char ForceFixedSSID;
 extern char runSmartConfig;
@@ -135,3 +135,4 @@
 #endif // __cplusplus
 
 #endif // DOTCPIP_H
+
--- a/main.cpp	Thu Aug 15 12:12:52 2013 +0000
+++ b/main.cpp	Sun Aug 18 07:06:20 2013 +0000
@@ -23,7 +23,7 @@
     Init_HostDriver();
     runSmartConfig = 0;
     ulSmartConfigFinished = 0;
-    server_running = 1;
+//    server_running = 1;
     newData = 0;    
     socket_active_status = 0xFFFF;
     ForceFixedSSID = 0;
@@ -57,6 +57,8 @@
             {
                 do_FTC();
                 wlan_stop();
+                printf("\nPress any key to run the socket demo...\n");
+                getchar();
             }
             break;
         case '1':
@@ -64,10 +66,10 @@
             break;
         case '2':
             ForceFixedSSID = 0;
-            server_running = 1;
+//            server_running = 1;
             runSmartConfig = 1;
             initTCPIP();
-            server_running = 1;
+//            server_running = 1;
             RED_OFF;
             GREEN_OFF;
             BLUE_OFF;
@@ -83,7 +85,7 @@
             printf("Wrong selection.\n");
             printf("Reset the board and try again.\n");
     }
-    server_running = 0;
+//    server_running = 0;
     SmartConfigProfilestored = SMART_CONFIG_SET;
     RED_OFF;
     GREEN_OFF;