Hi,
I’m struggling updating two ThingSpeak channels.
I have 15 fields of data that I need to upload.
Please help!
This is my current code:
//update ThingSpeak channel 1
updated1 = updateThingSpeak1(String(value_water_area_a), String(value_water_area_b), String(value_light), String(value_uv), String(indice_uv), String(value_watertank_level), String(value_water_temp), String(value_rtc_temp));
//if update succeeded light up green LED, else light up red LED
if(updated1){
LightGreen();
}else{
LightRed();
}
//wait for delay time before attempting to post again
delay(DELAY_TIME);
}
bool updateThingSpeak1(String Uvalue_water_area_a, String Uvalue_water_area_b, String Uvalue_light, String Uvalue_uv, String Uindice_uv, String Uvalue_watertank_level, String Uvalue_water_temp, String Uvalue_rtc_temp) {
//initialize your AT command string
String cmd = “AT+CIPSTART=“TCP”,”";
//add IP address and port
cmd += IP;
cmd += “”,80";
//connect
Serial.println(cmd);
delay(2000);
if(Serial.find(“Error”)){
return false;
}
//build GET command, ThingSpeak takes Post or Get commands for updates, I use a Get
cmd = GET_a;
cmd += Uvalue_water_area_a;
cmd += FIELD2_a;
cmd += Uvalue_water_area_b;
cmd += FIELD3_a;
cmd += Uvalue_light;
cmd += FIELD4_a;
cmd += Uvalue_uv;
cmd += FIELD5_a;
cmd += Uindice_uv;
cmd += FIELD6_a;
cmd += Uvalue_watertank_level;
cmd += FIELD7_a;
cmd += Uvalue_water_temp;
cmd += FIELD8_a;
cmd += Uvalue_rtc_temp;
cmd += “\r\n”;
//Use AT commands to send data
Serial.print(“AT+CIPSEND=”);
Serial.println(cmd.length());
if(Serial.find(">")){
//send through command to update values
Serial.print(cmd);
}else{
Serial.println(“AT+CIPCLOSE”);
}
if(Serial.find(“OK”)){
//success! Your most recent values should be online.
return true;
}else{
return false;
}
}
boolean connectWiFi(){
//set ESP8266 mode with AT commands
Serial.println(“AT+CWMODE=1”);
delay(2000);
//build connection command
String cmd=“AT+CWJAP=”";
cmd+=SSID;
cmd+="","";
cmd+=PASS;
cmd+=""";
//connect to WiFi network and wait 5 seconds
Serial.println(cmd);
delay(5000);
//if connected return true, else false
if(Serial.find(“OK”)){
return true;
}else{
return false;
}
}
void LightGreen(){
// digitalWrite(red, LOW);
// digitalWrite(green, HIGH);
// delay(500);
for (int j=1; j<=10; j=j+1) { // Start our for loop
digitalWrite(green, HIGH); //Turn green LED on
delay(250);
digitalWrite(green, LOW); //Turn green LED off
delay(250);
}
Serial.print("…ThingSpeak update channel 1 was successful… \n");
digitalWrite (blue, LOW);
digitalWrite (red, LOW);
digitalWrite (green, LOW);
}
void LightRed(){
// digitalWrite(green, LOW);
// digitalWrite(red, HIGH);
for (int k=1; k<=10; k=k+1) { // Start our for loop
digitalWrite(red, HIGH); //Turn green LED on
delay(250);
digitalWrite(red, LOW); //Turn green LED off
delay(250);
}
Serial.print(".!.ThingSpeak update channel 1 was unsuccessful.!. \n");
digitalWrite (blue, LOW);
digitalWrite (red, LOW);
digitalWrite (green, LOW);
}
//if an error has occurred alternate green and red leds
//is dit nodig?
void Error(){
while(true){
LightRed();
delay(2000);
LightGreen();
delay(2000);
//end ThinkSpeak channel 1 update
// } ??
// update ThingSpeak channel 2 with new values
Serial.print("\n");
digitalWrite (blue, LOW); //switch all LED’s off to start with
digitalWrite (red, LOW);
digitalWrite (green, LOW);
updated2 = updateThingSpeak2(String(value_t1), String(value_h1), String(value_hic1), String(value_t2), String(value_h2), String(value_hic2), String(power_reset));
//if update succeeded light up green LED, else light up red LED
if(updated2){
LightGreen();
}else{
LightRed();
}
//wait for delay time before attempting to post again
delay(DELAY_TIME);
}
bool updateThingSpeak2(String Uvalue_t1, String Uvalue_h1, String Uvalue_hic1, String Uvalue_t2, String Uvalue_h2, String Uvalue_hic2, String Upower_reset) {
//initialize your AT command string
String cmd = “AT+CIPSTART=“TCP”,”";
//add IP address and port
cmd += IP;
cmd += “”,80";
//connect
Serial.println(cmd);
delay(2000);
if(Serial.find(“Error”)){
return false;
}
//build GET command, ThingSpeak takes Post or Get commands for updates, I use a Get
cmd = GET_b;
cmd += Uvalue_t1;
cmd += FIELD2_b;
cmd += Uvalue_h1;
cmd += FIELD3_b;
cmd += Uvalue_hic1;
cmd += FIELD4_b;
cmd += Uvalue_t2;
cmd += FIELD5_b;
cmd += Uvalue_h2;
cmd += FIELD6_b;
cmd += Uvalue_hic2;
cmd += FIELD7_b;
cmd += Upower_reset;
//continue to add data here if you have more fields such as a light sensor
//cmd += FIELD3;
//cmd += <field 3 value>
cmd += “\r\n”;
//Use AT commands to send data
Serial.print(“AT+CIPSEND=”);
Serial.println(cmd.length());
if(Serial.find(">")){
//send through command to update values
Serial.print(cmd);
}else{
Serial.println(“AT+CIPCLOSE”);
}
if(Serial.find(“OK”)){
//success! Your most recent values should be online.
return true;
}else{
return false;
}
}
boolean connectWiFi2(){
//set ESP8266 mode with AT commands
Serial.println(“AT+CWMODE=1”);
delay(2000);
//build connection command
String cmd=“AT+CWJAP=”";
cmd+=SSID;
cmd+="","";
cmd+=PASS;
cmd+=""";
//connect to WiFi network and wait 5 seconds
Serial.println(cmd);
delay(5000);
//if connected return true, else false
if(Serial.find(“OK”)){
return true;
}else{
return false;
}
}
void LightGreen2(){
// digitalWrite(red, LOW);
// digitalWrite(green, HIGH);
// delay(500);
for (int j=1; j<=10; j=j+1) { // Start our for loop
digitalWrite(green, HIGH); //Turn green LED on
delay(250);
digitalWrite(green, LOW); //Turn green LED off
delay(250);
}
Serial.print("…ThingSpeak update channel 2 was successful… \n");
digitalWrite (blue, LOW);
digitalWrite (red, LOW);
digitalWrite (green, LOW);
}
void LightRed2(){
// digitalWrite(green, LOW);
// digitalWrite(red, HIGH);
for (int k=1; k<=10; k=k+1) { // Start our for loop
digitalWrite(red, HIGH); //Turn green LED on
delay(250);
digitalWrite(red, LOW); //Turn green LED off
delay(250);
}
Serial.print(".!.ThingSpeak update was unsuccessful.!. \n");
digitalWrite (blue, LOW);
digitalWrite (red, LOW);
digitalWrite (green, LOW);
}
//if an error has occurred alternate green and red leds
//is dit nodig?
void Error2(){
while(true){
LightRed();
delay(2000);
LightGreen();
delay(2000);
//end ThinkSpeak channel 2