We are trying to connect our Arduino-based wifi bee (ATmega 328P) to the Cloudant database. The wifi bee uses the wiwhield library to connect to the Internet. We can use this to connect to objects (xively) and post / get. However, with cloudant we cannot do this and continue to receive the 503 Service access request.
I think the problem is that Wishield expects an IP address to be specified, while Cloudant uses DNS. I am adding a code snippet using wishield, which works great for GET data from weather.com, but when we modify the variables for cloudant.com, it just gives me a 503 request.
Please find different codes: Code snippet: GetDatafromCloudant.ino: We just changed the IP address / port information to request a cloud GET.
/* * A simple sketch that uses WiServer to get the hourly weather data from LAX and prints * it via the Serial API */ #include <WiServer.h> #define WIRELESS_MODE_INFRA 1 #define WIRELESS_MODE_ADHOC 2 // Wireless configuration parameters ---------------------------------------- unsigned char local_ip[] = {192,168,1,2}; // IP address of WiShield unsigned char gateway_ip[] = {192,168,1,1}; // router or gateway IP address unsigned char subnet_mask[] = {255,255,255,0}; // subnet mask for the local network const prog_char ssid[] PROGMEM = {"BSNL_AP"}; // max 32 bytes unsigned char security_type = 2; // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2 // WPA/WPA2 passphrase const prog_char security_passphrase[] PROGMEM = {"bhutoriafamily"}; // max 64 characters // WEP 128-bit keys // sample HEX keys prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3 }; // setup the wireless mode // infrastructure - connect to AP // adhoc - connect to another WiFi device unsigned char wireless_mode = WIRELESS_MODE_INFRA; unsigned char ssid_len; unsigned char security_passphrase_len; // End of wireless configuration parameters ---------------------------------------- // Function that prints data from the server void printData(char* data, int len) { // Print the data returned by the server // Note that the data is not null-terminated, may be broken up into smaller packets, and // includes the HTTP header. while (len-- > 0) { Serial.print(*(data++)); } } // IP Address for www.weather.gov //uint8 ip[] = {140,90,113,200}; uint8 ip[] = {50,23,104,75}; // A request that gets the latest METAR weather data for LAX GETrequest getWeather(ip, 5984, "http://alfatek.cloudant.com", "/wifi/_all_docs"); void setup() { // Initialize WiServer (we'll pass NULL for the page serving function since we don't need to serve web pages) WiServer.init(NULL); // Enable Serial output and ask WiServer to generate log messages (optional) Serial.begin(57600); WiServer.enableVerboseMode(true); // Have the processData function called when data is returned by the server getWeather.setReturnFunc(printData); } // Time (in millis) when the data should be retrieved long updateTime = 0; void loop(){ // Check if it time to get an update if (millis() >= updateTime) { getWeather.submit(); // Get another update one hour from now updateTime += 1000 * 20 ; } // Run WiServer WiServer.server_task(); delay(10); }
Code snippet: GetDatafromWeather.ino: This works great, and we can extract data from weather.com for LA meteorological data ..
/* * A simple sketch that uses WiServer to get the hourly weather data from LAX and prints * it via the Serial API */ #include <WiServer.h> #define WIRELESS_MODE_INFRA 1 #define WIRELESS_MODE_ADHOC 2 // Wireless configuration parameters ---------------------------------------- unsigned char local_ip[] = {192,168,1,2}; // IP address of WiShield unsigned char gateway_ip[] = {192,168,1,1}; // router or gateway IP address unsigned char subnet_mask[] = {255,255,255,0}; // subnet mask for the local network const prog_char ssid[] PROGMEM = {"BSNL_AP"}; // max 32 bytes unsigned char security_type = 2; // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2 // WPA/WPA2 passphrase const prog_char security_passphrase[] PROGMEM = {"bhutoriafamily"}; // max 64 characters // WEP 128-bit keys // sample HEX keys prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3 }; // setup the wireless mode // infrastructure - connect to AP // adhoc - connect to another WiFi device unsigned char wireless_mode = WIRELESS_MODE_INFRA; unsigned char ssid_len; unsigned char security_passphrase_len; // End of wireless configuration parameters ---------------------------------------- // Function that prints data from the server void printData(char* data, int len) { // Print the data returned by the server // Note that the data is not null-terminated, may be broken up into smaller packets, and // includes the HTTP header. while (len-- > 0) { Serial.print(*(data++)); } } // IP Address for www.weather.gov uint8 ip[] = {140,90,113,200}; // A request that gets the latest METAR weather data for LAX GETrequest getWeather(ip, 80, "www.weather.gov", "/data/METAR/KLAX.1.txt"); void setup() { // Initialize WiServer (we'll pass NULL for the page serving function since we don't need to serve web pages) WiServer.init(NULL); // Enable Serial output and ask WiServer to generate log messages (optional) Serial.begin(57600); WiServer.enableVerboseMode(true); // Have the processData function called when data is returned by the server getWeather.setReturnFunc(printData); } // Time (in millis) when the data should be retrieved long updateTime = 0; void loop(){ // Check if it time to get an update if (millis() >= updateTime) { getWeather.submit(); // Get another update one hour from now updateTime += 1000 * 20 ; } // Run WiServer WiServer.server_task(); delay(10); }