-1

I'm currently working in a weather station with online recording on Thingspeak. When I send a set of parameters (T, Pressure, Humidity, light), I don't have any problem with sending data. But when I add to the code the rain parameter, the code doesn't send the data. The rain parameter is calculated based on an interrupt, so could this affect my data sending? It is any trick that I can use to solve it?

The code:

#include <Wire.h>
#include <SoftwareSerial.h>
#include <String.h>
SoftwareSerial Sim900Serial(9,11);//Configarión de los pines serial por software: RX, TX
Weather myHumidity;//Create an instance of the humidity sensor
const byte RAIN = 2;
volatile int pulse_counter_ISR;
float mm; 
volatile unsigned long raintime, rainlast, raininterval, rain;
float humidity = 0; // [%]
void setup() {
 Serial.begin(19200); 
 Sim900Serial.begin(19200);//Arduino se comunica con el SIM900 a una velocidad de 19200bps 
 Sim900Serial.println("AT+IPR=19200"); // Tell the SIM900 not to autobaud 
 Wire.begin(); 
 pinMode(RAIN, INPUT_PULLUP); // input from wind meters rain gauge sensor
 digitalWrite(RAIN, HIGH);
 myHumidity.begin();
 // attach external interrupt pins to IRQ functions
 attachInterrupt(0, interrupt_handler, FALLING);
 // turn on interrupts
 interrupts();
}
void loop() {
 calcWeather();
 comandosAT();
 delay(600000);
}
void calcWeather()
{
//Calc humidity
humidity = myHumidity.getRH();
//Calculate amount of rainfall for the last 10 minutes
mm = pulse_counter_ISR*0.2794;
pulse_counter_ISR = 0;
}
void comandosAT(){
Sim900Serial.println("AT+CIPSTATUS");//Consultar el estado actual de la conexión
delay(2000);
Sim900Serial.println("AT+CIPMUX=0");//comando configura el dispositivo para una conexión IP única o múltiple 0=única
delay(3000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CSTT=\"internet.simple\"");
delay(1000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIICR");//REALIZAR UNA CONEXIÓN INALÁMBRICA CON GPRS O CSD
delay(3000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIFSR");// Obtenemos nuestra IP local
delay(2000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSPRT=0");//Establece un indicador '>' al enviar datos
delay(3000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\"");//Indicamos el tipo de conexión, url o dirección IP y puerto al que realizamos la conexión
delay(6000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSEND");//ENVÍA DATOS A TRAVÉS DE una CONEXIÓN TCP O UDP
delay(4000);
mostrarDatosSeriales();
String datos="GET https://api.thingspeak.com/update?api_key=MYAPIKEY&field1=0" + String(humidity) + "&field2=0" + String(mm);
Sim900Serial.println(datos);//Envía datos al servidor remoto
delay(4000);
mostrarDatosSeriales();
Sim900Serial.println((char)26);
delay(5000);//Ahora esperaremos una respuesta pero esto va a depender de las condiones de la red y este valor quizá debamos modificarlo dependiendo de las condiciones de la red
Sim900Serial.println();
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSHUT");//Cierra la conexión(Desactiva el contexto GPRS PDP)
delay(5000);
mostrarDatosSeriales();
} 
void mostrarDatosSeriales()//Muestra los datos que va entregando el sim900
{
while(Sim900Serial.available()!=0)
Serial.write(Sim900Serial.read());
}
void interrupt_handler()
{
 pulse_counter_ISR = pulse_counter_ISR + 1;
}
Jot
3,2761 gold badge14 silver badges21 bronze badges
asked Aug 27, 2018 at 12:39
4
  • so could this affect my data sending? .... run a test to find out for sure Commented Aug 27, 2018 at 20:24
  • Did you forget to include a library from Sparkfun? Commented Aug 27, 2018 at 23:49
  • I run it and works, with and without interrupt(), but when I add more variables (4 or more) the AT-CIPSEND do not send the datas Commented Aug 28, 2018 at 1:00
  • Finally I split the comands in two functions (comandosAT_1 and comandosAT_2) with different variables. The first one do not works and the socond one works fine. Here are the code Commented Aug 28, 2018 at 1:14

1 Answer 1

0

Finally I split the comands in two functions (comandosAT_1 and comandosAT_2) with different variables. The first one do not works and the socond one works fine. Here are the code

void comandosAT_1(){
Sim900Serial.println("AT+CIPSTATUS");//Consultar el estado actual de la conexión
delay(2000);
Sim900Serial.println("AT+CIPMUX=0");//comando configura el dispositivo para una conexión IP única o múltiple 0=única
delay(3000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CSTT=\"internet.simple\"");//comando configura el APN, nombre de usuario y contraseña."gprs.movistar.com.ar","wap","wap"->Movistar Arg.
delay(1000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIICR");//REALIZAR UNA CONEXIÓN INALÁMBRICA CON GPRS O CSD
delay(3000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIFSR");// Obtenemos nuestra IP local
delay(2000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSPRT=0");//Establece un indicador '>' al enviar datos
delay(3000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\"");//Indicamos el tipo de conexión, url o dirección IP y puerto al que realizamos la conexión
delay(6000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSEND");//ENVÍA DATOS A TRAVÉS DE una CONEXIÓN TCP O UDP
delay(4000);
mostrarDatosSeriales();
String datos="GET https://api.thingspeak.com/update?api_key=XXXXXXXXXXXXX&field1=0" + String(tempC) + "&field2=0" + String(humidity) + "&field3=0" + String(pressure);
Sim900Serial.println(datos);//Envía datos al servidor remoto
delay(4000);
mostrarDatosSeriales();
Sim900Serial.println((char)26);
delay(5000);//Ahora esperaremos una respuesta pero esto va a depender de las condiones de la red y este valor quizá debamos modificarlo dependiendo de las condiciones de la red
Sim900Serial.println();
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSHUT");//Cierra la conexión(Desactiva el contexto GPRS PDP)
delay(5000);
mostrarDatosSeriales();
} 
void comandosAT_2(){
Sim900Serial.println("AT+CIPSTATUS");//Consultar el estado actual de la conexión
delay(2000);
Sim900Serial.println("AT+CIPMUX=0");//comando configura el dispositivo para una conexión IP única o múltiple 0=única
delay(3000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CSTT=\"internet.simple\"");//comando configura el APN, nombre de usuario y contraseña."gprs.movistar.com.ar","wap","wap"->Movistar Arg.
delay(1000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIICR");//REALIZAR UNA CONEXIÓN INALÁMBRICA CON GPRS O CSD
delay(3000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIFSR");// Obtenemos nuestra IP local
delay(2000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSPRT=0");//Establece un indicador '>' al enviar datos
delay(3000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\"");//Indicamos el tipo de conexión, url o dirección IP y puerto al que realizamos la conexión
delay(6000);
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSEND");//ENVÍA DATOS A TRAVÉS DE una CONEXIÓN TCP O UDP
delay(4000);
mostrarDatosSeriales();
String datos="GET https://api.thingspeak.com/update?api_key=XXXXXXXXXXXXX&field4=0" + String(light_lvl) + "&field5=0" + String(mm) + "&field6=0" + String(windspeed_KMH);
Sim900Serial.println(datos);//Envía datos al servidor remoto
delay(4000);
mostrarDatosSeriales();
Sim900Serial.println((char)26);
delay(5000);//Ahora esperaremos una respuesta pero esto va a depender de las condiones de la red y este valor quizá debamos modificarlo dependiendo de las condiciones de la red
Sim900Serial.println();
mostrarDatosSeriales();
Sim900Serial.println("AT+CIPSHUT");//Cierra la conexión(Desactiva el contexto GPRS PDP)
delay(5000);
mostrarDatosSeriales();
} 

And the first answer of the serial monitor is the following:

OK AT+CIPSTATUS

OK

STATE: IP INITIAL AT+AT+CSTT="internet.simple"

OK AT+CIICR

OK AT+CIFSR

10.254.14.23 AT+CIPSPRT=0

OK AT+CIPSTART="TCP","api.thingspeak.com","80"

OK

CONNECT OKAT+CIPSEND

SEND OK

AT+CIPSHUT

SHUT OK

And the socond one is (that works)

AT+CIPSTATUS

OK

STATE: IP INITIAL AT+CIPMUX=0

OK AT+CSTT="internet.simple"

OK AT+CIICR

OK AT+CIFSR

10.110.2.23 AT+CIPSPRT=0

OK AT+CIPSTART="TCP","api.thingspeak.com","80"

OK

CONNECT OKAT+CIPSEND GET https://api.thingspeak.com/update?api_key=XXXXXXXXXXXXXXXXX&

SEND OK 381 AT+CIPSHUT

SHUT OK

You can see that after the AT+CIPSEND command, the SIM answer "GET https://api.thingspeak.com/update?api_key=XXXXXXXXXXXXXXXXX&" , then "SEND OK" and finally the number of the entry (381).

Any idea or suggestion?

answered Aug 28, 2018 at 1:21

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.