Creative Commons images are CC BY-NC-SA 3.0

Description: This is a shield for the CC3000 WiFi Module. The CC3000 from TI (Texas Instruments) is a self-contained wireless network processor that makes incorporating internet connectivity into your project simple. Instead of the more standard UART communication method, the CC3000 module utilizes an SPI interface allowing you, the user, to control the flow of data as you please. What makes the CC3000 unique is its ability to associate to a WiFi access point using a cell phone app in the Texas Instruments process called SmartConfig.

This shield even provides an optional feature that allows you to attach an external antenna, just in case you need a little extra power. This is a handy feature if you want to route an antenna to the outside of an enclosure or to increase your WiFi gain. The CC3000 Shield has a standard Arduino shield layout with 2 rows of pins on either side. The right-side headers have been broken out on the shield if you want to solder headers or wires for easy prototyping in the area right of the microSD card slot. We have even designed this board so that the CC3000 is on the back of the shield reducing the chance of interference from the barrel jack or USB connector.

Note: The CC3000 WiFi Shield comes as a stand-alone board. Headers will need to be purchased separately, check the related items below!

Features:

  • Supply Voltage: 4.5V - 12V
  • Host Interface: SPI @ 16MHZ
  • Throughput (TCP): ~4Mbps
  • IEEE 802.11 b/g Compliant
  • WEP, WPA/WPA2 (AES and TKIP - Personal) Security Modes
  • FCC, IC, CE, and TELEC Certified
  • Prototyping Area
  • Onboard WIMAX Antenna
  • Optional External Antenna Connection

Documents:

Recommended Products

