cc3000 simple socket demo (not using EthernetInterface) !

Dependencies:   NVIC_set_all_priorities cc3000_hostdriver_mbedsocket mbed

Info

Simple Socket demo application for the wireless CC3000 module.

Warning

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

Setup

Note

It is recommended to run an initial test WITHOUT security settings.

Changing network parameters in main.h

  • Setup a wireless router with a non-secure wireless connection using the wireless settings stored in main.h
    or set SSID to your wireless router SSID. For now, do not change USE_SMART_CONFIG and AP_KEY,
    only change AP_SECURITY to NONE.

// use smart config
#define USE_SMART_CONFIG 0

 // Default SSID Settings
#define AP_KEY       "test"
#define AP_SECURITY  NONE
#define SSID         "test"
  • By default, DHCP is used to obtain the IP address.
    When you want to use a fixed IP address, set IP_ALLOC_METHOD USE_STATIC_IP and enter your preferred values for STATIC_IP_OCT_x (device IP address) and STATIC_GW_OCT4 (4th number of your gateway IP address) .
    See the next chapter on how to use USE_SMART_CONFIG.

Setting up the Python script

  • Download Python 2.7 from http://www.python.org/download/
    Install it on a computer connected to the router you previously set up (wireless or wired).
  • Download this Python script to the Python2.7 folder (credit : Jim Carver from Avnet).
  • Compile the CC3000_Simple_Socket_demo code and save it to your board.

Running the application for the first time

  • Open a terminal program (eg: TeraTerm) and connect to your board (serial speed : 115200 baud).
  • Press the reset button on your board.
  • Following startup screen will appear :

Note

The version info can be different.
the dots in the MAC address will show your CC3000's real MAC address.

cc3000 simple socket demo.
MAC address + cc3000 info
 MAC address ..:..:..:..:..:..

 FTC        0
 PP_version 3.4
 SERV_PACK  1.11
 DRV_VER    7.14.24
 FW_VER     7.12.14
User's AP setup: SSID: "test", Password: "test", Security: 3

<0> Normal run. SmartConfig will
    start if no valid connection exists.
<1> Connect using fixed SSID without AP_KEY: test
<2> Connect using fixed SSID with AP_KEY: test
<8> Erase all stored profiles.
<9> SmartConfig.


  • For the initial test, select option <1> (Connect using fixed SSID without AP_KEY: ...).
  • If all goes well, the following screen is shown (the IP address can be different):
Attempting SSID Connection.
DHCP request
  Waiting for dhcp to be set.
  Waiting for dhcp to be set.
DHCP assigned IP Address = 192.168.1.100


  • On the computer where you installed Python2.7:
    • Make sure the connection between your computer and the wireless 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 controller board will send following info to the serial port:

Connection from: 192.168.1.101


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

Connection from: 192.168.0.10
Received: Hello Wi-Go
Sending the message to the server.


And the DOS window will show:

recv from :  data:  Hello Python


Using option <2>

  • In your wireless router, change the non-secure wireless connection to WEP, WPA or WPA2 and enter a security key.
  • In main.h, update AP_SECURITY and AP_KEY with the values you set in your wireless router.
    Valid values for AP_SECURITY are : NONE, WEP, WPA and WPA2
  • Recompile the code and save it to your board. Reconnect the terminal program and press reset on your board.
  • When the selection menu appears, choose option <2>.
    The communication sequence for option <2> is identical as described for option <1> but now a secure connection is used.

Using the application's options <0>, <8> and <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 wireless settings stored in main.h.
    Option <0> will only start SmartConfig if no valid connection exists (First Time Config),
    but if the CC3000 was previously configured using SmartConfig, it will automatically connect using the stored wireless network profile.
  • Option <8> : As there are only 7 profile slots available, this option can be used to erase all stored profiles.
  • Option <9> allows the user to switch to another wireless connection.
    This connection is stored in one of the 7 profiles. More info on profile priorities is available here.


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

