Libelium is offering new technical support channels, to contact with de Technical Support team to solve any issue our doubt please contact with your sales agent or visit our contact site



Post a new topicPost a reply Page 2 of 3   [ 21 posts ]
Go to page Previous  1, 2, 3  Next
Author Message
 Post subject: Re: Configuración Módulo RN-171(Wifi) sobre Opengarden
PostPosted: Tue Mar 07, 2017 8:49 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Maria43,

el código "getActuators", tal cual se encuentra, solo funciona cuando en determinados servidores, dependiendo de la respuesta de este.

Para adaptar el código a tu servidor tienes que conocer cual es la respuesta de tu servidor para poder parsear los datos.

Tienes dos opciones, enviar todos los comandos en modo gateway para ir viendo las respuestas del servidor, lo cual recomendamos, o por otro lado, descomentar las siguientes lineas en la funcion "checkData()"

Code:
void checkData(){
  cont=0;   
  delay(3000);
  while (Serial.available()>0)
  {
    recv[cont]=Serial.read();
    delay(10);
    cont++;
  }
  recv[cont]='\0';

  irrigation1_wf= recv[0];
  irrigation2_wf= recv[1];
  irrigation3_wf= recv[2];

  Serial.print("Received:");
  Serial.print(recv);

  autoflush();
  delay(100);
}


Copianos cual es la respuesta del servidor tras la peticion GET (GET /get_actuators.php?actuators).

Un saludo


Top
 Profile  
 
 Post subject: Re: Configuración Módulo RN-171(Wifi) sobre Opengarden
PostPosted: Tue Mar 07, 2017 11:11 am 

Joined: Tue Feb 07, 2017 1:37 pm
Posts: 37
Hola, cuando descomento las dos líneas del código ahora sale:

$$set dns name 192.168.1.5
set ip adress 0
set i r 80
set com remote 0
open
GET /get_actuators.php?actuators
Received:ACT::000*CLOS*
Irrigation 1 BAD DATA
Irrigation 2 BAD DATA
Irrigation 3 BAD DATA

Gracias.


Top
 Profile  
 
 Post subject: Re: Configuración Módulo RN-171(Wifi) sobre Opengarden
PostPosted: Wed Mar 08, 2017 8:36 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Maria43,

al ser esta la respuesta en tu buffer recv="ACT::000*CLOS*" siendo el "000" el estado binario de los actuadores, debes hacer una actualización en el código.

Actualmente recv[0]='A', recv[1]='C', y así sucesivamente siendo los datos que te interesan estos:

Code:
  irrigation1_wf= recv[5];
  irrigation2_wf= recv[6];
  irrigation3_wf= recv[7];


Prueba haciendo esta pequeña modificación en la funcion "checkData".

Un saludo.


Top
 Profile  
 
 Post subject: Re: Configuración Módulo RN-171(Wifi) sobre Opengarden
PostPosted: Wed Mar 08, 2017 8:13 pm 

Joined: Tue Feb 07, 2017 1:37 pm
Posts: 37
Si, con esto ahora funciona perfectamente. Muchas gracias.

Estoy intentando hacer programa que mande los datos a la BBDD y lea los datos de los sensores, para poder controlarlos desde la app de opengarden en función de los valores de los sensores..
Para ello utilizo setSensors y getActuators, ambos funcionan por separado, pero he probado varias opciones combinado las dos en un sólo programa y ninguna me funciona.
Os incluyo uno de los códigos que he realizado para que me indiqueís dónde está el fallo, o si existe alguna otra forma de hacer que los dos funcionen de manera conjunta:

#include <OpenGarden.h>
#include "Wire"

//Enter here your data
const char server[] = "192.168.1.5";
const char server_port[] = "80";
const char wifi_ssid[] = "ONOE1E6";
const char wifi_password[] = "4414131084";

String wifiString;
char buffer[20];
int flag = 0; // auxiliar variable
DateTime myTime;

//Para getActuators
char recv[512];
int cont;

char irrigation1_wf;
char irrigation2_wf;
char irrigation3_wf;


void setup() {
Serial.begin(9600);
OpenGarden.initSensors(); //Initialize sensors power
OpenGarden.sensorPowerON(); //Turns on the sensor power supply
delay(100);
OpenGarden.initRF();
OpenGarden.initRTC();

//Para getActuators
OpenGarden.initIrrigation(1); //Initialize irrigation number 1
OpenGarden.initIrrigation(2); //Initialize irrigation number 2
OpenGarden.initIrrigation(3); //Initialize irrigation number 3
OpenGarden.irrigationOFF(1);
OpenGarden.irrigationOFF(2);
OpenGarden.irrigationOFF(3);
cleanVector();

wificonfig();
}


