CC3000 wifi shield difficulties

Adafruit Ethernet, Motor, Proto, Wave, Datalogger, GPS Shields - etc!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
User avatar
adafruit_support_rick
 
Posts: 35092
Joined: Tue Mar 15, 2011 11:42 am

Re: CC3000 wifi shield difficulties

Post by adafruit_support_rick »

Can you post some pictures of the shield, showing your soldering?

User avatar
wellyntong
 
Posts: 16
Joined: Mon Nov 03, 2014 5:28 pm

Re: CC3000 wifi shield difficulties

Post by wellyntong »

Like this?:
http://serviciosagranel.comcastbiz.net/ ... cion.shtml

By the way.... When I run the sketch even without the shield plugged in, it throws the same results, which tells me that the arduinno board doesn't even know the shield is there!

User avatar
adafruit_support_rick
 
Posts: 35092
Joined: Tue Mar 15, 2011 11:42 am

Re: CC3000 wifi shield difficulties

Post by adafruit_support_rick »

Right - you've got some cold solder joints there. That's probably why it's not working.
Reheat all of the joints and make sure to heat the pad as well as the pin. Pin 10 in particular is a problem. The important pins are 13, 12, 11, 10, 5, and 3. Make sure that the solder has flowed over the pad smoothly, like this:
Image

User avatar
wellyntong
 
Posts: 16
Joined: Mon Nov 03, 2014 5:28 pm

Re: CC3000 wifi shield difficulties

Post by wellyntong »

Ok.. I've made a couple of corrections in the soldering, however, i get the same results. Unless you can give me another suggestion, I am going to assume my WiFi shield is fried. This thinks run at $40.00, so I would like to know where to send it back, to see if they can either send me another, or let me know what is wrong with it.

User avatar
adafruit_support_rick
 
Posts: 35092
Joined: Tue Mar 15, 2011 11:42 am

Re: CC3000 wifi shield difficulties

Post by adafruit_support_rick »

Please email [email protected] with a link to this thread for a replacement shield

User avatar
wellyntong
 
Posts: 16
Joined: Mon Nov 03, 2014 5:28 pm

Re: CC3000 wifi shield difficulties

Post by wellyntong »

Done!... Thanks!

User avatar
wellyntong
 
Posts: 16
Joined: Mon Nov 03, 2014 5:28 pm

Re: CC3000 wifi shield difficulties

Post by wellyntong »

I have not got any response to my email asking for a replacement. Should I send another one?.... I am guesing they are going to tell me where to send this damaged one.... Any other suggestions?

User avatar
adafruit_support_rick
 
Posts: 35092
Joined: Tue Mar 15, 2011 11:42 am

Re: CC3000 wifi shield difficulties

Post by adafruit_support_rick »

They may be out for the weekend. You can try sending another email. I don't know if they'll want the old one back or not.

User avatar
wellyntong
 
Posts: 16
Joined: Mon Nov 03, 2014 5:28 pm

Re: CC3000 wifi shield difficulties

Post by wellyntong »

Got a reply from Matt. He explained he would take care of my case. Thank you for your help

User avatar
wellyntong
 
Posts: 16
Joined: Mon Nov 03, 2014 5:28 pm

Re: CC3000 wifi shield difficulties

Post by wellyntong »

As far as my case, I am happy to inform that it is now resolved. Thanks to all of you, especially Matt, who took ownership on it, and completed the solution.

User avatar
adafruit_support_rick
 
Posts: 35092
Joined: Tue Mar 15, 2011 11:42 am

Re: CC3000 wifi shield difficulties

Post by adafruit_support_rick »

wellyntong wrote:As far as my case, I am happy to inform that it is now resolved. Thanks to all of you, especially Matt, who took ownership on it, and completed the solution.
You're welcome!

User avatar
wellyntong
 
Posts: 16
Joined: Mon Nov 03, 2014 5:28 pm

Re: CC3000 wifi shield difficulties

Post by wellyntong »

OK Rick... here I am again, sir.

Now I can see the web page in my iphone, using this sketch:

Code: Select all

