0
\$\begingroup\$

I am using this example: https://www.mathworks.com/help/thingspeak/continuously-collect-data-and-bulk-update-a-thingspeak-channel-using-an-arduino-mkr1000-board-or-an-esp8266-board.html

According to the example I should be getting a "Response code 202".However, I am getting Response code 0. Therefore, I am not getting any thing on my thingspeak channel. My board is esp8266 thing dev.

My serial monitor displays this output:

Attempting to connect to SSID: Xperia Z_a769
Connected to wifi
SSID: Xperia Z_a769
IP Address: **********
signal strength (RSSI):-47 dBm
Response code:0

Why am I getting response code 0 ? How can I fix this issue to get data on thingspeak.com. Help please!! I have attached my code below:

/* This example shows how to bulk update a ThingSpeak channel using an 
   Arduino MKR1000 or an ESP8266*/

 #include //Uncomment this library to work with ESP8266
 #include //Uncomment this library to work with ESP8266

 //#include // Comment this to work with ESP8266 board
//#include // Comment this to work with ESP8266 board

char jsonBuffer[500] = "["; // Initialize the jsonBuffer to hold data

char ssid[] = "Xperia Z_a769"; // Your network SSID (name)
char pass[] = "7c6761b56ed2"; // Your network password
WiFiClient client; // Initialize the WiFi client library

char server[] = "api.thingspeak.com"; // ThingSpeak Server

/* Collect data once every 15 seconds and post data to ThingSpeak channel 
once every 2 minutes */
unsigned long lastConnectionTime = 0; // Track the last connection time
unsigned long lastUpdateTime = 0; // Track the last update time
const unsigned long postingInterval = 120L * 1000L; // Post data every 2 
minutes
const unsigned long updateInterval = 15L * 1000L; // Update once every 15 
seconds

void setup() {
Serial.begin(9600);
// Attempt to connect to WiFi network
while (WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network. Change this line if 
using open or WEP network
delay(10000); // Wait 10 seconds to connect
  }
  Serial.println("Connected to wifi");
  printWiFiStatus(); // Print WiFi connection information
  }

void loop() {
// If update time has reached 15 seconds, then update the jsonBuffer
if (millis() - lastUpdateTime >= updateInterval) {
updatesJson(jsonBuffer);
  }

 }

 // Updates the jsonBuffer with data
void updatesJson(char* jsonBuffer){
/* JSON format for updates paramter in the API
* This example uses the relative timestamp as it uses the "delta_t". If your 
device has a real-time clock, you can provide the absolute timestamp using 
the "created_at" parameter
* instead of "delta_t".
* "[{\"delta_t\":0,\"field1\":-70},{\"delta_t\":15,\"field1\":-66}]"
*/
// Format the jsonBuffer as noted above
strcat(jsonBuffer,"{\"delta_t\":");
 unsigned long deltaT = (millis() - lastUpdateTime)/1000;
 size_t lengthT = String(deltaT).length();
 char temp[4];
 String(deltaT).toCharArray(temp,lengthT+1);
 strcat(jsonBuffer,temp);
 strcat(jsonBuffer,",");
 long rssi = WiFi.RSSI();
  strcat(jsonBuffer, "\"field1\":");
 lengthT = String(rssi).length();
 String(rssi).toCharArray(temp,lengthT+1);
 strcat(jsonBuffer,temp);
 strcat(jsonBuffer,"},");
 // If posting interval time has reached 2 minutes, then update the 
 ThingSpeak channel with your data
  if (millis() - lastConnectionTime >= postingInterval) {
  size_t len = strlen(jsonBuffer);
  jsonBuffer[len-1] = ']';
  httpRequest(jsonBuffer);
 }
 lastUpdateTime = millis(); // Update the last update time
  }

 // Updates the ThingSpeakchannel with data
 void httpRequest(char* jsonBuffer) {
 /* JSON format for data buffer in the API
 * This example uses the relative timestamp as it uses the "delta_t". If 
   your device has a real-time clock, you can also provide the absolute 
   timestamp using the "created_at" parameter
   * instead of "delta_t".
   * "{\"write_api_key\":\"YOUR-CHANNEL-WRITEAPIKEY\",\"updates\": 
      [{\"delta_t\":0,\"field1\":-60},{\"delta_t\":15,\"field1\":200}, 
      {\"delta_t\":15,\"field1\":-66}]
   */
   // Format the data buffer as noted above
  char data[500] = "{\"write_api_key\":\"6OF022OLH2QM50TP\",\"updates\":"; 
   //Replace YOUR-CHANNEL-WRITEAPIKEY with your ThingSpeak channel write API 
   key
  strcat(data,jsonBuffer);
  strcat(data,"}");
  // Close any connection before sending a new request
  client.stop();
  String data_length = String(strlen(data)+1); //Compute the data buffer 
  length
  // POST data to ThingSpeak
  if (client.connect(server, 80)) {
  client.println("POST /channels/522490/bulk_update.json HTTP/1.1"); 
  //Replace YOUR-CHANNEL-ID with your ThingSpeak channel ID
  client.println("Host: api.thingspeak.com");
  client.println("User-Agent: mw.doc.bulk-update (Arduino ESP8266)");
  client.println("Connection: close");
  client.println("Content-Type: application/json");
  client.println("Content-Length: "+data_length);
  client.println();
  client.println(data);
 }
 else {
 Serial.println("Failure: Failed to connect to ThingSpeak");
}
 delay(15000); //Wait to receive the response
client.parseFloat();
String resp = String(client.parseInt());
Serial.println("Response code:"+resp); // Print the response code. 202 
                     indicates that the server has accepted the response
jsonBuffer[0] = '['; // Reinitialize the jsonBuffer for next batch of data
jsonBuffer[1] = '\0';
lastConnectionTime = millis(); // Update the last connection time
  }

  void printWiFiStatus() {
 // Print the SSID of the network you're attached to:
 Serial.print("SSID: ");
 Serial.println(WiFi.SSID());

 // Print your device 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");
}
\$\endgroup\$
0
\$\begingroup\$

I tested this code with a Node MCU. I changed the WiFi information and it successfully posted to my channel. You might want to try reporting a more detailed output of the response to see what is happening.

\$\endgroup\$
  • \$\begingroup\$ The output above is the detailed one. I don't know why it is giving me Response Code 0. I tried with both ESP8266 thing dev and Node MCU. \$\endgroup\$ – Ahmed Jun 23 '18 at 17:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.