void loop() {

// getActuators
getActuators();

Serial.println();
if (irrigation1_wf == '0'){
OpenGarden.irrigationOFF(1); //Turn OFF the irrigation number 1
Serial.println("Irrigation 1 OFF");
}
else if (irrigation1_wf == '1'){
OpenGarden.irrigationON(1); //Turn ON the irrigation number 1
Serial.println("Irrigation 1 ON");
}
else{
Serial.println("Irrigation 1 BAD DATA");
}


if (irrigation2_wf == '0'){
OpenGarden.irrigationOFF(2); //Turn OFF the irrigation number 2
Serial.println("Irrigation 2 OFF");
}
else if (irrigation2_wf == '1'){
OpenGarden.irrigationON(2); //Turn ON the irrigation number 2
Serial.println("Irrigation 2 ON");
}
else{
Serial.println("Irrigation 2 BAD DATA");
}


if (irrigation3_wf == '0'){
OpenGarden.irrigationOFF(3); //Turn OFF the irrigation number 3
Serial.println("Irrigation 3 OFF");
}
else if (irrigation3_wf == '1'){
OpenGarden.irrigationON(3); //Turn ON the irrigation number 3
Serial.println("Irrigation 3 ON");
}
else{
Serial.println("Irrigation 3 BAD DATA");
}

cleanVector();
//enterCMD();
//delay(5000);

// setSensors
OpenGarden.receiveFromNode(); //Receive data from node
myTime = OpenGarden.getTime();
OpenGarden.printTime(myTime);

if ( myTime.second() == 0 && flag == 0 ){ //Only enter 1 time each minute

//Get Gateway Sensors
int soilMoisture0 = OpenGarden.readSoilMoisture();
float airTemperature0 = OpenGarden.readAirTemperature();
float airHumidity0 = OpenGarden.readAirHumidity();
float soilTemperature0 = OpenGarden.readSoilTemperature();
int luminosity0 = OpenGarden.readLuminosity();

//Get Node Sensors
Payload node1Packet = OpenGarden.getNodeData(node1);
Payload node2Packet = OpenGarden.getNodeData(node2);
Payload node3Packet = OpenGarden.getNodeData(node3);


int soilMoisture1 = node1Packet.moisture;
float airTemperature1 = node1Packet.temperature;
float airHumidity1 = node1Packet.humidity;
int luminosity1 = node1Packet.light;
int battery1 = node1Packet.supplyV;

int soilMoisture2 = node2Packet.moisture;
float airTemperature2 = node2Packet.temperature;
float airHumidity2 = node2Packet.humidity;
int luminosity2 = node2Packet.light;
int battery2 = node2Packet.supplyV;

int soilMoisture3 = node3Packet.moisture;
float airTemperature3 = node3Packet.temperature;
float airHumidity3 = node3Packet.humidity;
int luminosity3 = node3Packet.light;
int battery3 = node3Packet.supplyV;


//Create string of the floats to send it
dtostrf(airTemperature0,2,1,buffer);
String airTemperature0_wf = String (buffer);
dtostrf(airHumidity0,2,1,buffer);
String airHumidity0_wf = String (buffer);
dtostrf(soilTemperature0,2,1,buffer);
String soilTemperature0_wf = String (buffer);

dtostrf(airTemperature1,2,1,buffer);
String airTemperature1_wf = String (buffer);
dtostrf(airHumidity1,2,1,buffer);
String airHumidity1_wf = String (buffer);

dtostrf(airTemperature2,2,1,buffer);
String airTemperature2_wf = String (buffer);
dtostrf(airHumidity2,2,1,buffer);
String airHumidity2_wf = String (buffer);

dtostrf(airTemperature3,2,1,buffer);
String airTemperature3_wf = String (buffer);
dtostrf(airHumidity3,2,1,buffer);
String airHumidity3_wf = String (buffer);

//Cut data in several string because the wifi module have problems with longer strings
wifiString= "0:0:" + String(soilMoisture0) + ";0:1:" + soilTemperature0_wf + ";0:2:" + airHumidity0_wf;
sendwifi();
enterCMD();


wifiString= "0:3:" + airTemperature0_wf + ";0:4:" + String(luminosity0);
sendwifi();
enterCMD();


wifiString = "1:0:" + String(soilMoisture1) + ";1:2:" + airHumidity1_wf + ";1:3:" + airTemperature1_wf + ";1:4:" + String(luminosity1);
sendwifi();
enterCMD();


wifiString = "2:0:" + String(soilMoisture2) + ";2:2:" + airHumidity2_wf + ";2:3:" + airTemperature2_wf + ";2:4:" + String(luminosity2);
sendwifi();
enterCMD();


wifiString = "3:0:" + String(soilMoisture3) + ";3:2:" + airHumidity3_wf + ";3:3:" + airTemperature3_wf + ";3:4:" + String(luminosity3);
sendwifi();
enterCMD();


wifiString = "1:5:" + String(battery1) + ";2:5:" + String(battery2) + ";3:5:" + String(battery3);
sendwifi();
enterCMD();


flag = 1;

}

else if (myTime.second() == 30 && flag == 1){
flag = 0;
}
enterCMD();
}