Customer Comments

  • SmartConfig not working for you? Do you have a 5 GHz network? This chip is 802.11b/g only, and does not do 5 GHz. Once you get the board connected to the AP, that’s actually not an issue at all thanks to mixed mode. However, you cannot use the SmartConfig app from a device on 5 GHz because the CC3000 cannot see those packets, even if it can see the 2.4 GHz channel from the AP. There are possible workarounds, including disabling 5 GHz on the router, or the phone/tablet. Unfortunately, not all devices give you an option to disable 5 GHz (why would you want to, right?). I have possibly the most restrictive combination of devices (iPhone and Airport Extreme) and I was still able to make SmartConfig work using this procedure: Go into Airport Utility, edit the Airport, Wireless, Options. Select the option to give the 5 GHz network a DIFFERENT name (very important that it’s a different ssid). Let the router restart. Everything on your network just dropped to 2.4 GHz, even if you don’t realize it, because the saved profiles they all have are now for the 2.4 GHz channel only. Run the SmartConfig procedure and it should work. Now go back to Airport Utility and undo what you did, returning the network to the single, original ssid for 2.4 and 5 GHz. The CC3000 still has a saved profile that is valid for the mixed mode network, and all of your devices are back to 5 GHz. Easy! You should be able to adapt this procedure to other types of routers. As a final note, I should say that the real issue here is lack of 802.11n support in the CC3000. The 5 GHz issue is only part of the problem, and potentially you could have an 802.11n 2.4GHz device that the CC3000 still cannot see. Ideally you should force 802.11n off completely to run SmartConfig. However, getting your network to 2.4 GHz is a good first step toward a solution, and worked perfectly for me with no further steps required. Hope this helps someone.

  • I got my shield today and tried immediately.

    I tested the board 1st:

    SparkFun CC3000 - Board Test

    CC3000 initialization complete Firmware version: 1.24 MAC address: 70:FF:76:01:30:1E Finished board test

    Scanned the networks:

    SparkFun CC3000 - Scan Test

    CC3000 initialization complete Scanning APs. Waiting for scan to complete. Access Points found:

    SSID: dnhm MAC address: 20:AA:4B:08:AA:CC RSSI: 58 Security: WPA2

    SSID: dnhm-guest MAC address: 20:AA:4B:08:AA:CE RSSI: 58 Security: Unsecured

    Finished scan test

    Set the SSID and the password and tried to connect:

    SparkFun CC3000 - Connection Test

    CC3000 initialization complete Connecting to: dnhm Error: Could not connect to AP Error: Could not obtain connection details Error: Could not disconnect from network Finished connection test


    SparkFun CC3000 - Connection Test

    CC3000 initialization complete Connecting to: dnhm-guest Error: Could not connect to AP Error: Could not obtain connection details Error: Could not disconnect from network Finished connection test

    It did not connect none of the connections, I reserved an IP address on the router for the mac address, but nothing changed. I turned on logs on the router (Linksys e2500) and no log record. I use wpa2 so I kept the security setting as it is. I also have a 5ghz ssid and it does not show up. So I did not try test that one.

    I also tried the smart config example, but it says:

    SparkFun CC3000 - SmartConfig

    CC3000 initialization complete Starting SmartConfig Send connection details from app now! Waiting to connect… Error: Could not connect with SmartConfig Error: Could not obtain connection details Looking up IP address of: www.sparkfun.com Error: Could not lookup host by name Pinging 0.0.0.0 3 times… Error: no ping response Error: Could not disconnect from network Finished SmartConfig test

    obviously the board works (It can find the networks), what should I do as next step to troubleshoot this?

    Thanks

    • This is very similar (if not the same) to the problem I’m having

      • It seems that both of you are having connection issues. Generally, if you can see the WAP with scan (and you seem to have a good signal strength), you can connect to it. It might take a few tries, though. Every CC3000 board that we sell has been tested by having it connect to an access point and ping a remote site. My suspicion is that there is something in the router configuration that does not want to play with the CC3000. You are using WPA2, the correct password, and have it set to DHCP, correct? (Just making sure - it seems that way based on the ScanTest and ConnectionTest results).

        If you want to see where the code is failing exactly, you can start digging in the library and putting in breakpoints or Serial debug statements. I would start with connect() in SFE_CC3000.cpp.

        Additionally, there is always the possibility that something got damaged in transit. If you think this might be the case, send an email to TechSupport@sparkfun.com and they can help you troubleshoot potentially damaged components. If it was damaged, they can definitely help you get a replacement.

        • Was there ever a resolution to this? I got a CC3000 board in the mail today and I am having the exact problem. The scan test finds numerous AP’s, including my NETGEAR24, but any test that involves connection returns the same “CC3000 initialization complete Connecting to: NETGEAR24 Error: Could not connect to AP Error: Could not obtain connection details Error: Could not disconnect from network Finished connection test” messages in the serial monitor.
          Thanks…

  • Hi,

    I’m really interested in this board, does anyone know if the library / shield works with the Arduino Leonardo / ATmega32u4? I asked about the Adafruit library, but they said that they only had support for the UNO / MEGA, not the Leonardo or Due. They said it had something to do with the SPI pins (for this shield I would have to solder on the ISP pins) - but I’m not sure. Has anyone tested this board + library with the Arduino Leonardo?

    Thanks, Quin

    • I updated the library and tested it with a Leonardo. Seems that everything is working. You definitely need the ISP pins for SPI.

    • You will need to use the ISP pins on the Leonardo for SPI (the shield has space for a 2x3 header for these pins). Right now, the library does not support the 32u4, but that is something I will look at fixing on Monday.,

      • Awesome! I really like the idea of using a low cost WiFi chip with the lower - priced Leonardo! thanks!

  • TI’s SmartConfig process is interesting - it tries to solve a difficult IoT problem - how to communicate your network name and password to a device with no screen or keyboard. Initially all your CC3000 can see is lots of nearby wifi traffic that it doesn’t know how to decrypt. How can a smart phone app communicate the necessary network name and passphrase to the CC3000? Shawn mentions (in the product video) that it involves a corrupt UDP packet. This isn’t actually the case. If you’re interested in what’s going on then it’s explained (by me) in this Electronics StackExchange answer. The important thing to note is that anyone interested, not just your CC3000, can easily recover the network name and passphrase sent using Smart Config unless you use the little mentioned AES key feature (which involves a pre-shared key that has to be coded into your MCU sketch).

    • Great write up on the CC3000….thanks for sharing! It seems that I misunderstood how it uses UDP packets for the connection process. There is a mode in SmartConfig for a pre-shared key, and yes, you’d have to enable it in the sketch. I don’t have that feature working yet in the library, but I have noticed that if you include TI’s AES functions, it quickly eats up a lot of the program space in the poor 328.

  • Hi guys! i’m going to buy this shield, but i don’t know if it’s compatible with mega 2560.

    • Most shields that are UNO compatible will work with the MEGA 2560, but I don’t know about this one because it communicates via SPI.

      • That’s why I was asking. I have the cc3000 shield from adafruit, but it’s broken and my project need to conect to internet.

        That one has a few jumpers in the backside that enable it for working with the mega. That one is more expensive than this one, maybe it’s beacuse the jumpers and mega compatibility

        • It should be compatible. Connect the ISP header on the shield with the ISP header (the six pin bundle in a 3x2 configuration near the back of the shield and smack dab in the middle of the MEGA) and they should work as advertised. Oh, and don’t forget the SD and CC3000 chip select wires. It looks like they are using D8 for SD card and D10 for CC3000 (which why they didn’t use D4 for SD select like the standard Ethernet shield is beyond me). Connect D8 on MEGA with D8 on the shield, and D10 on MEGA with D10 on shield.

  • It would be really cool if there was a hole on the board large enough to screw the external antenna to - no need for a second mounting bracket

    • That was actually the original design. The problem is that the U.FL pigtail had to make some awkward angles to get to the connector and usually just popped off.

  • antenna select will be better with jumper/switch.

  • Is this board based off of anyones shield schematic?

  • I am attempting to use this shield with the redboard and basic wifi webserver that shows the value of analog pins. Whenever I power up it tells me that the shield is not present. I am not sure what I am missing!? I have tired dumping the code through 1.0.2 and 1.0.5. Any help is greatly appreciated. Ultimately I am planning to turn this into a wifi weather station using the weather shield. Thanks!!! (forgive me if the code pasted below doesn’t look right in the forum… first time to post code here)

    /* WiFi Web Server

    A simple web server that shows the value of the analog input pins. using a WiFi shield.

    This example is written for a network using WPA encryption. For WEP or WPA, change the Wifi.begin() call accordingly.

    Circuit: * WiFi shield attached * Analog inputs attached to pins A0 through A5 (optional)

    created 13 July 2010 by dlf (Metodo2 srl) modified 31 May 2012 by Tom Igoe

    */

    include <SPI.h>

    include <WiFi.h>

    IPAddress ip(192, 168, 10, 53);

    char ssid[] = “private”; // your network SSID (name) char pass[] = “private”; // your network password //int keyIndex = 0; // your network key Index number (needed only for WEP)

    int status = WL_IDLE_STATUS;

    WiFiServer server(80);

    void setup() { //Initialize serial and wait for port to open: Serial.begin(9600); delay(3000); //while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only //}

    // check for the presence of the shield: if (WiFi.status() == WL_NO_SHIELD) { Serial.println(“WiFi shield not present”); // don’t continue: while(true);}

    // WiFi.config(ip);

    // attempt to connect to Wifi network: while ( status != WL_CONNECTED) { Serial.print(“Attempting to connect to SSID: ”); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
    

    } server.begin(); // you’re connected now, so print out the status: printWifiStatus(); }

    void loop() { // listen for incoming clients WiFiClient client = server.available(); if (client) { Serial.println(“new client”); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write©; // if you’ve gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == ‘\n’ && currentLineIsBlank) { // send a standard http response header client.println(“HTTP/1.1 200 OK”); client.println(“Content-Type: text/html”); client.println(“Connection: close”); // the connection will be closed after completion of the response client.println(“Refresh: 5”); // refresh the page automatically every 5 sec client.println(); client.println(“<!DOCTYPE HTML>”); client.println(“<html>”); // output the value of each analog input pin for (int analogChannel = 0; analogChannel < 6; analogChannel++) { int sensorReading = analogRead(analogChannel); client.print(“analog input ”); client.print(analogChannel); client.print(“ is ”); client.print(sensorReading); client.println(“<br />”);
    } client.println(“</html>”); break; } if (c == ‘\n’) { // you’re starting a new line currentLineIsBlank = true; } else if (c != ‘\r’) { // you’ve gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1);

    // close the connection:
    client.stop();
    Serial.println("client disonnected");
    

    } }

    void printWifiStatus() { // print the SSID of the network you’re attached to: Serial.print(“SSID: ”); Serial.println(WiFi.SSID());

    // print your WiFi shield’s IP address: IPAddress ip = WiFi.localIP(); Serial.print(“IP Address: ”); Serial.println(ip);

    // print the received signal strength: long rssi = WiFi.RSSI(); Serial.print(“signal strength (RSSI):”); Serial.print(rssi); Serial.println(“ dBm”); }

    • You cannot use Wifi.h with this board, as Wifi.h specifically supports Arduino’s WiFi shield (not the CC3000). You will need to use a CC3000 library (such as SFE_CC3000_Library) to use an Arduino with this shield.

      SFE_CC3000_Library does not support web servers (only clients) at this time. There are other web server libraries out there that support the CC3000, or you can try making your own.

  • Any suggestions on how to upgrade the firmware on this board? It looks like 1.14 includes a number of fixes for TCP/UDP functionality. Have there been any tests to ensure client library compatibility?

    • There are ways to update the CC3000 firmware. You can follow TI’s site here. You will need one of their MSP430 boards.

      Alternatively, others have been working on ways to update the firmware with Arduino, such as on this blog.

  • Has anyone had any success grabbing internet time via NTP? I think i have solved the compatibility issues with Time.h via changing the long to unsigned long…… on the line for time t. Unfortunately, trying to integrate adafruit’s NTP code is proving harder than i can handle due to the function to grab ip address of the server: getHostByName. I tried making it lower case and changing the prefix to “wifi”, but i cant seem to get it to compile:

    unsigned long getTime(void) {
    

    uint8_t buf[48]; unsigned long ip, startTime, t = 0L;

    Serial.print(F(“Locating time server…”));

    // Hostname to IP lookup; use NTP pool (rotates through servers) if(cc3000.getHostByName(“pool.ntp.org”, &ip)) { static const char PROGMEM timeReqA[] = { 227, 0, 6, 236 }, timeReqB[] = { 49, 78, 49, 52 };

    Serial.println(F("\r\nAttempting connection..."));
    startTime = millis();
    do {
      client = cc3000.connectUDP(ip, 123);
    } while((!client.connected()) &&
            ((millis() - startTime) < connectTimeout));
    
    if(client.connected()) {
      Serial.print(F("connected!\r\nIssuing request..."));
    
      // Assemble and issue request packet
      memset(buf, 0, sizeof(buf));
      memcpy_P( buf    , timeReqA, sizeof(timeReqA));
      memcpy_P(&buf[12], timeReqB, sizeof(timeReqB));
      client.write(buf, sizeof(buf));
    
      Serial.print(F("\r\nAwaiting response..."));
      memset(buf, 0, sizeof(buf));
      startTime = millis();
      while((!client.available()) &&
            ((millis() - startTime) < responseTimeout));
      if(client.available()) {
        client.read(buf, sizeof(buf));
        t = (((unsigned long)buf[40] << 24) |
             ((unsigned long)buf[41] << 16) |
             ((unsigned long)buf[42] <<  8) |
              (unsigned long)buf[43]) - 2208988800UL;
        Serial.print(F("OK\r\n"));
      }
      client.close();
    }
    

    } if(!t) Serial.println(F(“error”)); return t; }

  • I’m having issues…I’ve got an Arduino Uno R3- this shield is connected on all the headers. I can only see output on serial port if I change to 9600 baud. It seems to work randomly..sometimes in hangs on wifi.init (doesn’t return anything), sometimes it hangs on wifi.connect, no timeout error. I’ve seen it connect a few times, but it’s very inconsistent. Smartconfig works sometimes, but I haven’t seen it make it all the way through the program - last time in finished all the ping test, but then hung on wifi.disconnect. Any tips?

    • I have had success with the CC3000 and the UNO R3. The default baud should be 15200. Do you have anything else connected that could be using/interfering with the UART?

      • Ok, got 15200 working..just needed to change it in the serial viewer. No, there’s nothing else connected to this. I’m concerned that it’s often hanging on wifi.init…connection issues aside, shouldn’t it be getting past initialization? My router is an N router, but it’s b/g compatible (Netgear wireless N). I’m not sure if it’s 5ghz, nor do I see any way to turn it off. But before I try to figure that out, I’d like to see this thing initialize more consistently.

        • There’s an example called “BoardTest” that just initializes. Give that a shot - that should work almost every time if the shield is connected properly.

          • Shawn, Thanks for the help on this. I tried BoardTest as you suggest. Seems that sometimes it finishes the test and works great, and sometimes the wifi fuctions hang without returning. I see this on all the examples I try..even got SmartConfig to work, and connected to my network with pigs sent & received, but only sometimes. It only works without hanging about 25% of the time. I will run a program, it will work, then I will run again, and it won’t work. It seems to have the best chance of working if I disconnect and reconnect the device from serial port/power. Again, this is just a simple Arduino R3 + CC3000 wifi shield - nothing else connected. I have verified electrical connection on all the required connections mentioned in ConnectionTest, namely 5V, GND, 2, 7, 10, 11, 12, and 13. If you can suggest how to troubleshoot this, it would be a great help.

            • That sounds like a WiFi connection issue. Can you run ScanTest a few times and share the results? What kind of signal strength are you getting from your CC3000 to your AP?

              • Thanks. Here are the results of 5 runs of ScanTest:

                Trial 1: hung on wifi.init <close/re-open Arduino IDE, reload ScanTest> Trial 2: hung at search for AP’s <close/re-open Arduino IDE, disconnect/reconnect device, reload ScanTest>

                Trial 3: Success. (I deleted all networks found, except mine)

                SparkFun CC3000 - Scan Test

                CC3000 initialization complete Scanning APs. Waiting for scan to complete. Access Points found:

                SSID: MIZZOU MAC address: C0:3F:0E:10:0D:66 RSSI: 83 Security: WPA2

                Finished scan test

                <close & re-open serial output window, ie. just ran the program again> Trial 4: Exact same result <close & re-open serial output window, ie. just ran the program again> Trial 5: Exact same result

                Note that at first it was hanging, then when I disconnected & reconnected, it seems to work much more consistently.

                In my opinion, this doesn’t seem like a wifi connectivity/network issue. The fact that BoardTest exhibits the same sporadic behavior (and doesn’t run any connection functions) suggests that it’s a device or PC/device issue. Also, the device is literally sitting next to my wifi router, so I’d be surprised if it’s signal strength issue. Other thoughts? Thanks again for your help!

                • The fact that it’s hanging at random places makes me think it could be a hardware issue. Contact techsupport@sparkfun and they can help you narrow down what the problem is. If you’re eligible for a replacement, they can also assist you with that.

  • Is there anybody here with a working web server sample, using the sparkfun CC3000 shield?

  • I am trying to get my Spark fun RedBoard to work with this CC3000 shield. But I can not get it to work. When I run the “ping test” to www.sparkfun.com, the ip adress found is 0.0.0.0, but www.example.com works fine.

    However, when I run the “web client” I only get “Could not make a tcp connection”. I have tried connecting to different sites both local and on the internet.

    Could the problem be that I have not connected the 2x3 ISP connector between the shield and the board?

    Thank you!

    /Martin

    • The ISP connector should not be necessary with the RedBoard. When you run the WebClient example, what IP address is your RedBoard/CC3000 getting?

  • I did the tutorial fine, now I’m trying to post data to a different server. How do I post the timestamp at the time a request is sent? Is there anyway to do it without Time.h (from Arduino) or even better is there a way to do it WITH Time.h , cause currently the SFE_CC3000 library is not compatible with Time.h .

  • Any luck anyone using this for MQTT?

  • I’m trying to use this CC3000 shield with the RedBoard in a project which also requires a couple of servos.

    I can get the WiFi to work perfectly on its own, and the servos also are fine on their own. But as soon as I try to both use WiFi and run the servos in the same program, weird things start to happen. Sometimes it works but the servos chatter every time there’s a network request; sometimes the CC3000 initialization never returns; sometimes it’s just really flaky.

    I’m thinking the Servo library somehow interferes with the CC3000 library, or there’s a hardware conflict somewhere. Has anyone else had this problem? Any suggestions?

    • Are you using a SPI for anything else in addition to the CC3000 (e.g. a servo controller)? I just updated the library, as there was a conflict with trying to talk to SD cards with the CC3000 library loaded.

      I’ve heard that there are conflicts with other libraries, as some interrupts do not play nicely with the CC3000 library. Hardware wise, the CC3000 is using pin 2 for external interrupts - I don’t know if that affects you.

  • I’ve built a replacement driver for the CC3000, https://github.com/wadetb/tinyhci. It’s roughly half the size.

    It doesn’t offer the C++ interface of the SFE library, instead it’s at the socket level. But if someone wanted to, the SFE library could be ported to sit on top of it.

  • I’m working with an 802.11g router running the WebClient sketch. My phone and laptop can connect to the wifi just fine by WebClient keeps giving me this.


    SparkFun CC3000 - WebClient

    CC3000 initialization complete Connecting to SSID: MK1 Error: Could not connect to AP Error: Could not obtain connection details Performing HTTP GET of: www.example.com Error: Could not make a TCP connection

    Error: Could not close socket Error: Could not disconnect from network Finished WebClient test

    I’ve tried different routers and different settings but none of them work. On the other hand, I am able to connect to my iPhone 5 hotspot. I’m not sure what I’m doing wrong. Some help?

    Thanks!

    • The problem is definitely in the connection process. Could you verify a few things for me:

      1) Run the ScanTest sketch and paste the results here

      2) Your SSID (MK1) and password are correct in the sketch

      3) What is your WiFi security (Open, WEP, WPA, WPA2, etc.)?

      • Hey Shawn! The ScanTest works fine (I don’t have the board on me currently) and lists all the SSIDs that my computer would normally see. No warning or error messages at all. I’m certain the SSID and password are correct, as I have entered the same on my laptop and phone just to check. I’ve tried switching the WiFi security from WPA to WPA2 but none of them work. Thanks for helping me work this out!

        • When you type in the password, are you using a regular password or a hexadecimal key (it’ll probably be 64 digits long)?

          Also, have you tried the SmartConfig demo? You might have some luck with that, as you are using your phone to send the password directly to the CC3000 rather than through the Arduino.

          • I’m using a regular password of alphanumeric characters (26 characters long) SmartConfig does not work for me either ):

  • Hi, I just use CC3000 for testing wifi, but when I run WebClient sample, it seems not working. It can not initialize because I only saw below text:


    SparkFun CC3000 - WebClient

    And nothing else.

    Hope everyone can help me to solve this issue.

    Thanks,

    • That seems like you are running out of RAM on the Arduino. Could you check a few things for me:

      • Are you using an ATmega328p version of an Arduino?
      • If you remove the shield and run the WebClient program, what happens?
      • What happens when you run the BoardTest program?
      • ATmega328p I’m using Arduino Mega 2560 board. Is it ok? When I removed the shield, the result is still the same. And no difference with BoardTest.

        • The Arduino Mega is not based on the 328p - it uses an ATmega 2560 as the processor. As a result, the SPI pins are not on pins 10-13, they are on 50-53, which the shield does not cover. So, you’ll need to add a 2x3 female header to the “ISP” port in order to connect to the Mega’s ISP port (which has the SPI lines). Additionally, you’ll need to update to the newest version of the library - I had to make a fix to allow for non-default chip select (CS) pins (so, yeah, thanks for helping find that bug :).

  • Hi, everyone, I have some problem, I can initialize Serial Port, but the device cannot Initialize CC3000 and Connect using DHCP I am using souce from example library Anyone can Help?

      • Which demo program are you using?
      • How far are you getting in the program? Do you see “Something went wrong during CC3000 init!” or does it get to “Connecting to: <SSID>” and then it hangs?
  • hi guys can i use the adafuit library which is used often in the project that i have fount in the internet ? also can i use it as a web server like this project http://www.openhomeautomation.net/wireless-relay-arduino-wifi/ ? thanks

    • Yes, the Adafruit library will work with this shield. You will need to change a few of the pins to get it to work with their example sketches. The Adafruit library supports the ability to be a web server, so in theory, it should work. Please let me know if you get it working!

  • Does the CC3000 support Class A subnets yet? Also does it support hidden SSID’S? I’ve never been able to get it to work on a Class A subnet. I’ve always had to set up a separate network and make it a class B or C subnet.

    • Not sure about Class A subnets. I have not tried it, and there’s nothing in the release notes about it. If you do have any luck with it, please let us know.

      According to TI’s Notes, there’s one small peice about fixing an issue related to hidden SSIDs on a specific router. Based on that, I would imagine that it can handle hidden SSIDs.

  • Hi Shawn, wondering why you chose to add the 74125 in your design?

    • Do you mean the 74HC4050? If so, that acts as a 5V to 3.3V level shifter. The CC3000 is not tolerant of 5V logic.

      • I see the 74HC4050 as a level shifter; I am wondering about the 74AHC1G125 between the CC3000 SPI out and the uC MISO ? Is this in case there is more than one SPI slave? While I’m here, also wondering about the use of two ground planes? I am thinking about building my own single-sided CC3000 board, and wonder if I can get away without stitching around the antenna area.

        Thanks!

        • The 74AHC1G125 is indeed for allowing the CC3000 to work with more than 1 SPI slave. For some reason, TI does not tri-state the MISO pin whenever CS is asserted, which can (and does) put out garbage on the MISO line when you’re trying to talk to other devices. The 74AHC1G125 is a band-aid that tri-states the CC3000’s MISO pin whenever CS is held low.

          If you’re doing your own layout, I recommend carefully reading TI’s datasheet: http://www.ti.com/lit/ds/symlink/cc3000.pdf. While you’ll probably get away with only 1 layer, TI highly recommends having a ground plane under the CC3000 and antenna feed line (I’m not an RF expert, so someone with more RF expertise would probably have a better answer as to why).

          • Ah, I assume you are referring to this: “For best results, the RF trace ground layer must be the ground layer immediately below the RF trace. The ground layer must be solid.”

            Hmmm, not looking forward to creating home-made vias…

            Thanks for the help!

            • That’s correct - I’m guessing you also saw their pictures of suggested layouts.

              I don’t blame you: home made 2-layer boards would not be fun. However, I’ve had some good luck with cheap PCB prototyping places. I suggest:

              For “Made in USA,” see https://oshpark.com

              If you don’t mind “Made in China,” see http://imall.iteadstudio.com/open-pcb/pcb-prototyping.html

              I’ve used both and can’t complain about either.

              • Thanks Shawn, I’ll consider those, but I want to make sure I have a working protoype before I outsource boards. You’ve been very helpful, I appreciate it!

                • Not a problem. Good luck!

                  • Hi again Shawn, just wondering about something on your board. I’m done with my design, but wondered what steps you had taken to ensure 50 Ohm impedance on the RF trace? TI recommends doing microstrip calculations. Your trace is 48 mils wide, which for 1Oz FR4 results in ~0.7mm thickness. I am trying to find the right compromise; a 0.8 mm thick board gives me a 56mil trace!

                    In short, what thickness is your board (and weight?) and how critical, as far as you know, is getting the impedance spot on?

                    Thanks in advance!

                    • The CC3000 boards use 1 oz copper. And like you found, I definitely followed TI’s recommendation for microstrip calculations. However, to get a 50 Ohm impedance, I really should be using a 0.118" thick trace (!). Since that’s not feasible, I made it is wide as possible and short as possible to connect the components. It resulted in about 88 Ohms, which isn’t ideal, but gets the job done.

                      • Good stuff! Thanks. I was worried I’d have to use a 0.6mm thick PCB.

  • What CC3000 firmware versions does the SFE_CC3000_Library support?

    • The library should support 1.10 and up. The shield and breakout boards should be shipping with 1.24. It looks like TI released 1.26, so if you would like to update, check out their patch programming guide here: http://processors.wiki.ti.com/index.php/CC3000_Patch_Programmer

  • No headers and no jumpers to work with the SPI bus on the mega? I know this is only a personal opinion and I love spark fun I just ordered 2 orders from you in the last month =) but I think this is lacking the competition this time around.

    • Actually I appreciate the fact there are no headers. I spent hours pulling the headers off of some Ethernet cards when I needed to wire directly to an Arduino MEGA without stacking them.

      • I agree I don’t like them populated on the shield but I still like them included in the box/bag.

        • Hey TatakaWilly…. I am able to coonect with he sample “ConnectionTest” sketch. Do you have a sample web server sketch, by any chance?….. I have been looking around with no luck..

  • What is the incentive of using this over the Yun?

  • Would this shield make it possible to reprogram the arduino over the air?

    • As it is, it cannot. The CC3000 uses the SPI bus, and Arduino programming happens over UART. However, it is possible to create a bridge (from another Arduino, perhaps) that takes in SPI data from the CC3000 and uses it to re-program your target Arduino.

  • “Eagle Files” link is incorrect, points to the same schematic PDF as the first link. Please fix?

  • Ahhh, so Sparkfun is the reason why the TI boosterpack is out of stock everywhere !!! YOU bought all the modules!!!

  • Please make and sell the little laser-cut adapter for the external antenna. I’m sure it would be useful for other things too.

  • hey It is great to see CC3000 under sparkfun finally…. I am wondering how do you process reflow soldering for this specific component like CC3000. Because reflow soldering of such larger component with LGA and metal cover is very different from “black components” with extended legs. How do you set temperature profile for Oven? Would you like to show us about soldering from your production team. A 3 min video would be great for it.

  • I’m a bit confused by your spec’s above. It appears your supply Voltage in straight from the data sheet of the CC3000. Since you are using a 5-3.3V LDO shouldn’t you supply voltage for this board be based on those numbers. With that said shouldn’t this “Shield” be capable of over 5V in? and not 4.8? Looking at the data sheet of the LDO it is rated for up to 20V max 15V recommended max, and your shift register should be good for 5V tolerant pins such as a standard Arduino.

  • Sounds like I’d have to have a smart phone to configure this. That makes the “total cost of ownership” an additional $2000 – figure about $80/month for a 2 year contract, plus a bit of up-front cost for the phone. I sure can’t justify that. (My current phone, which is smart enough to make phone calls, which is what I need, costs an average of about $10/month [a “prepaid” from T-Mobile, a $100 card, buying me 1000 minutes, lasts me around 10 months].)

    So, it sounds like the fact that you’re not stocking (at least at the moment) that pigtail to a “normal” antenna connector a moot point.

    I’ll stick to using my “stupid” phone and spending the money saved on other electronic toys.

    • There’s a Java applet as well as the phone app. In addition, you can set your SSID and password manually through your Arduino program. You don’t have to use the SmartConfig process.

      Also, here’s your U.FL to RP-SMA cable: https://www.sparkfun.com/products/662

      • The Java applet from TI is fairly terrible. I’ve written a Java client (that uses the TI Java library) that can run on Linux, Windows or Mac. However it (and TI’s Java applet) will almost certainly not work unless your machine is many years old and using 802.11b or 802.11g. Any modern machine will probably be using 802.11n with MIMO. While the CC3000 can only use b and g itself it can be configured via Smart Config on a phone that’s connected to your access point using 802.11n. Unfortunately this will not work for most laptops and desktops as their wifi hardware typically achieve higher speeds than phone hardware - by using MIMO in a way that the CC3000 cannot handle.

        • PS for the iOS or Android Smart Config apps a tablet will do as well as a smart phone. Android tablets start at around $70 on Amazon (and you can certainly get cheaper ones), no contract or additional costs, besides electricity, involved.

      • Thanks! When I’d looked before my above comment, it wasn’t showing up under the “Related Products”, but it is now. (One of the good thing about Spark Fun is that they watch their comment section!)

    • Don’t be silly. You can get a used iPhone for $150 or less, and it doesn’t need service to configure your CC3000. Heck, what’s your address? I will give you an old Android Phone.

      There are also some decent companies out there that offer cheaper cell phone options with a smart phone. Republic Wireless (which I use) could get you going for $10 per month with unlimited voice minutes, and your current usage rate would cost you about $9 on Ting.

      No one says this “TV costs me $3000 because I need to pay for cable.” Why do people do it for phones?

    • You could also run android on a virtual machine on any computer you own with wifi and install the app, if the app really is the only or best way to configure the device.