Revision:
1:99076f2d9408
Parent:
0:ce33c63eefe5
Child:
2:c8cdcef31933
--- a/doTCPIP.cpp	Sun Sep 08 18:31:33 2013 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +0,0 @@
-#include "doTCPIP.h"
-#include "cc3000.h"
-#include "main.h"
-
-using namespace mbed_cc3000;
-
-extern cc3000 wigo;
-
-//volatile uint8_t newData;
-// int32_t server_running;
-//uint8_t ForceFixedSSID;
-//int8_t runSmartConfig;            // Flag indicating whether user requested to perform Smart Config
-//volatile uint32_t ulCC3000Connected;
-uint8_t ConnectUsingSmartConfig;
-uint8_t myMAC[8];
-tUserFS userFS;
-
-int8_t requestBuffer[REQ_BUFFER_SIZE];
-//int32_t LAN_Connected = 0;
-
-uint8_t SmartConfigProfilestored = 0xff;
-
-#ifndef CC3000_UNENCRYPTED_SMART_CONFIG
-  const uint8_t smartconfigkey[] = {0x73,0x6d,0x61,0x72,0x74,0x63,0x6f,0x6e,0x66,0x69,0x67,0x41,0x45,0x53,0x31,0x36};
-#else
-  const uint8_t smartconfigkey = NULL;
-#endif
-
-/** \brief Flag indicating whether to print CC3000 Connection info */
-
-//Device name - used for Smart config in order to stop the Smart phone configuration process
-uint8_t DevServname[] = "CC3000";
-//volatile uint32_t SendmDNSAdvertisment;
-
-
-/* TODO */
-void create_tcp_connection(int32_t port)
-{
-    const char python_msg[] = "Hello Python\n";
-    int32_t stat;
-    int32_t sock;
-    //new TCP socket descriptor
-    int32_t newsock;
-    //destination address
-    sockaddr destAddr;
-    //local address
-    sockaddr LocalAddr;
-    socklen_t addrlen;
-    memset(&LocalAddr, 0, 8);
-    LocalAddr.family = AF_INET;
-    LocalAddr.data[0] = (port >> 8) & 0xff;
-    LocalAddr.data[1] = port & 0xff;
-    memset (&LocalAddr.data[2], 0, 4);
-    sock = wigo._socket.socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-    while(sock == -1) sock = wigo._socket.socket(AF_INET, SOCK_DGRAM, IPPROTO_TCP);
-    wigo._socket.bind(sock,&LocalAddr,sizeof(sockaddr));
-    wigo._socket.listen(sock, 1);
-    addrlen = sizeof(destAddr);
-    while(1)
-    {
-        newsock = -2;
-        printf("Server waiting for connection to Python\n");
-        LED_D2_ON;
-        while((newsock == -1) || (newsock == -2))
-        {
-            newsock = wigo._socket.accept(sock,&destAddr, &addrlen);
-        }
-        printf("Connected\n");
-        //receive TCP data
-        if(newsock >= 0)
-        {
-            wigo._socket.recv(newsock, requestBuffer,20,0);
-            printf("Input = %s\n", requestBuffer);
-            stat = -2;
-            stat = wigo._socket.send(newsock, python_msg, strlen(python_msg), 0);
-            printf("status= %d\n", stat);
-            LED_D2_OFF;
-        } else printf("bad socket= %d\n", newsock);
-        wigo._socket.closesocket(newsock);
-        printf("Done, press any key to repeat\n");
-        getchar();
-//        printf("\x1B[2J");    //VT100 erase screen
-//        printf("\x1B[H");     //VT100 home
-    }
-}
-
-void start_smart_config() {
-    wigo.start_smart_config(smartconfigkey);
-}
-
-void init_tcp(void)
-{
-    int t;
-    tNetappIpconfigRetArgs ipinfo2;
-
-    check_dhcp();
-    //while(checkWiFiConnected() == false);
-    // If connectivity is good, run the primary functionality
-     // while(1)
-     // {
-     //     if (checkWiFiConnected()) break;
-     //     wait(1);
-     // }
-//     printf("Connected\n");
-    // If we're not blocked by accept or others, obtain the latest status
-    wigo.get_ip_config(&ipinfo2);                  // data is returned in the ipinfo2 structure
-    printf("\n*** Wi-Go board DHCP assigned IP Address = %d.%d.%d.%d\n", ipinfo2.aucIP[3], ipinfo2.aucIP[2], ipinfo2.aucIP[1], ipinfo2.aucIP[0]);
-    LED_D3_ON;
-
-    t = wigo._socket.mdnsAdvertiser(1, DevServname, sizeof(DevServname));
-    printf("mDNS Status= %x\n", t);
-}
-
-void run_tcp_server(void)
-{
-    LED_D3_OFF;
-    LED_D2_OFF;
-    printf("\n\nStarting TCP/IP Server\n");
-    init_tcp();
-    create_tcp_connection(TCPIP_PORT);
-}
-
-bool check_dhcp(void)
-{
-    int32_t t;
-    //static uint8_t obtainIpInfoFlag = FALSE;
-
-    // Wait until for dhcp
-    while (wigo.is_dhcp_configured() == false)
-    {
-         wait_ms(500);
-         printf("waiting\n");
-    }
-
-    // Check if we are in a connected state.  If so, set flags and LED
-    //if (wigo.is_connected() == true)
-    //{
-        //if (obtainIpInfoFlag == FALSE)
-        //{
-        //    obtainIpInfoFlag = TRUE;             // Set flag so we don't constantly turn the LED on
-            //LED_D3_ON;
-            //If Smart Config was performed, we need to send complete notification to the configure (Smart Phone App)
-            // if (ConnectUsingSmartConfig==1)
-            // {
-            //     ConnectUsingSmartConfig = 0;
-            //     SmartConfigProfilestored = SMART_CONFIG_SET;
-            // }
-
-        //}
-        t = wigo._socket.mdnsAdvertiser(1, DevServname, sizeof(DevServname));
-        printf("mDNS Status= %x\n", t);
-        return true;
-    //}
-    //return FALSE;
-}
-
-void do_FTC(void)
-{
-    printf("Running First Time Configuration\n");
-    // server_running = 1;
-    //runSmartConfig = 1;
-    start_smart_config();
-    init_tcp();
-    RED_OFF;
-    GREEN_OFF;
-    BLUE_OFF;
-    userFS.FTC = 1;
-    wigo._nvmem.write( NVMEM_USER_FILE_1_FILEID, sizeof(userFS), 0, (uint8_t *) &userFS);
-    //runSmartConfig = 0;
-    SmartConfigProfilestored = SMART_CONFIG_SET;
-    wigo._wlan.stop();
-    printf("FTC finished\n");
-}
-
-
-