//*********************************************************************
//*********************************************************************

//Funciones comunes

void check() {
delay(1500);
autoflush();
}


void wificonfig() {
while (Serial.available() > 0) {
}

enterCMD();
// Sets DHCP and TCP protocol
Serial.print(F("set ip dhcp 1\r"));
check();
Serial.print(F("set ip protocol 18\r"));
check();

// Configures the way to join the network AP, sets the encryption of the
// network and joins it
Serial.print(F("set wlan join 0\r")); //The auto-join feature is disabled
check();
Serial.print(F("set wlan phrase "));
Serial.print(wifi_password);
Serial.print(F("\r"));
check();
Serial.print(F("join "));
Serial.print(wifi_ssid);
Serial.print(F("\r"));
check();
}


void enterCMD() {
Serial.println("");
// Enters in command mode
Serial.print(F("$$$"));
delay(100);
check();
Serial.flush();
}


void autoflush()
{
while (Serial.available() > 0)
{
Serial.read();
}
}



//Funciones para setSensors

void sendwifi() {
Serial.print(F("set i h 0\r"));
check();
Serial.print(F("set d n "));
Serial.print(server);
Serial.print(F("\r"));

check(); //Insert here your IP

//Configures HTTP connection
Serial.print(F("set i r "));
Serial.print(server_port);
Serial.print(F("\r"));
check();

Serial.print(F("set o f 1\r"));
check();

Serial.print(F("set c r GET$/set_sensors.php?data="));
Serial.print(wifiString);
Serial.print(F("\r"));
check();

// Calls open to launch the configured connection.
Serial.print(F("open\r"));
check();
Serial.print(F("open\r"));
}


//Funciones para getActuators

void cleanVector(){
recv[5] = 0;
recv[6] = 0;
recv[7] = 0;
}

void getActuators(){

//Configures HTTP connection
Serial.print(F("set dns name "));
Serial.print(server);
Serial.print(F("\r"));
check();

Serial.print("set ip adress 0\r");
check();

Serial.print(F("set i r "));
Serial.print(server_port);
Serial.print(F("\r"));

check();
Serial.print("set com remote 0\r");
check();
Serial.print("open\r");
check();
Serial.flush();
Serial.print("GET /get_actuators.php?actuators\r");
checkData();


}


void checkData(){
cont=0;
delay(3000);
while (Serial.available()>0)
{
recv[cont]=Serial.read();
delay(10);
cont++;
}
recv[cont]='\0';

irrigation1_wf= recv[5];
irrigation2_wf= recv[6];
irrigation3_wf= recv[7];

Serial.print("Received:");
Serial.print(recv);

autoflush();
delay(100);
}



La respuesta es, poniendo void enterCMD() en varias líneas (las distintas variaciones están comentadas):
$$$set ip dhcp 1
set ip protocol 18
set wlan join 0
set wlan phrase 4414131084
join ONOE1E6
set dns name 192.168.1.5


Y si meto el código getActuators dentro del bucle if me sale:
$$$set ip dhcp 1
set ip protocol 18
set wlan join 0
set wlan phrase 4414131084
join ONOE1E6
3/8/
Y se queda así.

Gracias por anticipado.


Top
 Profile  
 
 Post subject: Re: Configuración Módulo RN-171(Wifi) sobre Opengarden
PostPosted: Thu Mar 09, 2017 8:56 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Maria43,

es importante que antes de llegar a la funcion "getActuators();" o "sendwifi();" (las cuales envian comandos al modulo WiFly) se haya enviado previamente el "$$$" que hace que el modulo entre en modo comando. Esto habitualmente en el loop se hace con la funcion "enterCMD()", por lo que es importante que siempre se llame a esta función antes de llamar a las dos anteriores.

La primera vez que se hace el setup() se pasa por la función "wificonfig();", la cual deja el modo ya dentro del modo comando, por eso en los códigos ejemplos en el loop al principio te encuentras una de las dos funciones de envio ("getActuators();" o "sendwifi();") sin haber pasado por un enterCMD, sin embargo siempre es lo ultimo que se hace en cada bucle loop si te fijas.

Un saludo.


Top
 Profile  
 
 Post subject: Re: Configuración Módulo RN-171(Wifi) sobre Opengarden
PostPosted: Thu Mar 09, 2017 2:35 pm 

Joined: Tue Feb 07, 2017 1:37 pm
Posts: 37
Hola, ya tenía incluida la función enterCMD() al final del loop() para el código para getActuators. Ahora lo he incluido además antes del código para setSensors, en el lugar que antes ocupaba la función "wificonfig();". Pero me sigue saliendo lo mismo:

$$$set ip dhcp 1
set ip protocol 18
set wlan join 0
set wlan phrase 4414131084
join ONOE1E6
set dns name 192.168.1.5


