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:

Committer:
Kojto
Date:
Sun Sep 08 18:31:33 2013 +0000
Revision:
0:ce33c63eefe5
Child:
1:99076f2d9408
initial version of new simple socket

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 0:ce33c63eefe5 1 #include "mbed.h"
Kojto 0:ce33c63eefe5 2 #include "KL25Z_irq_prio.h"
Kojto 0:ce33c63eefe5 3 #include "cc3000.h"
Kojto 0:ce33c63eefe5 4 #include "doTCPIP.h"
Kojto 0:ce33c63eefe5 5 #include "main.h"
Kojto 0:ce33c63eefe5 6
Kojto 0:ce33c63eefe5 7 using namespace mbed_cc3000;
Kojto 0:ce33c63eefe5 8
Kojto 0:ce33c63eefe5 9 // Serial USB port
Kojto 0:ce33c63eefe5 10 Serial pc(USBTX, USBRX);
Kojto 0:ce33c63eefe5 11 // Wi-Go battery charger control
Kojto 0:ce33c63eefe5 12 DigitalOut PWR_EN1(PTB2);
Kojto 0:ce33c63eefe5 13 DigitalOut PWR_EN2(PTB3);
Kojto 0:ce33c63eefe5 14 // Wi-go LED
Kojto 0:ce33c63eefe5 15 DigitalOut ledr (LED_RED);
Kojto 0:ce33c63eefe5 16 DigitalOut ledg (LED_GREEN);
Kojto 0:ce33c63eefe5 17 DigitalOut ledb (LED_BLUE);
Kojto 0:ce33c63eefe5 18 DigitalOut led1 (PTB8);
Kojto 0:ce33c63eefe5 19 DigitalOut led2 (PTB9);
Kojto 0:ce33c63eefe5 20 DigitalOut led3 (PTB10);
Kojto 0:ce33c63eefe5 21 // Wi-go cc3000
Kojto 0:ce33c63eefe5 22 cc3000 wigo(PTA16, PTA13, PTD0, SPI(PTD2, PTD3, PTC5), PORTA_IRQn);
Kojto 0:ce33c63eefe5 23
Kojto 0:ce33c63eefe5 24 /* TODO REMOVE -> new function with all priorities as well */
Kojto 0:ce33c63eefe5 25 #define WLAN_ISF_PCR PORTA->PCR[16]
Kojto 0:ce33c63eefe5 26 #define WLAN_ISF_ISFR PORTA->ISFR
Kojto 0:ce33c63eefe5 27 #define WLAN_ISF_MASK (1<<16)
Kojto 0:ce33c63eefe5 28
Kojto 0:ce33c63eefe5 29 void initLEDs(void)
Kojto 0:ce33c63eefe5 30 {
Kojto 0:ce33c63eefe5 31 RED_OFF;
Kojto 0:ce33c63eefe5 32 GREEN_OFF;
Kojto 0:ce33c63eefe5 33 BLUE_OFF;
Kojto 0:ce33c63eefe5 34 LED_D1_OFF;
Kojto 0:ce33c63eefe5 35 LED_D2_OFF;
Kojto 0:ce33c63eefe5 36 LED_D3_OFF;
Kojto 0:ce33c63eefe5 37 }
Kojto 0:ce33c63eefe5 38
Kojto 0:ce33c63eefe5 39 void print_cc3000_info() {
Kojto 0:ce33c63eefe5 40 wigo.get_user_file_info((uint8_t *)&userFS, sizeof(userFS));
Kojto 0:ce33c63eefe5 41 wigo.get_mac_address(myMAC);
Kojto 0:ce33c63eefe5 42 printf("\n\nWi-Go MAC address %02x:%02x:%02x:%02x:%02x:%02x\n\n", myMAC[0], myMAC[1], myMAC[2], myMAC[3], myMAC[4], myMAC[5]);
Kojto 0:ce33c63eefe5 43
Kojto 0:ce33c63eefe5 44 printf("FTC %i\n",userFS.FTC);
Kojto 0:ce33c63eefe5 45 printf("PP_version %i.%i\n",userFS.PP_version[0], userFS.PP_version[1]);
Kojto 0:ce33c63eefe5 46 printf("SERV_PACK %i.%i\n",userFS.SERV_PACK[0], userFS.SERV_PACK[1]);
Kojto 0:ce33c63eefe5 47 printf("DRV_VER %i.%i.%i\n",userFS.DRV_VER[0], userFS.DRV_VER[1], userFS.DRV_VER[2]);
Kojto 0:ce33c63eefe5 48 printf("FW_VER %i.%i.%i\n",userFS.FW_VER[0], userFS.FW_VER[1], userFS.FW_VER[2]);
Kojto 0:ce33c63eefe5 49 }
Kojto 0:ce33c63eefe5 50
Kojto 0:ce33c63eefe5 51 int32_t set_static_dhcp(void)
Kojto 0:ce33c63eefe5 52 {
Kojto 0:ce33c63eefe5 53 uint8_t pucIP_Addr[4];
Kojto 0:ce33c63eefe5 54 uint8_t pucIP_DefaultGWAddr[4];
Kojto 0:ce33c63eefe5 55 uint8_t pucSubnetMask[4];
Kojto 0:ce33c63eefe5 56 uint8_t pucDNS[4];
Kojto 0:ce33c63eefe5 57
Kojto 0:ce33c63eefe5 58 // Subnet mask is assumed to be 255.255.255.0
Kojto 0:ce33c63eefe5 59 pucSubnetMask[0] = 0xFF;
Kojto 0:ce33c63eefe5 60 pucSubnetMask[1] = 0xFF;
Kojto 0:ce33c63eefe5 61 pucSubnetMask[2] = 0xFF;
Kojto 0:ce33c63eefe5 62 pucSubnetMask[3] = 0x0;
Kojto 0:ce33c63eefe5 63
Kojto 0:ce33c63eefe5 64 // CC3000's IP
Kojto 0:ce33c63eefe5 65 pucIP_Addr[0] = STATIC_IP_OCT1;
Kojto 0:ce33c63eefe5 66 pucIP_Addr[1] = STATIC_IP_OCT2;
Kojto 0:ce33c63eefe5 67 pucIP_Addr[2] = STATIC_IP_OCT3;
Kojto 0:ce33c63eefe5 68 pucIP_Addr[3] = STATIC_IP_OCT4;
Kojto 0:ce33c63eefe5 69
Kojto 0:ce33c63eefe5 70 // Default Gateway/Router IP
Kojto 0:ce33c63eefe5 71 // 192.168.1.1
Kojto 0:ce33c63eefe5 72 pucIP_DefaultGWAddr[0] = STATIC_IP_OCT1;
Kojto 0:ce33c63eefe5 73 pucIP_DefaultGWAddr[1] = STATIC_IP_OCT2;
Kojto 0:ce33c63eefe5 74 pucIP_DefaultGWAddr[2] = STATIC_IP_OCT3;
Kojto 0:ce33c63eefe5 75 pucIP_DefaultGWAddr[3] = STATIC_GW_OCT4;
Kojto 0:ce33c63eefe5 76
Kojto 0:ce33c63eefe5 77 // We assume the router is also a DNS server
Kojto 0:ce33c63eefe5 78 pucDNS[0] = STATIC_IP_OCT1;
Kojto 0:ce33c63eefe5 79 pucDNS[1] = STATIC_IP_OCT2;
Kojto 0:ce33c63eefe5 80 pucDNS[2] = STATIC_IP_OCT3;
Kojto 0:ce33c63eefe5 81 pucDNS[3] = STATIC_GW_OCT4;
Kojto 0:ce33c63eefe5 82
Kojto 0:ce33c63eefe5 83 wigo._netapp.dhcp((uint32_t *)pucIP_Addr,
Kojto 0:ce33c63eefe5 84 (uint32_t *)pucSubnetMask,
Kojto 0:ce33c63eefe5 85 (uint32_t *)pucIP_DefaultGWAddr,
Kojto 0:ce33c63eefe5 86 (uint32_t *)pucDNS);
Kojto 0:ce33c63eefe5 87
Kojto 0:ce33c63eefe5 88 // reset the CC3000 to apply Static Setting
Kojto 0:ce33c63eefe5 89 wigo._wlan.stop();
Kojto 0:ce33c63eefe5 90 wait(1);
Kojto 0:ce33c63eefe5 91 wigo._wlan.start(0);
Kojto 0:ce33c63eefe5 92
Kojto 0:ce33c63eefe5 93 // Mask out all non-required events from CC3000
Kojto 0:ce33c63eefe5 94 wigo._wlan.set_event_mask(HCI_EVNT_WLAN_KEEPALIVE|
Kojto 0:ce33c63eefe5 95 HCI_EVNT_WLAN_UNSOL_INIT|
Kojto 0:ce33c63eefe5 96 HCI_EVNT_WLAN_ASYNC_PING_REPORT);
Kojto 0:ce33c63eefe5 97 return(0);
Kojto 0:ce33c63eefe5 98 }
Kojto 0:ce33c63eefe5 99
Kojto 0:ce33c63eefe5 100 void connect_to_ssid(uint8_t *ssid, uint8_t *key, uint8_t sec_mode) {
Kojto 0:ce33c63eefe5 101 printf("Connecting to SSID: %s. Timeout is 10s.\n",ssid);
Kojto 0:ce33c63eefe5 102 if (wigo.connect_to_AP(ssid, key, sec_mode) == true) {
Kojto 0:ce33c63eefe5 103 printf("Connected\n");
Kojto 0:ce33c63eefe5 104 } else {
Kojto 0:ce33c63eefe5 105 printf("Connection timed-out (error).\n");
Kojto 0:ce33c63eefe5 106 }
Kojto 0:ce33c63eefe5 107 }
Kojto 0:ce33c63eefe5 108
Kojto 0:ce33c63eefe5 109 void connect_to_ssid(uint8_t *ssid) {
Kojto 0:ce33c63eefe5 110 wigo.connect_open(ssid);
Kojto 0:ce33c63eefe5 111 }
Kojto 0:ce33c63eefe5 112
Kojto 0:ce33c63eefe5 113 int main() {
Kojto 0:ce33c63eefe5 114 // set current to 500mA since we're turning on the Wi-Fi
Kojto 0:ce33c63eefe5 115 PWR_EN1 = 0;
Kojto 0:ce33c63eefe5 116 PWR_EN2 = 1;
Kojto 0:ce33c63eefe5 117
Kojto 0:ce33c63eefe5 118 pc.baud (115200);
Kojto 0:ce33c63eefe5 119
Kojto 0:ce33c63eefe5 120 NVIC_SetAllPriority(3); // Set ALL interrupt priorities to level 3
Kojto 0:ce33c63eefe5 121 NVIC_SetPriority(SPI0_IRQn, 0x0); // Wi-Fi SPI interrupt must be higher priority than SysTick
Kojto 0:ce33c63eefe5 122 NVIC_SetPriority(PORTA_IRQn, 0x1);
Kojto 0:ce33c63eefe5 123 NVIC_SetPriority(SysTick_IRQn, 0x2); // SysTick set to lower priority than Wi-Fi SPI bus interrupt
Kojto 0:ce33c63eefe5 124
Kojto 0:ce33c63eefe5 125 // Clear pending interrupt
Kojto 0:ce33c63eefe5 126 WLAN_ISF_PCR |= PORT_PCR_ISF_MASK;
Kojto 0:ce33c63eefe5 127 WLAN_ISF_ISFR |= WLAN_ISF_MASK;
Kojto 0:ce33c63eefe5 128
Kojto 0:ce33c63eefe5 129 GREEN_ON;
Kojto 0:ce33c63eefe5 130 wigo.start(0);
Kojto 0:ce33c63eefe5 131 printf("CC3000 Python demo.\n");
Kojto 0:ce33c63eefe5 132 print_cc3000_info();
Kojto 0:ce33c63eefe5 133
Kojto 0:ce33c63eefe5 134 printf("\n<0> Normal run. SmartConfig will\n start if no valid connection exists.\n");
Kojto 0:ce33c63eefe5 135 printf("<1> Connect using fixed SSID : %s\n", SSID);
Kojto 0:ce33c63eefe5 136 printf("<2> SmartConfig.\n");
Kojto 0:ce33c63eefe5 137
Kojto 0:ce33c63eefe5 138 signed char c = getchar();
Kojto 0:ce33c63eefe5 139 switch (c)
Kojto 0:ce33c63eefe5 140 {
Kojto 0:ce33c63eefe5 141 case '0':
Kojto 0:ce33c63eefe5 142 if(!userFS.FTC)
Kojto 0:ce33c63eefe5 143 {
Kojto 0:ce33c63eefe5 144 do_FTC();
Kojto 0:ce33c63eefe5 145 wigo._wlan.stop();
Kojto 0:ce33c63eefe5 146 }
Kojto 0:ce33c63eefe5 147 break;
Kojto 0:ce33c63eefe5 148 case '1':
Kojto 0:ce33c63eefe5 149 printf("Attempting SSID Connection\n");
Kojto 0:ce33c63eefe5 150 #ifndef CC3000_TINY_DRIVER
Kojto 0:ce33c63eefe5 151 #ifdef AP_KEY
Kojto 0:ce33c63eefe5 152 connect_to_ssid((uint8_t *)SSID,(uint8_t *)AP_KEY,AP_SECURITY); /* TODO rewrite to const vraiables - NOT MACROS */
Kojto 0:ce33c63eefe5 153 #else
Kojto 0:ce33c63eefe5 154 connect_to_ssid(SSID);
Kojto 0:ce33c63eefe5 155 #endif
Kojto 0:ce33c63eefe5 156 #else
Kojto 0:ce33c63eefe5 157 connect_to_ssid(SSID);
Kojto 0:ce33c63eefe5 158 #endif
Kojto 0:ce33c63eefe5 159 break;
Kojto 0:ce33c63eefe5 160 case '2':
Kojto 0:ce33c63eefe5 161 //server_running = 1;
Kojto 0:ce33c63eefe5 162 //runSmartConfig = 1;
Kojto 0:ce33c63eefe5 163 start_smart_config();
Kojto 0:ce33c63eefe5 164 init_tcp();
Kojto 0:ce33c63eefe5 165 //server_running = 1;
Kojto 0:ce33c63eefe5 166 RED_OFF;
Kojto 0:ce33c63eefe5 167 GREEN_OFF;
Kojto 0:ce33c63eefe5 168 BLUE_OFF;
Kojto 0:ce33c63eefe5 169 printf("Press the reset button on your board and select 1...\n");
Kojto 0:ce33c63eefe5 170 while(1)
Kojto 0:ce33c63eefe5 171 {
Kojto 0:ce33c63eefe5 172 GREEN_ON;
Kojto 0:ce33c63eefe5 173 wait_ms(500);
Kojto 0:ce33c63eefe5 174 GREEN_OFF;
Kojto 0:ce33c63eefe5 175 wait_ms(500);
Kojto 0:ce33c63eefe5 176 }
Kojto 0:ce33c63eefe5 177 default:
Kojto 0:ce33c63eefe5 178 printf("Wrong selection.\n");
Kojto 0:ce33c63eefe5 179 printf("Reset the board and try again.\n");
Kojto 0:ce33c63eefe5 180 break;
Kojto 0:ce33c63eefe5 181 }
Kojto 0:ce33c63eefe5 182 //server_running = 0;
Kojto 0:ce33c63eefe5 183 SmartConfigProfilestored = SMART_CONFIG_SET;
Kojto 0:ce33c63eefe5 184 RED_OFF;
Kojto 0:ce33c63eefe5 185 GREEN_OFF;
Kojto 0:ce33c63eefe5 186 BLUE_OFF;
Kojto 0:ce33c63eefe5 187
Kojto 0:ce33c63eefe5 188 //dynamic dhcp is set by default
Kojto 0:ce33c63eefe5 189 #if IP_ALLOC_METHOD == USE_STATIC_IP
Kojto 0:ce33c63eefe5 190 set_static_dhcp();
Kojto 0:ce33c63eefe5 191 #endif
Kojto 0:ce33c63eefe5 192
Kojto 0:ce33c63eefe5 193 run_tcp_server(); // Run TCP/IP Connection to host
Kojto 0:ce33c63eefe5 194 }