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:
Fri Sep 13 18:02:03 2013 +0000
Revision:
1:99076f2d9408
Parent:
0:ce33c63eefe5
Child:
4:b5875efcf0e5
tcp server addition

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 1:99076f2d9408 1 /* mbed Microcontroller Library
Kojto 1:99076f2d9408 2 * Copyright (c) 2006-2013 ARM Limited
Kojto 1:99076f2d9408 3 *
Kojto 1:99076f2d9408 4 * Licensed under the Apache License, Version 2.0 (the "License");
Kojto 1:99076f2d9408 5 * you may not use this file except in compliance with the License.
Kojto 1:99076f2d9408 6 * You may obtain a copy of the License at
Kojto 1:99076f2d9408 7 *
Kojto 1:99076f2d9408 8 * http://www.apache.org/licenses/LICENSE-2.0
Kojto 1:99076f2d9408 9 *
Kojto 1:99076f2d9408 10 * Unless required by applicable law or agreed to in writing, software
Kojto 1:99076f2d9408 11 * distributed under the License is distributed on an "AS IS" BASIS,
Kojto 1:99076f2d9408 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Kojto 1:99076f2d9408 13 * See the License for the specific language governing permissions and
Kojto 1:99076f2d9408 14 * limitations under the License.
Kojto 1:99076f2d9408 15 */
Kojto 0:ce33c63eefe5 16 #include "mbed.h"
Kojto 0:ce33c63eefe5 17 #include "KL25Z_irq_prio.h"
Kojto 0:ce33c63eefe5 18 #include "cc3000.h"
Kojto 1:99076f2d9408 19 #include "tcp_ip_demo.h"
Kojto 0:ce33c63eefe5 20 #include "main.h"
Kojto 0:ce33c63eefe5 21
Kojto 0:ce33c63eefe5 22 using namespace mbed_cc3000;
Kojto 0:ce33c63eefe5 23
Kojto 1:99076f2d9408 24 #if (WIGO_BOARD)
Kojto 0:ce33c63eefe5 25 // Wi-Go battery charger control
Kojto 0:ce33c63eefe5 26 DigitalOut PWR_EN1(PTB2);
Kojto 0:ce33c63eefe5 27 DigitalOut PWR_EN2(PTB3);
Kojto 0:ce33c63eefe5 28 // Wi-go LED
Kojto 0:ce33c63eefe5 29 DigitalOut ledr (LED_RED);
Kojto 0:ce33c63eefe5 30 DigitalOut ledg (LED_GREEN);
Kojto 0:ce33c63eefe5 31 DigitalOut ledb (LED_BLUE);
Kojto 0:ce33c63eefe5 32 DigitalOut led1 (PTB8);
Kojto 0:ce33c63eefe5 33 DigitalOut led2 (PTB9);
Kojto 0:ce33c63eefe5 34 DigitalOut led3 (PTB10);
Kojto 1:99076f2d9408 35 #endif
Kojto 1:99076f2d9408 36
Kojto 1:99076f2d9408 37 Serial pc(USBTX, USBRX);
Kojto 0:ce33c63eefe5 38 cc3000 wigo(PTA16, PTA13, PTD0, SPI(PTD2, PTD3, PTC5), PORTA_IRQn);
Kojto 0:ce33c63eefe5 39
Kojto 1:99076f2d9408 40 /** Initialize LED (only for Wi-go board)
Kojto 1:99076f2d9408 41 * \param none
Kojto 1:99076f2d9408 42 * \return none
Kojto 1:99076f2d9408 43 */
Kojto 0:ce33c63eefe5 44 void initLEDs(void)
Kojto 0:ce33c63eefe5 45 {
Kojto 0:ce33c63eefe5 46 RED_OFF;
Kojto 0:ce33c63eefe5 47 GREEN_OFF;
Kojto 0:ce33c63eefe5 48 BLUE_OFF;
Kojto 0:ce33c63eefe5 49 LED_D1_OFF;
Kojto 0:ce33c63eefe5 50 LED_D2_OFF;
Kojto 0:ce33c63eefe5 51 LED_D3_OFF;
Kojto 0:ce33c63eefe5 52 }
Kojto 0:ce33c63eefe5 53
Kojto 1:99076f2d9408 54 /** Print cc3000 information
Kojto 1:99076f2d9408 55 * \param none
Kojto 1:99076f2d9408 56 * \return none
Kojto 1:99076f2d9408 57 */
Kojto 0:ce33c63eefe5 58 void print_cc3000_info() {
Kojto 0:ce33c63eefe5 59 wigo.get_user_file_info((uint8_t *)&userFS, sizeof(userFS));
Kojto 0:ce33c63eefe5 60 wigo.get_mac_address(myMAC);
Kojto 0:ce33c63eefe5 61 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 62
Kojto 0:ce33c63eefe5 63 printf("FTC %i\n",userFS.FTC);
Kojto 0:ce33c63eefe5 64 printf("PP_version %i.%i\n",userFS.PP_version[0], userFS.PP_version[1]);
Kojto 0:ce33c63eefe5 65 printf("SERV_PACK %i.%i\n",userFS.SERV_PACK[0], userFS.SERV_PACK[1]);
Kojto 0:ce33c63eefe5 66 printf("DRV_VER %i.%i.%i\n",userFS.DRV_VER[0], userFS.DRV_VER[1], userFS.DRV_VER[2]);
Kojto 0:ce33c63eefe5 67 printf("FW_VER %i.%i.%i\n",userFS.FW_VER[0], userFS.FW_VER[1], userFS.FW_VER[2]);
Kojto 0:ce33c63eefe5 68 }
Kojto 0:ce33c63eefe5 69
Kojto 1:99076f2d9408 70 /** Connect to SSID with security
Kojto 1:99076f2d9408 71 * \param ssid Name of SSID
Kojto 1:99076f2d9408 72 * \param key Password
Kojto 1:99076f2d9408 73 * \param sec_mode Security mode
Kojto 1:99076f2d9408 74 * \return none
Kojto 1:99076f2d9408 75 */
Kojto 0:ce33c63eefe5 76 void connect_to_ssid(uint8_t *ssid, uint8_t *key, uint8_t sec_mode) {
Kojto 0:ce33c63eefe5 77 printf("Connecting to SSID: %s. Timeout is 10s.\n",ssid);
Kojto 0:ce33c63eefe5 78 if (wigo.connect_to_AP(ssid, key, sec_mode) == true) {
Kojto 0:ce33c63eefe5 79 printf("Connected\n");
Kojto 0:ce33c63eefe5 80 } else {
Kojto 1:99076f2d9408 81 printf("Connection timed-out (error). Please restart.\n");
Kojto 1:99076f2d9408 82 while(1);
Kojto 0:ce33c63eefe5 83 }
Kojto 0:ce33c63eefe5 84 }
Kojto 0:ce33c63eefe5 85
Kojto 1:99076f2d9408 86 /** Connect to SSID without security
Kojto 1:99076f2d9408 87 * \param ssid Name of SSID
Kojto 1:99076f2d9408 88 * \return none
Kojto 1:99076f2d9408 89 */
Kojto 0:ce33c63eefe5 90 void connect_to_ssid(uint8_t *ssid) {
Kojto 0:ce33c63eefe5 91 wigo.connect_open(ssid);
Kojto 0:ce33c63eefe5 92 }
Kojto 0:ce33c63eefe5 93
Kojto 1:99076f2d9408 94 /** Main function
Kojto 1:99076f2d9408 95 * \param none
Kojto 1:99076f2d9408 96 * \return int
Kojto 1:99076f2d9408 97 */
Kojto 0:ce33c63eefe5 98 int main() {
Kojto 1:99076f2d9408 99 // Wi-Go set current to 500mA since we're turning on the Wi-Fi
Kojto 1:99076f2d9408 100 SET_PWR_EN1;
Kojto 1:99076f2d9408 101 SET_PWR_EN2;
Kojto 0:ce33c63eefe5 102
Kojto 1:99076f2d9408 103 pc.baud(115200);
Kojto 0:ce33c63eefe5 104
Kojto 1:99076f2d9408 105 /* KL25 specific code */
Kojto 1:99076f2d9408 106 NVIC_SetAllPriority(3);
Kojto 0:ce33c63eefe5 107 NVIC_SetPriority(SPI0_IRQn, 0x0); // Wi-Fi SPI interrupt must be higher priority than SysTick
Kojto 0:ce33c63eefe5 108 NVIC_SetPriority(PORTA_IRQn, 0x1);
Kojto 0:ce33c63eefe5 109 NVIC_SetPriority(SysTick_IRQn, 0x2); // SysTick set to lower priority than Wi-Fi SPI bus interrupt
Kojto 0:ce33c63eefe5 110
Kojto 1:99076f2d9408 111 CLEAR_PCR_INTERRUPT;
Kojto 1:99076f2d9408 112 CLEAN_PORT_INTERRUPT;
Kojto 0:ce33c63eefe5 113
Kojto 0:ce33c63eefe5 114 GREEN_ON;
Kojto 0:ce33c63eefe5 115 wigo.start(0);
Kojto 0:ce33c63eefe5 116 printf("CC3000 Python demo.\n");
Kojto 0:ce33c63eefe5 117 print_cc3000_info();
Kojto 0:ce33c63eefe5 118
Kojto 0:ce33c63eefe5 119 printf("\n<0> Normal run. SmartConfig will\n start if no valid connection exists.\n");
Kojto 0:ce33c63eefe5 120 printf("<1> Connect using fixed SSID : %s\n", SSID);
Kojto 0:ce33c63eefe5 121 printf("<2> SmartConfig.\n");
Kojto 0:ce33c63eefe5 122
Kojto 0:ce33c63eefe5 123 signed char c = getchar();
Kojto 0:ce33c63eefe5 124 switch (c)
Kojto 0:ce33c63eefe5 125 {
Kojto 0:ce33c63eefe5 126 case '0':
Kojto 0:ce33c63eefe5 127 if(!userFS.FTC)
Kojto 0:ce33c63eefe5 128 {
Kojto 0:ce33c63eefe5 129 do_FTC();
Kojto 0:ce33c63eefe5 130 wigo._wlan.stop();
Kojto 0:ce33c63eefe5 131 }
Kojto 0:ce33c63eefe5 132 break;
Kojto 0:ce33c63eefe5 133 case '1':
Kojto 0:ce33c63eefe5 134 printf("Attempting SSID Connection\n");
Kojto 0:ce33c63eefe5 135 #ifndef CC3000_TINY_DRIVER
Kojto 0:ce33c63eefe5 136 #ifdef AP_KEY
Kojto 0:ce33c63eefe5 137 connect_to_ssid((uint8_t *)SSID,(uint8_t *)AP_KEY,AP_SECURITY); /* TODO rewrite to const vraiables - NOT MACROS */
Kojto 0:ce33c63eefe5 138 #else
Kojto 1:99076f2d9408 139 connect_to_ssid((uint8_t *)SSID);
Kojto 0:ce33c63eefe5 140 #endif
Kojto 0:ce33c63eefe5 141 #else
Kojto 1:99076f2d9408 142 connect_to_ssid((uint8_t *)SSID);
Kojto 0:ce33c63eefe5 143 #endif
Kojto 0:ce33c63eefe5 144 break;
Kojto 0:ce33c63eefe5 145 case '2':
Kojto 1:99076f2d9408 146 printf("Starting Smart Config configuration.\n");
Kojto 0:ce33c63eefe5 147 start_smart_config();
Kojto 1:99076f2d9408 148 init_dhcp();
Kojto 1:99076f2d9408 149
Kojto 1:99076f2d9408 150 printf("Press the reset button on your board and select 0...\n");
Kojto 1:99076f2d9408 151 while(1);
Kojto 0:ce33c63eefe5 152 default:
Kojto 0:ce33c63eefe5 153 printf("Wrong selection.\n");
Kojto 0:ce33c63eefe5 154 printf("Reset the board and try again.\n");
Kojto 0:ce33c63eefe5 155 break;
Kojto 0:ce33c63eefe5 156 }
Kojto 0:ce33c63eefe5 157 SmartConfigProfilestored = SMART_CONFIG_SET;
Kojto 0:ce33c63eefe5 158 RED_OFF;
Kojto 0:ce33c63eefe5 159 GREEN_OFF;
Kojto 0:ce33c63eefe5 160 BLUE_OFF;
Kojto 0:ce33c63eefe5 161
Kojto 0:ce33c63eefe5 162 run_tcp_server(); // Run TCP/IP Connection to host
Kojto 0:ce33c63eefe5 163 }