Y ahí se queda de manera indefinida. Lo que me extraña es que ni siquiera da el resultado de los actuadores ni la primera vez, y no he cambiado el código sólo he combinado los que me funcionaban.
No obstante, he realizado varias pruebas sobre el programa comentado el código de cada uno por separado y setSensors sólo funciona si se comenta la función cleanVector(); en el setup. Si la comento sólo en el setup () me sigue saliendo lo anterior, y si lo hago en todo el programa me sale:

$$$set ip dhcp 1
set ip protocol 18
set wlan join 0
set wlan phrase 4414131084
join ONOE1E6
set dns name 192.168.1.5
set ip adre



Os adjunto el código de nuevo con los cambios:

#include <OpenGarden.h>
#include "Wire.h"

//Enter here your data
const char server[] = "192.168.1.5";
const char server_port[] = "80";
const char wifi_ssid[] = "ONOE1E6";
const char wifi_password[] = "4414131084";

String wifiString;
char buffer[20];
int flag = 0; // auxiliar variable
DateTime myTime;

//Para getActuators
char recv[512];
int cont;

char irrigation1_wf;
char irrigation2_wf;
char irrigation3_wf;


void setup() {
Serial.begin(9600);
OpenGarden.initSensors(); //Initialize sensors power
OpenGarden.sensorPowerON(); //Turns on the sensor power supply
delay(100);
OpenGarden.initRF();
OpenGarden.initRTC();

//Para getActuators
OpenGarden.initIrrigation(1); //Initialize irrigation number 1
OpenGarden.initIrrigation(2); //Initialize irrigation number 2
OpenGarden.initIrrigation(3); //Initialize irrigation number 3
OpenGarden.irrigationOFF(1);
OpenGarden.irrigationOFF(2);
OpenGarden.irrigationOFF(3);
//cleanVector();

wificonfig();
}


void loop() {

// getActuators
getActuators();

Serial.println();
if (irrigation1_wf == '0'){
OpenGarden.irrigationOFF(1); //Turn OFF the irrigation number 1
Serial.println("Irrigation 1 OFF");
}
else if (irrigation1_wf == '1'){
OpenGarden.irrigationON(1); //Turn ON the irrigation number 1
Serial.println("Irrigation 1 ON");
}
else{
Serial.println("Irrigation 1 BAD DATA");
}


if (irrigation2_wf == '0'){
OpenGarden.irrigationOFF(2); //Turn OFF the irrigation number 2
Serial.println("Irrigation 2 OFF");
}
else if (irrigation2_wf == '1'){
OpenGarden.irrigationON(2); //Turn ON the irrigation number 2
Serial.println("Irrigation 2 ON");
}
else{
Serial.println("Irrigation 2 BAD DATA");
}


if (irrigation3_wf == '0'){
OpenGarden.irrigationOFF(3); //Turn OFF the irrigation number 3
Serial.println("Irrigation 3 OFF");
}
else if (irrigation3_wf == '1'){
OpenGarden.irrigationON(3); //Turn ON the irrigation number 3
Serial.println("Irrigation 3 ON");
}
else{
Serial.println("Irrigation 3 BAD DATA");
}


enterCMD(); //Ahora también la inserto aquí dónde estaba wificonfig();

// setSensors
OpenGarden.receiveFromNode(); //Receive data from node
myTime = OpenGarden.getTime();
OpenGarden.printTime(myTime);

if ( myTime.second() == 0 && flag == 0 ){ //Only enter 1 time each minute

//Get Gateway Sensors
int soilMoisture0 = OpenGarden.readSoilMoisture();
float airTemperature0 = OpenGarden.readAirTemperature();
float airHumidity0 = OpenGarden.readAirHumidity();
float soilTemperature0 = OpenGarden.readSoilTemperature();
int luminosity0 = OpenGarden.readLuminosity();

//Get Node Sensors
Payload node1Packet = OpenGarden.getNodeData(node1);
Payload node2Packet = OpenGarden.getNodeData(node2);
Payload node3Packet = OpenGarden.getNodeData(node3);


int soilMoisture1 = node1Packet.moisture;
float airTemperature1 = node1Packet.temperature;
float airHumidity1 = node1Packet.humidity;
int luminosity1 = node1Packet.light;
int battery1 = node1Packet.supplyV;

int soilMoisture2 = node2Packet.moisture;
float airTemperature2 = node2Packet.temperature;
float airHumidity2 = node2Packet.humidity;
int luminosity2 = node2Packet.light;
int battery2 = node2Packet.supplyV;

int soilMoisture3 = node3Packet.moisture;
float airTemperature3 = node3Packet.temperature;
float airHumidity3 = node3Packet.humidity;
int luminosity3 = node3Packet.light;
int battery3 = node3Packet.supplyV;


//Create string of the floats to send it
dtostrf(airTemperature0,2,1,buffer);
String airTemperature0_wf = String (buffer);
dtostrf(airHumidity0,2,1,buffer);
String airHumidity0_wf = String (buffer);
dtostrf(soilTemperature0,2,1,buffer);
String soilTemperature0_wf = String (buffer);

dtostrf(airTemperature1,2,1,buffer);
String airTemperature1_wf = String (buffer);
dtostrf(airHumidity1,2,1,buffer);
String airHumidity1_wf = String (buffer);

dtostrf(airTemperature2,2,1,buffer);
String airTemperature2_wf = String (buffer);
dtostrf(airHumidity2,2,1,buffer);
String airHumidity2_wf = String (buffer);

dtostrf(airTemperature3,2,1,buffer);
String airTemperature3_wf = String (buffer);
dtostrf(airHumidity3,2,1,buffer);
String airHumidity3_wf = String (buffer);

//Cut data in several string because the wifi module have problems with longer strings
wifiString= "0:0:" + String(soilMoisture0) + ";0:1:" + soilTemperature0_wf + ";0:2:" + airHumidity0_wf;
sendwifi();
enterCMD();


wifiString= "0:3:" + airTemperature0_wf + ";0:4:" + String(luminosity0);
sendwifi();
enterCMD();


wifiString = "1:0:" + String(soilMoisture1) + ";1:2:" + airHumidity1_wf + ";1:3:" + airTemperature1_wf + ";1:4:" + String(luminosity1);
sendwifi();
enterCMD();


wifiString = "2:0:" + String(soilMoisture2) + ";2:2:" + airHumidity2_wf + ";2:3:" + airTemperature2_wf + ";2:4:" + String(luminosity2);
sendwifi();
enterCMD();


wifiString = "3:0:" + String(soilMoisture3) + ";3:2:" + airHumidity3_wf + ";3:3:" + airTemperature3_wf + ";3:4:" + String(luminosity3);
sendwifi();
enterCMD();


wifiString = "1:5:" + String(battery1) + ";2:5:" + String(battery2) + ";3:5:" + String(battery3);
sendwifi();
enterCMD();


flag = 1;

}

else if (myTime.second() == 30 && flag == 1){
flag = 0;
}

//cleanVector();
enterCMD(); // También aquí para getActuators
//delay(5000);
}