Customer Reviews

3.8 out of 5

Based on 4 ratings:

5 star
1
4 star
1
3 star
2
2 star
0
1 star
0

1 of 1 found this helpful:

Working, but fit is weird

The shield is working as expected, but it doesn’t fit well over an Arduino Uno R3. The shield is ~1/8" too long on the left side (side the SD card reader is on) and that hits the USB and power jack of the Uno such that the shield can’t sit flush to the Uno’s headers. Still, the Stackable Header Kit (PRT-11417) pins are long enough to allow for this flexibility, it just makes the shield+Uno connection a little wobbly.


Does not work uncustomized with the OSEPP Mega 2560 R3

Could not get the CC3000 to initialize with any of the SFE_CC3000.h libraries plugged into an OSEPP Mega 2560 R3 Arduino board. Tried everything software possible but no luck…..

The shield has a dual parallel header row for all the digital and comms pins passed up from the Arduino and the INT, EN and CS lines are hardwired to pins 2,7 and 10 respectively.

To solve the issue: I installed stack-able headers on the outer edges to match the footprint of the Ardiono and a male header in the parallel header row. I installed a stackable 3x2 header on the underside of the board in the ISP header so it plugs diretly into the ICSP on the Arduino board so that MISO, SCK and MOSI gets connected via this route. I cut the link tracks between the parallel header pads for the SCK, MISO, MOSI, SDCS, EN and INT lines so I can assign them to what ever I pins I want.