#include <Adafruit_CC3000.h>
#include <SPI.h>
#include "utility/debug.h"
#include "utility/socket.h"
// These are the interrupt and control pins
#define ADAFRUIT_CC3000_IRQ 3 // MUST be an interrupt pin!
// These can be any two pins
#define ADAFRUIT_CC3000_VBAT 5
#define ADAFRUIT_CC3000_CS 10
// Use hardware SPI for the remaining pins
// On an UNO, SCK = 13, MISO = 12, and MOSI = 11
Adafruit_CC3000 cc3000 = Adafruit_CC3000(ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_IRQ, ADAFRUIT_CC3000_VBAT,
SPI_CLOCK_DIVIDER); // you can change this clock speed
#define WLAN_SSID "BRETON-NG" // cannot be longer than 32 characters!
#define WLAN_PASS "CARAMBA001"
// Security can be WLAN_SEC_UNSEC, WLAN_SEC_WEP, WLAN_SEC_WPA or WLAN_SEC_WPA2
#define WLAN_SECURITY WLAN_SEC_WPA2
#define LISTEN_PORT 80 // What TCP port to listen on for connections.
// The HTTP protocol uses port 80 by default.
#define MAX_ACTION 10 // Maximum length of the HTTP action that can be parsed.
#define MAX_PATH 64 // Maximum length of the HTTP request path that can be parsed.
// There isn't much memory available so keep this short!
#define BUFFER_SIZE MAX_ACTION + MAX_PATH + 20 // Size of buffer for incoming request data.
// Since only the first line is parsed this
// needs to be as large as the maximum action
// and path plus a little for whitespace and
// HTTP version.
#define TIMEOUT_MS 500 // Amount of time in milliseconds to wait for
// an incoming request to finish. Don't set this
// too high or your server could be slow to respond.
Adafruit_CC3000_Server httpServer(LISTEN_PORT);
uint8_t buffer[BUFFER_SIZE+1];
int bufindex = 0;
char action[MAX_ACTION+1];
char path[MAX_PATH+1];
void setup(void)
{
  Serial.begin(115200);
  Serial.println(F("Hello, CC3000!\n"));
  Serial.print("Free RAM: "); 
  Serial.println(getFreeRam(), DEC);
  // Initialise the module
  Serial.println(F("\nInitializing..."));
  if (!cc3000.begin())
  {
    Serial.println(F("Couldn't begin()! Check your wiring?"));
    while(1);
  }
  Serial.print(F("\nAttempting to connect to ")); 
  Serial.println(WLAN_SSID);
  if (!cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) {
    Serial.println(F("Failed!"));
    while(1);
  }
  Serial.println(F("Connected!"));
  Serial.println(F("Request DHCP"));
  while (!cc3000.checkDHCP())
  {
    delay(100); // ToDo: Insert a DHCP timeout!
  }
  // Display the IP address DNS, Gateway, etc.
  while (! displayConnectionDetails()) {
    delay(1000);
  }
  // ******************************************************
  // You can safely remove this to save some flash memory!
  // ******************************************************
  Serial.println(F("\r\nNOTE: This sketch may cause problems with other sketches"));
  Serial.println(F("since the .disconnect() function is never called, so the"));
  Serial.println(F("AP may refuse connection requests from the CC3000 until a"));
  Serial.println(F("timeout period passes. This is normal behaviour since"));
  Serial.println(F("there isn't an obvious moment to disconnect with a server.\r\n"));
  // Start listening for connections
  httpServer.begin();
  Serial.println(F("Listening for connections..."));
}
void loop(void)
{
  // Try to get a client which is connected.
  Adafruit_CC3000_ClientRef client = httpServer.available();
  if (client) {
    Serial.println(F("Client connected."));
    // Process this request until it completes or times out.
    // Note that this is explicitly limited to handling one request at a time!
    // Clear the incoming data buffer and point to the beginning of it.
    bufindex = 0;
    memset(&buffer, 0, sizeof(buffer));
    // Clear action and path strings.
    memset(&action, 0, sizeof(action));
    memset(&path, 0, sizeof(path));
    // Set a timeout for reading all the incoming data.
    unsigned long endtime = millis() + TIMEOUT_MS;
    // Read all the incoming data until it can be parsed or the timeout expires.
    bool parsed = false;
    while (!parsed && (millis() < endtime) && (bufindex < BUFFER_SIZE)) {
      if (client.available()) {
        buffer[bufindex++] = client.read();
      }
      parsed = parseRequest(buffer, bufindex, action, path);
    }
    // Handle the request if it was parsed.
    if (parsed) {
      Serial.println(F("Processing request"));
      Serial.print(F("Action: ")); 
      Serial.println(action);
      Serial.print(F("Path: ")); 
      Serial.println(path);
      Serial.print(F("Parsed: ")); 
      Serial.println(parsed);
      // Check the action to see if it was a GET request.
      if (strcmp(action, "GET") == 0) {
        // Respond with the path that was accessed.
        // First send the success response code.
        client.fastrprintln(F("HTTP/1.1 200 OK"));
        // Then send a few headers to identify the type of data returned and that
        // the connection will not be held open.
        client.fastrprintln(F("Content-Type: text/plain"));
        client.fastrprintln(F("Connection: close"));
        client.fastrprintln(F("Server: Adafruit CC3000"));
        // Send an empty line to signal start of body.
        client.fastrprintln(F(""));
        // Now send the response data.
        client.fastrprintln(F("Hello world!"));
        client.fastrprint(F("You accessed path: ")); 
        client.fastrprintln(path);
        client.fastrprintln(F("<a href=\"/H\">here</a> turn the LED on pin 9 on<br>"));
        client.fastrprintln(F("<a href=\"/L\">here</a> turn the LED on pin 9 off<br>"));

        // The HTTP response ends with another blank line:
        client.fastrprintln(F(""));
      }
      else {
        // Unsupported action, respond with an HTTP 405 method not allowed error.
        client.fastrprintln(F("HTTP/1.1 405 Method Not Allowed"));
        client.fastrprintln(F(""));
      }
    }
    // Wait a short period to make sure the response had time to send before
    // the connection is closed (the CC3000 sends data asyncronously).
    delay(100);
    // Close the connection when done.
    Serial.println(F("Client disconnected"));
    client.close();
  }
}
// Return true if the buffer contains an HTTP request. Also returns the request
// path and action strings if the request was parsed. This does not attempt to
// parse any HTTP headers because there really isn't enough memory to process
// them all.
// HTTP request looks like:
// [method] [path] [version] \r\n
// Header_key_1: Header_value_1 \r\n
// ...
// Header_key_n: Header_value_n \r\n
// \r\n
bool parseRequest(uint8_t* buf, int bufSize, char* action, char* path) {
  // Check if the request ends with \r\n to signal end of first line.
  if (bufSize < 2)
    return false;
  if (buf[bufSize-2] == '\r' && buf[bufSize-1] == '\n') {
    parseFirstLine((char*)buf, action, path);
    return true;
  }
  return false;
}
// Parse the action and path from the first line of an HTTP request.
void parseFirstLine(char* line, char* action, char* path) {
  // Parse first word up to whitespace as action.
  char* lineaction = strtok(line, " ");
  if (lineaction != NULL)
    strncpy(action, lineaction, MAX_ACTION);
  // Parse second word up to whitespace as path.
  char* linepath = strtok(NULL, " ");
  if (linepath != NULL)
    strncpy(path, linepath, MAX_PATH);
}
// Tries to read the IP address and other connection details
bool displayConnectionDetails(void)
{
  uint32_t ipAddress, netmask, gateway, dhcpserv, dnsserv;
  if(!cc3000.getIPAddress(&ipAddress, &netmask, &gateway, &dhcpserv, &dnsserv))
  {
    Serial.println(F("Unable to retrieve the IP Address!\r\n"));
    return false;
  }
  else
  {
    Serial.print(F("\nIP Addr: ")); 
    cc3000.printIPdotsRev(ipAddress);
    Serial.print(F("\nNetmask: ")); 
    cc3000.printIPdotsRev(netmask);
    Serial.print(F("\nGateway: ")); 
    cc3000.printIPdotsRev(gateway);
    Serial.print(F("\nDHCPsrv: ")); 
    cc3000.printIPdotsRev(dhcpserv);
    Serial.print(F("\nDNSserv: ")); 
    cc3000.printIPdotsRev(dnsserv);
    Serial.println();
    return true;
  }
}
..... However, the links I try to show, look like: "<a href=\"/H\">here</a> turn the LED on pin 9 on<br>".... in other words, HTML tags are showing. what is it I need to do to send a response to the arduino from my iphone, and turn on a simple LED?
Last edited by adafruit_support_rick on Mon Dec 22, 2014 2:05 pm, edited 2 times in total.
Reason: please use Code tags when posting code (</> button)