//*********************************************************************
//*********************************************************************

//Funciones comunes

void check() {
delay(1500);
autoflush();
}


void wificonfig() {
while (Serial.available() > 0) {
}

enterCMD();
// Sets DHCP and TCP protocol
Serial.print(F("set ip dhcp 1\r"));
check();
Serial.print(F("set ip protocol 18\r"));
check();

// Configures the way to join the network AP, sets the encryption of the
// network and joins it
Serial.print(F("set wlan join 0\r")); //The auto-join feature is disabled
check();
Serial.print(F("set wlan phrase "));
Serial.print(wifi_password);
Serial.print(F("\r"));
check();
Serial.print(F("join "));
Serial.print(wifi_ssid);
Serial.print(F("\r"));
check();
}


void enterCMD() {
Serial.println("");
// Enters in command mode
Serial.print(F("$$$"));
delay(100);
check();
Serial.flush();
}


void autoflush()
{
while (Serial.available() > 0)
{
Serial.read();
}
}



//Funciones para setSensors

void sendwifi() {
Serial.print(F("set i h 0\r"));
check();
Serial.print(F("set d n "));
Serial.print(server);
Serial.print(F("\r"));

check(); //Insert here your IP

//Configures HTTP connection
Serial.print(F("set i r "));
Serial.print(server_port);
Serial.print(F("\r"));
check();

Serial.print(F("set o f 1\r"));
check();

Serial.print(F("set c r GET$/set_sensors.php?data="));
Serial.print(wifiString);
Serial.print(F("\r"));
check();

// Calls open to launch the configured connection.
Serial.print(F("open\r"));
check();
Serial.print(F("open\r"));
}


//Funciones para getActuators

void cleanVector(){
recv[5] = 0;
recv[6] = 0;
recv[7] = 0;
}

void getActuators(){

//Configures HTTP connection
Serial.print(F("set dns name "));
Serial.print(server);
Serial.print(F("\r"));
check();

Serial.print("set ip adress 0\r");
check();

Serial.print(F("set i r "));
Serial.print(server_port);
Serial.print(F("\r"));

check();
Serial.print("set com remote 0\r");
check();
Serial.print("open\r");
check();
Serial.flush();
Serial.print("GET /get_actuators.php?actuators\r");
checkData();
}


void checkData(){
cont=0;
delay(3000);
while (Serial.available()>0)
{
recv[cont]=Serial.read();
delay(10);
cont++;
}
recv[cont]='\0';

irrigation1_wf= recv[5];
irrigation2_wf= recv[6];
irrigation3_wf= recv[7];

Serial.print("Received:");
Serial.print(recv);

autoflush();
delay(100);
}

También he probado a poner indicadores sobre las funciones que se van ejecutando, pero tampoco obtengo mucha información, sólo que se configura la wifi y que entra en getActuators.
A ver si podeís ayudarme. Muchas gracias.


