Cannot connect to ThingSpeak | ThingSpeak API | Forum

Avatar

Please consider registering
Guest

Search

— Forum Scope —






— Match —





— Forum Options —





Minimum search word length is 3 characters - maximum search word length is 84 characters

Register Lost password?
sp_Feed sp_TopicIcon
Cannot connect to ThingSpeak
Avatar
DeYulia
New Member
Forum Posts: 2
sp_UserOfflineSmall Offline
1
May 8, 2017 - 2:40 pm
sp_Permalink sp_Print

I'm unable to connect and post data to my ThingSpeak channel.  Data being sent from ESP8266-01S module, using WiFi to access internet.  I can send data to Google Sheets, but not to ThingSpeak.  Something wrong in my connect code.  API is the WRITE API.  Code follows:

 

[code]
/*
H2O_Flo_WiFi

Measures the flow rate of water flowing through a 3/4-inch PVC pipe using a DIGITEN Hall effect sensor and displaying results on thingspeak.com using an ESP8266-01S
Sensor date wire connected to Uno pin D2
The sensor output is in the form of the duration in milliseconds of a square wave pulse and the relationship to the water flowrate is:

F = 4.8 * Q ( in liters per minute)

ThingSpeak ( https://www.thingspeak.com ) is an analytic IoT platform service that allows you to aggregate, visualize and
analyze live data streams in the cloud.

Documentation for the ThingSpeak Communication Library for Arduino is in the extras/documentation folder where the library was installed.

*/
#include <ESP8266WiFi.h>

String apiKey = "0ZUS9CDG08ZU6VJ2";

#include <ThingSpeak.h>

// WiFi SSD and Password

// char ssid[] = "tracy"
// char password[] = "Mange161"
// char server[] = "api.thingspeak.com"

const char* ssid = "tracy";
const char* password = "Mange161";

const char* server = "api.thingspeak.com";

//Initialize the client library
WiFiClient client;

#include <SPI.h>

void setup() {

pinMode(2, INPUT);

Serial.begin(115200);

delay(1000);

// init done

 

Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);
delay(10000);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");

 

}

void loop() {

const unsigned long duration = pulseIn(2, HIGH);
//Pulse duration in microseconds

float dursec = duration / 1000000.0;
//Pulse duration in seconds

float pulsefreq = 10.0;

if ( duration != 0 )
{
pulsefreq = 1.0 / dursec;
}
else
{
pulsefreq = 0.0;
}

//Pulse frequency in Hz

float flolit = (pulsefreq / 4.8);
float flolitr = 60.0 * flolit;
//Flow rate in Liters/hour

float flogal = flolitr * .26417;
//Flow rate in Gallons/hour
float flocuft = flolitr * .035315;
//Flow rate in cu ft/hour

if (client.connect(server, 80)) { // "184.106.153.149" or api.thingspeak.com
String postStr = apiKey;
postStr += "&field1=";
postStr += String(flogal);
postStr += "

";

client.print("POST /update HTTP/1.1
");
client.print("Host: api.thingspeak.com
");
client.print("Connection: close
");
client.print("X-THINGSPEAKAPIKEY: " + apiKey + "
");
client.print("Content-Type: application/x-www-form-urlencoded
");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("

");
client.print(postStr);

 

// Write to ThingSpeak. There are up to 8 fields in a channel, allowing you to store up to 8 different
// pieces of information in a channel. Here, we write to field 1.

//ThingSpeak.writeField( 255517, 1, flogal, "0ZUS9CDG08ZU6VJ2")

}
client.stop();

delay(600000);
// ThingSpeak will only accept updates every 15 seconds.

}

 

[/code]

Avatar
cstapels

Gold
Forum Posts: 126
sp_UserOfflineSmall Offline
2
May 9, 2017 - 2:23 pm
sp_Permalink sp_Print sp_EditHistory

You might consider trying your HTTP request in POSTMAN first, just to get the syntax correct.  I think the issue is in this section:

if (client.connect(server, 80)) { // "184.106.153.149" or api.thingspeak.com
String postStr = apiKey;
postStr += "&field1=";
postStr += String(flogal);
....

your "postStr" should start with a string that says "api_key=" and then append the api_key. You want postStr="api_key=XXXXXXXXXXXXXXXX&field1="

For some hints, you might look at Continuously Collect Data and Bulk-Update a ThingSpeak Channel Using an Arduino MKR1000 Board or an ESP8266 Board, but keep in mind this syntax is for a bulk update which slightly different.

You also have the line "client.print("X-THINGSPEAKAPIKEY: " + apiKey + " 

You can safely keep this line, but you do not need to have the api key in both the header section and the body.  

You could also look at the "WriteVoltage" example that comes with the ThingSpeak Communication Library for Arduino.  It looks like you are combining methods from the thingspeak library with separate wifi client methods.

Forum Timezone: America/New_York

Most Users Ever Online: 114

Currently Online: jacktheripper125
18 Guest(s)

Currently Browsing this Page:
1 Guest(s)

Top Posters:

rw950431: 252

Vinod: 164

cstapels: 96

piajola: 75

vespapierre: 63

Adarsh_Murthy: 59

Newest Members:

Nsneilotof

angieus2

goldiepw11

BinanceoSt

gnarender123@gmail.com

edenderest

Forum Stats:

Groups: 4

Forums: 17

Topics: 1313

Posts: 4565

 

Member Stats:

Guest Posters: 1

Members: 5703

Moderators: 0

Admins: 2

Administrators: Hans, lee