1

I am working with Arduino UNO + AdaFruit CC3000 Wi-Fi shield. I ran it with a lot of websites and webpages, but for now I am going to get sub-domain from Heroku, and it has no IP address. The sub-domain is myapp.herokuapp.com.

So, how can I send a GET request to such an application like that?

Here's the code :

 // Library headers section
 #include <Adafruit_CC3000.h>
 #include <ccspi.h>
 #include <SPI.h>
 #include <string.h>
 #include "utility/debug.h"
 // Constants area
 #define ADAFRUIT_CC3000_IRQ 3 // must be an interrupt pin (2 or 3)
 #define ADAFRUIT_CC3000_VBAT 5 // any pin
 #define ADAFRUIT_CC3000_CS 10 // any pin
 //use hardware SPI for remaining pins
 // Uno: SCK=13, MISO=12, MOSI=11
 Adafruit_CC3000 cc3000 = Adafruit_CC3000(ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_IRQ,
 ADAFRUIT_CC3000_VBAT, SPI_CLOCK_DIVIDER);
 #define WLAN_SSID "Ibtikar.AP2"
 #define WLAN_PASS "#ibtik@r#"
 // set security type
 // WLAN_SEC_UNSEC, WLAN_SEC_WEP, WLAN_SEC_WPA, WLAN_SEC_WPA2
 #define WLAN_SECURITY WLAN_SEC_WPA2
 #define IDLE_TIMEOUT_MS 3000 // amount of time to wait with no date recieved
 // before rejecting/closing the collection
 #define WEBSITE "myapp.herokuapp.com"
 uint32_t ip;
 void setup() {
 // put your setup code here, to run once:
 Serial.begin(115200);
 Serial.print("Free RAM: "); Serial.println(getFreeRam(), DEC);
/* Initialise the module */
 Serial.println(F("\nInitializing..."));
 delay(100);
 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!"));
 /* Wait for DHCP to complete */
 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);
 }
 ip = 0;
 // Try looking up the website's IP address
 Serial.print(WEBSITE); Serial.print(F(" -> "));
 while (ip == 0) {
 if (! cc3000.getHostByName(WEBSITE, &ip)) {
 Serial.println(F("Couldn't resolve!"));
 }
 delay(500);
 }
 cc3000.printIPdotsRev(ip);
 // Optional: Do a ping test on the website
 Serial.print(F("\n\rPinging ")); cc3000.printIPdotsRev(ip); Serial.print("..."); 
 int replies = cc3000.ping(ip, 5);
 Serial.print(replies); Serial.println(F(" replies"));
 }
 void loop() {
 /* Try connecting to the website.
 Note: HTTP/1.1 protocol is used to keep the server from closing the connection before all data is read.
 */
 Adafruit_CC3000_Client www = cc3000.connectTCP(ip, 80);
 if (www.connected()) {
 www.fastrprint(F("GET "));
 www.fastrprint(F(" HTTP/1.1\r\n"));
 www.fastrprint(F("Host: myapp.herokuapp.com")); 
 //www.fastrprint(WEBSITE); 
 www.fastrprint(F("\r\n"));
 www.println();
 } else {
 Serial.println(F("Connection failed")); 
 return;
 }
 Serial.println(F("-------------------------------------"));
 unsigned long lastRead = millis();
 while (www.connected() && (millis() - lastRead < IDLE_TIMEOUT_MS)) {
 while (www.available()) {
 char c = www.read();
 Serial.print(c);
 lastRead = millis();
 }
 }
 www.close();
 Serial.println(F("-------------------------------------"));
 /* You need to make sure to clean up after yourself or the CC3000 can freak out */
 /* the next time your try to connect ... */
 Serial.println(F("\n\nDisconnecting"));
 cc3000.disconnect();
 delay(1000);
 }
 /**************************************************************************/
 /*!
 @brief Begins an SSID scan and prints out all the visible networks
 */
 /**************************************************************************/
 void listSSIDResults(void)
 { 
 uint32_t index;
 uint8_t valid, rssi, sec;
 char ssidname[33]; 
 if (!cc3000.startSSIDscan(&index)) {
 Serial.println(F("SSID scan failed!"));
 return;
 }
 Serial.print(F("Networks found: ")); Serial.println(index);
 Serial.println(F("================================================"));
 while (index) {
 index--;
 valid = cc3000.getNextSSID(&rssi, &sec, ssidname);
 Serial.print(F("SSID Name : ")); Serial.print(ssidname);
 Serial.println();
 Serial.print(F("RSSI : "));
 Serial.println(rssi);
 Serial.print(F("Security Mode: "));
 Serial.println(sec);
 Serial.println();
 }
 Serial.println(F("================================================"));
 cc3000.stopSSIDscan();
 }
 /**************************************************************************/
 /*!
 @brief 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;
 }
 }
Greenonline
3,1527 gold badges36 silver badges48 bronze badges
asked Mar 29, 2015 at 11:14

1 Answer 1

1

You don't need to know the IP address; the getHostByName() method takes care of resolving the website to an address. It seems 2 lines are missing from your code:

 #define WEBPAGE "/index.html" // change the string to the webpage you want

at the top, and:

 www.fastrprint(WEBPAGE);

right after www.fastrprint(F("GET "));. Without these lines, you've failed to indicate the specific webpage you wish to GET. Anyways, when i tried to open myapp.herokuapp.com, I got a message saying that its offline for maintenance, so you'll most likely fail to retrieve anything.

answered Jan 6, 2016 at 16:14

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.