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";
Committer:
frankvnk
Date:
Thu Oct 17 18:10:26 2013 +0000
Revision:
7:f13025166308
Parent:
6:4fb3776a9b92
HostDriver update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 0:a8e46e27d041 1 #include "mbed.h"
frankvnk 0:a8e46e27d041 2 #include "doTCPIP.h"
frankvnk 0:a8e46e27d041 3
frankvnk 1:32d1ef95eceb 4
frankvnk 0:a8e46e27d041 5 // Serial USB port
frankvnk 0:a8e46e27d041 6 Serial pc(USBTX, USBRX);
frankvnk 0:a8e46e27d041 7
frankvnk 0:a8e46e27d041 8 //Wi-Go battery charger control
frankvnk 0:a8e46e27d041 9 DigitalOut PWR_EN1(PTB2);
frankvnk 0:a8e46e27d041 10 DigitalOut PWR_EN2(PTB3);
frankvnk 0:a8e46e27d041 11
frankvnk 0:a8e46e27d041 12 int main()
frankvnk 0:a8e46e27d041 13 {
frankvnk 0:a8e46e27d041 14 char c;
frankvnk 0:a8e46e27d041 15 // set current to 500mA since we're turning on the Wi-Fi
frankvnk 0:a8e46e27d041 16 PWR_EN1 = 0;
frankvnk 0:a8e46e27d041 17 PWR_EN2 = 1;
frankvnk 0:a8e46e27d041 18
frankvnk 0:a8e46e27d041 19 //Set baudrate to 115200 instead of the default 9600
frankvnk 0:a8e46e27d041 20 pc.baud (115200);
frankvnk 0:a8e46e27d041 21
frankvnk 0:a8e46e27d041 22 initLEDs();
frankvnk 0:a8e46e27d041 23 Init_HostDriver();
frankvnk 0:a8e46e27d041 24 runSmartConfig = 0;
frankvnk 0:a8e46e27d041 25 ulSmartConfigFinished = 0;
frankvnk 2:13ced2cb5933 26 // server_running = 1;
frankvnk 0:a8e46e27d041 27 newData = 0;
frankvnk 0:a8e46e27d041 28 socket_active_status = 0xFFFF;
frankvnk 0:a8e46e27d041 29 ForceFixedSSID = 0;
frankvnk 0:a8e46e27d041 30
frankvnk 0:a8e46e27d041 31 GREEN_ON;
frankvnk 1:32d1ef95eceb 32
frankvnk 0:a8e46e27d041 33 // Trigger a WLAN device
frankvnk 0:a8e46e27d041 34 wlan_start(0);
frankvnk 0:a8e46e27d041 35 nvmem_read( NVMEM_USER_FILE_1_FILEID, sizeof(userFS), 0, (unsigned char *) &userFS);
frankvnk 0:a8e46e27d041 36 nvmem_get_mac_address(myMAC);
frankvnk 0:a8e46e27d041 37 printf("\x1B[2J"); //VT100 erase screen
frankvnk 0:a8e46e27d041 38 printf("\x1B[H"); //VT100 home
frankvnk 0:a8e46e27d041 39 printf("CC3000 Python demo.\n");
frankvnk 0:a8e46e27d041 40 print_mac();
frankvnk 0:a8e46e27d041 41 wlan_stop();
frankvnk 0:a8e46e27d041 42 printf("FTC %i\n",userFS.FTC);
frankvnk 0:a8e46e27d041 43 printf("PP_version %i.%i\n",userFS.PP_version[0], userFS.PP_version[1]);
frankvnk 0:a8e46e27d041 44 printf("SERV_PACK %i.%i\n",userFS.SERV_PACK[0], userFS.SERV_PACK[1]);
frankvnk 0:a8e46e27d041 45 printf("DRV_VER %i.%i.%i\n",userFS.DRV_VER[0], userFS.DRV_VER[1], userFS.DRV_VER[2]);
frankvnk 0:a8e46e27d041 46 printf("FW_VER %i.%i.%i\n",userFS.FW_VER[0], userFS.FW_VER[1], userFS.FW_VER[2]);
frankvnk 0:a8e46e27d041 47
frankvnk 0:a8e46e27d041 48 printf("\n<0> Normal run. SmartConfig will\n start if no valid connection exists.\n");
frankvnk 0:a8e46e27d041 49 printf("<1> Connect using fixed SSID : %s\n", SSID);
frankvnk 6:4fb3776a9b92 50 printf("<2> TCP/IP client:\n Discover public IP address.\n Get time and date from a daytime server in Italy.\n");
frankvnk 6:4fb3776a9b92 51 printf("<9> SmartConfig.\n");
frankvnk 0:a8e46e27d041 52 c = getchar();
frankvnk 0:a8e46e27d041 53 switch (c)
frankvnk 0:a8e46e27d041 54 {
frankvnk 0:a8e46e27d041 55 case '0':
frankvnk 0:a8e46e27d041 56 ForceFixedSSID = 0;
frankvnk 0:a8e46e27d041 57 if(!userFS.FTC)
frankvnk 0:a8e46e27d041 58 {
frankvnk 0:a8e46e27d041 59 do_FTC();
frankvnk 0:a8e46e27d041 60 wlan_stop();
frankvnk 2:13ced2cb5933 61 printf("\nPress any key to run the socket demo...\n");
frankvnk 2:13ced2cb5933 62 getchar();
frankvnk 0:a8e46e27d041 63 }
frankvnk 0:a8e46e27d041 64 break;
frankvnk 0:a8e46e27d041 65 case '1':
frankvnk 0:a8e46e27d041 66 ForceFixedSSID = 1;
frankvnk 0:a8e46e27d041 67 break;
frankvnk 0:a8e46e27d041 68 case '2':
frankvnk 6:4fb3776a9b92 69 SmartConfigProfilestored = SMART_CONFIG_SET;
frankvnk 6:4fb3776a9b92 70 // Run TCP/IP Client connection demo.
frankvnk 6:4fb3776a9b92 71 // Discover public IP address
frankvnk 6:4fb3776a9b92 72 runTCPIPclient( SRV_IP_OCT1, SRV_IP_OCT2, SRV_IP_OCT3, SRV_IP_OCT4, SRV_PORT);
frankvnk 6:4fb3776a9b92 73 wait(3);
frankvnk 6:4fb3776a9b92 74 // Take date and time fomr daytime server (well know port 13)
frankvnk 6:4fb3776a9b92 75 runTCPIPclient( TMSRV_IP_OCT1, TMSRV_IP_OCT2, TMSRV_IP_OCT3, TMSRV_IP_OCT4, TMSRV_PORT);
frankvnk 6:4fb3776a9b92 76 printf("Finished - Press reset to restart.\n");
frankvnk 6:4fb3776a9b92 77 while(1);
frankvnk 6:4fb3776a9b92 78 case '9':
frankvnk 0:a8e46e27d041 79 ForceFixedSSID = 0;
frankvnk 2:13ced2cb5933 80 // server_running = 1;
frankvnk 0:a8e46e27d041 81 runSmartConfig = 1;
frankvnk 0:a8e46e27d041 82 initTCPIP();
frankvnk 2:13ced2cb5933 83 // server_running = 1;
frankvnk 0:a8e46e27d041 84 RED_OFF;
frankvnk 0:a8e46e27d041 85 GREEN_OFF;
frankvnk 0:a8e46e27d041 86 BLUE_OFF;
frankvnk 1:32d1ef95eceb 87 printf("Press the reset button on your board........\n");
frankvnk 0:a8e46e27d041 88 while(1)
frankvnk 0:a8e46e27d041 89 {
frankvnk 0:a8e46e27d041 90 GREEN_ON;
frankvnk 0:a8e46e27d041 91 wait_ms(500);
frankvnk 0:a8e46e27d041 92 GREEN_OFF;
frankvnk 0:a8e46e27d041 93 wait_ms(500);
frankvnk 0:a8e46e27d041 94 }
frankvnk 0:a8e46e27d041 95 default:
frankvnk 0:a8e46e27d041 96 printf("Wrong selection.\n");
frankvnk 0:a8e46e27d041 97 printf("Reset the board and try again.\n");
frankvnk 0:a8e46e27d041 98 }
frankvnk 2:13ced2cb5933 99 // server_running = 0;
frankvnk 0:a8e46e27d041 100 SmartConfigProfilestored = SMART_CONFIG_SET;
frankvnk 0:a8e46e27d041 101 RED_OFF;
frankvnk 0:a8e46e27d041 102 GREEN_OFF;
frankvnk 0:a8e46e27d041 103 BLUE_OFF;
frankvnk 0:a8e46e27d041 104 runTCPIPserver(); // Run TCP/IP Connection to host
frankvnk 0:a8e46e27d041 105 }