¿Cómo se corrige el error "Código de respuesta 0" para obtener el "Código de respuesta 202" para actualizar de forma masiva un canal de palabras?

0

Estoy usando este ejemplo: enlace

De acuerdo con el ejemplo, debería estar obteniendo un "Código de respuesta 202". Sin embargo, estoy obteniendo el Código de respuesta 0. Por lo tanto, no obtengo nada en mi canal de palabras. Mi tablero es esp8266 cosa dev.

Mi monitor serie muestra esta salida:

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

¿Por qué recibo el código de respuesta 0? ¿Cómo puedo solucionar este problema para obtener datos en thingspeak.com. ¡¡Ayuda por favor!! He adjuntado mi código a continuación:

/* 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] = '
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
'; 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"); }
    
pregunta Ahmed

1 respuesta

0

He probado este código con una MCU de nodo. Cambié la información de WiFi y la publiqué con éxito en mi canal. Es posible que desee intentar informar un resultado más detallado de la respuesta para ver qué está sucediendo.

    
respondido por el Christopher

Lea otras preguntas en las etiquetas