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";

doTCPIP.h

Committer:
frankvnk
Date:
2013-10-17
Revision:
7:f13025166308
Parent:
6:4fb3776a9b92

File content as of revision 7:f13025166308:

/****************************************************************************
*
*  doTCPIP.h - CC3000 TCP/IP
*  Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
*
*  Redistribution and use in source and binary forms, with or without
*  modification, are permitted provided that the following conditions
*  are met:
*
*    Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
*
*    Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the
*    distribution.
*
*    Neither the name of Texas Instruments Incorporated nor the names of
*    its contributors may be used to endorse or promote products derived
*    from this software without specific prior written permission.
*
*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
*  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
*  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
*  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
*  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*****************************************************************************/

#ifndef DOTCPIP_H
#define DOTCPIP_H

#include "cc3000.h"

/** TCP/IP Functions
*
*/
#ifdef    __cplusplus
extern "C" {
#endif

#ifndef FALSE
#define FALSE 0
#endif

#ifndef TRUE
#define TRUE 1
#endif

#define SMART_CONFIG_SET 0x55
// SMTP Specific
#define HTTP_PORT     80
#define TCPIP_PORT    15000

#define USE_DHCP      1
#define USE_STATIC_IP 2

#define NONE 0
#define WEP  1
#define WPA  2
#define WPA2 3

// 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 AP_SECURITY    NONE          // no security but will connect quicker!  
#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

#define REQ_BUFFER_SIZE 400

// DynDNS server. From which to take public IP address.
// dyndns: 91.198.22.70
#define SRV_IP_OCT1 91
#define SRV_IP_OCT2 198
#define SRV_IP_OCT3 22
#define SRV_IP_OCT4 70
#define SRV_PORT    80

// Italian daytime server responding:
// 29 AUG 2013 05:24:02 CEST
// tempo.ien.it [193.204.114.105]
#define TMSRV_IP_OCT1 193
#define TMSRV_IP_OCT2 204
#define TMSRV_IP_OCT3 114
#define TMSRV_IP_OCT4 105
#define TMSRV_PORT    13

typedef struct {
    unsigned char FTC;           // First time config performed
    unsigned char PP_version[2]; // Patch Programmer version
    unsigned char SERV_PACK[2];  // Service Pack Version
    unsigned char DRV_VER[3];    // Driver Version
    unsigned char FW_VER[3];     // Firmware Version
    unsigned char validCIK;      // CIK[] is valid (Client Interface Key)
    unsigned char CIK[40];
} userFS_t;

extern userFS_t userFS;

extern volatile unsigned long ulSmartConfigFinished,ulCC3000DHCP, OkToDoShutDown, ulCC3000DHCP_configured;
extern int server_running;
extern volatile unsigned char newData;
extern unsigned char ForceFixedSSID;
extern char runSmartConfig;
extern char requestBuffer[];
extern unsigned char myMAC[8];
extern unsigned char SmartConfigProfilestored;
extern int do_mDNS;
extern int HsecondFlag;
extern unsigned int seconds;
extern volatile int ms5Flag;

extern void StartSmartConfig(void);


//int sendTCPIP(int port);
void sendPython(int port);
void initTCPIP(void);
void runTCPIPserver(void);
int getTCPIP( char a1, char a2, char a3, char a4, int port);
//void runTCPIPclient(int a1, int a2, int a3, int a4);
void runTCPIPclient(int a1, int a2, int a3, int a4, int port);

/** Checks if WiFi is still connected.
* @param  None
* @return TRUE if connected, FALSE if not
* @note   If not associated with an AP for 5 consecutive retries, it will reset the board.
*/
unsigned char checkWiFiConnected(void);

/** Print MAC address.
* @param  None
* @return none
*/
void print_mac(void);

/** First time configuration.
* @param  None
* @return none
*/
void do_FTC(void);

#ifdef    __cplusplus
}
#endif // __cplusplus

#endif // DOTCPIP_H