As soon as I assigned INT, EN and CS to Pins 3,22 and 24 respectively the module started working.

I suggest an upgraded design which includes a 7 bit dip switch that allows the user to disconnect any of the hardwired lines between the two headers as they wish, or at least 0R jumpers that can be removed if needed. This will make for much wider compatibility across the different Arduino boards.

Works fine now…

Hi, Sorry for the trouble. And thank you for the notes on how you worked around the issue. I’ll pass along your suggestions for possible revisions. Thanks


Easy startup; difficult customization

I was pleased at how easy it is to get the WiFi talking to the access point. Beyond that, I still have not figured out how to modify the usage. For instance, I want to perform peer-to-peer linking. I am slowly getting the impression that it can’t be done, but I’m not sure yet.


Very happy with this!

I was able to get this shield up and running super quick. After a bit of work getting it to connect with my WiFi, I was able to push sensor data easily to data.sparkfun.com. Very easy to use!


Related Tutorials

CC3000 Hookup Guide

April 3, 2014

Getting started guide for the CC3000 shield and breakout board.

Using AT&T's M2X With the CC3000

September 2, 2014

A set of tutorials and examples to show how to connect an Arduino and CC3000 to AT&T's M2X data streams. We show how to post, fetch, and delete data. The final lesson is controlling an LED from an M2X stream.