User avatar
adafruit_support_rick
 
Posts: 35092
Joined: Tue Mar 15, 2011 11:42 am

Re: CC3000 wifi shield difficulties

Post by adafruit_support_rick »

Sorry - I'm clueless on HTML. I'll see if somebody else can help.

User avatar
tdicola
 
Posts: 1074
Joined: Thu Oct 17, 2013 9:11 pm

Re: CC3000 wifi shield difficulties

Post by tdicola »

Oh it's probably the content type header being sent back to the browser. This line:

Code: Select all

client.fastrprintln(F("Content-Type: text/plain"));
Is telling the web browser that the following data should be interpreted as plain text. However you really want to browser to treat it as HTML. Try changing it to this:

Code: Select all

client.fastrprintln(F("Content-Type: text/html"));
That should be all you need to do to have the browser interpret everything as HTML and render the page. Give it a shot and let me know if you see any issues, thanks!

User avatar
wellyntong
 
Posts: 16
Joined: Mon Nov 03, 2014 5:28 pm

Re: CC3000 wifi shield difficulties

Post by wellyntong »

Alright!, guys!... That worked!... Now I get the links!.... Thank you!.... So, when I click on the link, the page gets refreshed...... Now, I'm guessing, I use the "path" (H or L) to turn my LEDs on or off, Right?

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino Shields from Adafruit”