Top
 Profile  
 
 Post subject: Re: Configuración Módulo RN-171(Wifi) sobre Opengarden
PostPosted: Fri Mar 10, 2017 8:30 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Maria43,

con el comportamiento que observas parece un problema de falta de memoria RAM. En los últimos IDE de Arduino, por ejemplo 1.6.11, se incluyeron unas lineas de log que informan del espacio ocupado en la memoria dinámica que pueden ayudarte.

Por otro lado, para reducir la cantidad de memoria RAM te recomendamos que sustituyas las lineas de Serial.print con un texto fijo del siguiente modo, cambialas para que en vez de asi:

Serial.print("GET /get_actuators.php?actuators\r");
Serial.print("set ip adress 0\r");

sean asi:

Serial.print(F(GET /get_actuators.php?actuators\r"));
Serial.print(F("set ip adress 0\r"));

Un saludo.


Top
 Profile  
 
 Post subject: Re: Configuración Módulo RN-171(Wifi) sobre Opengarden
PostPosted: Fri Mar 10, 2017 2:45 pm 

Joined: Tue Feb 07, 2017 1:37 pm
Posts: 37
Efectivamente había un problema de RAM. He hecho el cambio pero con eso no es suficiente, he tenido que hacerlo en todas las funciones del programa que imprimen en el monitor y suprimir lo "superfluo". Además he incluido el código dentro del if para que sólo haga el getActuators cuando se cumpla la condición temporal (he puesto cada minuto para probar), al igual que setSensors.
Pero ahora no envía los datos a la BBDD, y la app aparecen los nodos y sensores "offline". En el monitor sale:

$$$set ip dhcp 1
set ip protocol 18
set wlan join 0
set wlan phrase 4414131084
join ONOE1E6
3/10/2017 FRI 14:02:00set dns name 192.168.1.5
set ip adress 0
set i r 80
set com remote 0
open
GET /get_actuators.php?actuators
IRGT1 OFF
IRGT2 OFF
IRGT3 OFF

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

Y vuelve a repetirlo cada minuto según el bucle if:

$$$3/10/2017 FRI 14:04:00set dns name 192.168.1.5
set ip adress 0
set i r 80
set com remote 0
open
GET /get_actuators.php?actuators
IRGT1 ON
IRGT2 ON
IRGT 3 ON

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

$$$set i h 0
set d n 192.168.1.5
set i r 80
set o f 1
set c r GET$/set_sensors.php?data=
open
open

$$$.......


Adjunto de nuevo el código con los cambios:

#include <OpenGarden.h>
#include "Wire.h"

//Enter here your data
const char server[] = "192.168.1.5";
const char server_port[] = "80";
const char wifi_ssid[] = "ONOE1E6";
const char wifi_password[] = "4414131084";

String wifiString;
char buffer[20];
int flag = 0; // auxiliar variable
DateTime myTime;

//Para getActuators
char recv[512];
int cont;

char irrigation1_wf;
char irrigation2_wf;
char irrigation3_wf;


void setup() {
Serial.begin(9600);
OpenGarden.initSensors(); //Initialize sensors power
OpenGarden.sensorPowerON(); //Turns on the sensor power supply
delay(100);
OpenGarden.initRF();
OpenGarden.initRTC();

//Para getActuators
OpenGarden.initIrrigation(1); //Initialize irrigation number 1
OpenGarden.initIrrigation(2); //Initialize irrigation number 2
OpenGarden.initIrrigation(3); //Initialize irrigation number 3
OpenGarden.irrigationOFF(1);
OpenGarden.irrigationOFF(2);
OpenGarden.irrigationOFF(3);
//cleanVector(); // Sigo con esta función quitada

wificonfig();
}


void loop() {

// setSensors
OpenGarden.receiveFromNode(); //Receive data from node
myTime = OpenGarden.getTime();
//OpenGarden.printTime(myTime);

if ( myTime.second() == 0 && flag == 0 ){ //Only enter 1 time each minute

OpenGarden.printTime(myTime);

// getActuators
getActuators();

//Serial.println();
if (irrigation1_wf == '0'){
OpenGarden.irrigationOFF(1); //Turn OFF the irrigation number 1
Serial.println(F("IRGT1 OFF"));
}
else if (irrigation1_wf == '1'){
OpenGarden.irrigationON(1); //Turn ON the irrigation number 1
Serial.println(F("IRGT1 ON"));
}
else{
Serial.println(F("IRGT1 BADATA"));
}


if (irrigation2_wf == '0'){
OpenGarden.irrigationOFF(2); //Turn OFF the irrigation number 2
Serial.println(F("IRGT2 OFF"));
}
else if (irrigation2_wf == '1'){
OpenGarden.irrigationON(2); //Turn ON the irrigation number 2
Serial.println(F("IRGT2 ON"));
}
else{
Serial.println(F("IRGT2 BADATA"));
}


if (irrigation3_wf == '0'){
OpenGarden.irrigationOFF(3); //Turn OFF the irrigation number 3
Serial.println(F("IRGT3 OFF"));
}
else if (irrigation3_wf == '1'){
OpenGarden.irrigationON(3); //Turn ON the irrigation number 3
Serial.println(F("IRGT 3 ON"));
}
else{
Serial.println(F("IRGT 3 BADATA"));
}

enterCMD();


//Get Gateway Sensors
int soilMoisture0 = OpenGarden.readSoilMoisture();
float airTemperature0 = OpenGarden.readAirTemperature();
float airHumidity0 = OpenGarden.readAirHumidity();
float soilTemperature0 = OpenGarden.readSoilTemperature();
int luminosity0 = OpenGarden.readLuminosity();

//Get Node Sensors
Payload node1Packet = OpenGarden.getNodeData(node1);
Payload node2Packet = OpenGarden.getNodeData(node2);
Payload node3Packet = OpenGarden.getNodeData(node3);


int soilMoisture1 = node1Packet.moisture;
float airTemperature1 = node1Packet.temperature;
float airHumidity1 = node1Packet.humidity;
int luminosity1 = node1Packet.light;
int battery1 = node1Packet.supplyV;

int soilMoisture2 = node2Packet.moisture;
float airTemperature2 = node2Packet.temperature;
float airHumidity2 = node2Packet.humidity;
int luminosity2 = node2Packet.light;
int battery2 = node2Packet.supplyV;

int soilMoisture3 = node3Packet.moisture;
float airTemperature3 = node3Packet.temperature;
float airHumidity3 = node3Packet.humidity;
int luminosity3 = node3Packet.light;
int battery3 = node3Packet.supplyV;


//Create string of the floats to send it
dtostrf(airTemperature0,2,1,buffer);
String airTemperature0_wf = String (buffer);
dtostrf(airHumidity0,2,1,buffer);
String airHumidity0_wf = String (buffer);
dtostrf(soilTemperature0,2,1,buffer);
String soilTemperature0_wf = String (buffer);

dtostrf(airTemperature1,2,1,buffer);
String airTemperature1_wf = String (buffer);
dtostrf(airHumidity1,2,1,buffer);
String airHumidity1_wf = String (buffer);

dtostrf(airTemperature2,2,1,buffer);
String airTemperature2_wf = String (buffer);
dtostrf(airHumidity2,2,1,buffer);
String airHumidity2_wf = String (buffer);

dtostrf(airTemperature3,2,1,buffer);
String airTemperature3_wf = String (buffer);
dtostrf(airHumidity3,2,1,buffer);
String airHumidity3_wf = String (buffer);

//Cut data in several string because the wifi module have problems with longer strings
wifiString= "0:0:" + String(soilMoisture0) + ";0:1:" + soilTemperature0_wf + ";0:2:" + airHumidity0_wf;
sendwifi();
enterCMD();


wifiString= "0:3:" + airTemperature0_wf + ";0:4:" + String(luminosity0);
sendwifi();
enterCMD();


wifiString = "1:0:" + String(soilMoisture1) + ";1:2:" + airHumidity1_wf + ";1:3:" + airTemperature1_wf + ";1:4:" + String(luminosity1);
sendwifi();
enterCMD();


wifiString = "2:0:" + String(soilMoisture2) + ";2:2:" + airHumidity2_wf + ";2:3:" + airTemperature2_wf + ";2:4:" + String(luminosity2);
sendwifi();
enterCMD();


wifiString = "3:0:" + String(soilMoisture3) + ";3:2:" + airHumidity3_wf + ";3:3:" + airTemperature3_wf + ";3:4:" + String(luminosity3);
sendwifi();
enterCMD();


wifiString = "1:5:" + String(battery1) + ";2:5:" + String(battery2) + ";3:5:" + String(battery3);
sendwifi();
enterCMD();

flag = 1;

}

else if (myTime.second() == 30 && flag == 1){
flag = 0;
}

//cleanVector();
//enterCMD();
//delay(5000);
}


//*********************************************************************
//*********************************************************************

//Funciones comunes

void check() {
delay(1500);
autoflush();
}


void wificonfig() {
while (Serial.available() > 0) {
}

enterCMD();
// Sets DHCP and TCP protocol
Serial.print(F("set ip dhcp 1\r"));
check();
Serial.print(F("set ip protocol 18\r"));
check();

// Configures the way to join the network AP, sets the encryption of the
// network and joins it
Serial.print(F("set wlan join 0\r")); //The auto-join feature is disabled
check();
Serial.print(F("set wlan phrase "));
Serial.print(wifi_password);
Serial.print(F("\r"));
check();
Serial.print(F("join "));
Serial.print(wifi_ssid);
Serial.print(F("\r"));
check();
}


void enterCMD() {
Serial.println(F(""));
// Enters in command mode
Serial.print(F("$$$"));
delay(100);
check();
Serial.flush();
}


void autoflush()
{
while (Serial.available() > 0)
{
Serial.read();
}
}



//Funciones para setSensors

void sendwifi() {
Serial.print(F("set i h 0\r"));
check();
Serial.print(F("set d n "));
Serial.print(server);
Serial.print(F("\r"));

check(); //Insert here your IP

//Configures HTTP connection
Serial.print(F("set i r "));
Serial.print(server_port);
Serial.print(F("\r"));
check();

Serial.print(F("set o f 1\r"));
check();

Serial.print(F("set c r GET$/set_sensors.php?data="));
Serial.print(wifiString);
Serial.print(F("\r"));
check();

// Calls open to launch the configured connection.
Serial.print(F("open\r"));
check();
Serial.print(F("open\r"));
}


//Funciones para getActuators

void cleanVector(){
recv[5] = 0;
recv[6] = 0;
recv[7] = 0;
}

void getActuators(){

//Configures HTTP connection
Serial.print(F("set dns name "));
Serial.print(server);
Serial.print(F("\r"));
check();

Serial.print(F("set ip adress 0\r"));
check();

Serial.print(F("set i r "));
Serial.print(server_port);
Serial.print(F("\r"));

check();
Serial.print(F("set com remote 0\r"));
check();
Serial.print(F("open\r"));
check();
Serial.flush();
Serial.print(F("GET /get_actuators.php?actuators\r"));
checkData();
}


void checkData(){
cont=0;
delay(3000);
while (Serial.available()>0)
{
recv[cont]=Serial.read();
delay(10);
cont++;
}
recv[cont]='\0';

irrigation1_wf= recv[5];
irrigation2_wf= recv[6];
irrigation3_wf= recv[7];

//Serial.print("Received:");
//Serial.print(recv);

autoflush();
delay(100);
}

Ya me decís. Gracias por anticipado.


Top
 Profile  
 
 Post subject: Re: Configuración Módulo RN-171(Wifi) sobre Opengarden
PostPosted: Mon Mar 13, 2017 8:49 am 

Joined: Mon Sep 28, 2009 12:06 pm
Posts: 11366
Hola Maria43,

Code:
set c r GET$/set_sensors.php?data=

el hecho de que veas esta linea de este modo es señal de que por problemas de RAM, arduino Uno no puede componer el String de sensores.

Debido a que arduino uno es una plataforma limitada en RAM (2K) te aconsejamos que vayas componiendo el código poco a poco, primero con menos nodos, y también puedes probar con maneras mas óptimas de componer strings si quieres hacer códigos complejos.

El uso de tipo de dato String es cómodo pero menos optimo que usar un array de datos tipo "char", en los que puedes definir exactamente la memoria a usar del siguiente modo como ejemplo:

Code:
char wifiString[200];
char airTemperature0_wf[10];
char airHumidity0_wf[10];
char soilTemperature0_wf[10];


void setup() {
    Serial.begin(9600);

}

void loop() {
     //Get Gateway Sensors
     int soilMoisture0 = 80;
     float airTemperature0 = 27.66;
     float airHumidity0 = 6.43;
     float soilTemperature0 = 24.13;
     int luminosity0 = 75;
   
     dtostrf(airTemperature0,2,2,airTemperature0_wf);
     dtostrf(airHumidity0,2,2,airHumidity0_wf);
     dtostrf(soilTemperature0,2,2,soilTemperature0_wf);
 
     memset( wifiString, 0x00, sizeof(wifiString) );
     snprintf( wifiString, sizeof(wifiString), "0:0:%d;0:1:%s;0:2:%s;0:3:%s;0:4:%d", soilMoisture0 , soilTemperature0_wf, airHumidity0_wf, airTemperature0_wf, luminosity0 ); 
   
     Serial.print(F("set c r GET$/set_sensors.php?data="));
     Serial.print(wifiString);
     Serial.print(F("\r"));
     
     Serial.println("");
   
     delay(5000);
}




Un saludo


Top
 Profile  
 
 Post subject: Re: Configuración Módulo RN-171(Wifi) sobre Opengarden
PostPosted: Mon Mar 13, 2017 9:09 pm 

Joined: Tue Feb 07, 2017 1:37 pm
Posts: 37
Siii! Por fin, con esto he conseguido que el código funcione.
Muchas gracias por vuestra ayuda.


Por cierto, he cambiado el código para poder visualizar los datos de los sensores en el monitor serie, y que se haga cada minuto, en lugar de cada hora cómo estaba en el código original.
Mi pregunta es si esto afecta al tiempo en que se graban los datos en la BBDD, y si se van borrando los datos más antiguos.

Un saludo,


Top
 Profile  
 
Display posts from previous:  Sort by  
Post a new topicPost a reply Page 2 of 3   [ 21 posts ]
Go to page Previous  1, 2, 3  Next


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
cron


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Libelium theme based on 610nm Style by Daniel St. Jules of http://www.gamexe.net


© Libelium Comunicaciones Distribuidas S.L. | Terms of use.