API Aquila sensor


#1

Hola buen día… estoy trabajando con un sensor de flujo, usando postman, pero no puedo ver los valores que esta enviando mi sensor… Me aparece timeout, pero ya probé con el ejemplo que ustedes tienen de temperaturaservice y ese si lo puedo ver en postman.

using namespace ArduinoJson::Generator;

#define ADDR 7

int Calc;

bool waterService(uint16_t reqAddr, uint8_t method, char *data, uint8_t dataSize)
{

if (method == GET)
{
Serial.println(“waterFlow service requested”);
Calc = (waterFlow.Speed());
JsonObject<1> json;
json[“flujo”] = Calc;

char buffer[16];
json.printTo(buffer, sizeof(buffer));
Services.response(reqAddr, R200, buffer, strlen(buffer));

}
else
{
Serial.println(“Unsupported method requested for this service”);
Services.response(reqAddr, R405);
}
}
void yield()
{
Mesh.loop();
Aquila.loop();
}
void setup()
{

Serial.begin(9600);
Mesh.begin(ADDR);
Services.begin();

Services.add(“water”, waterService);

Serial.println(“water Service starting…”);
Mesh.announce(HUB);
}

void loop ()
{
Serial.println(waterFlow.Speed());

Mesh.loop();
Services.loop();

}


#2

Hola @Rodrigo_Pino_Perez, Intenta poniendo Services.loop() dentro de la función yield() y en el loop, llama a yield() en vez de Mesh.loop() y Services.loop()


#3

No quedo, Sigue apareciendo lo mismo, los valores en serial monitor si los puedo ver. afectara las interrupciones que tengo en mi libreria?

WaterFlow::WaterFlow(int D1)
{
EIMSK |= (1 << INT0); /* Enable INT0 /
EICRA |= (1 << ISC00) | (1 << ISC01); /
Rising edge */
_D1 = D1;
}

int WaterFlow::Speed()
{
speed = 0;
sei(); // enable global interrupts
delay (_D1);
cli(); // disable global interrupts avr
return (speed * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour
}

#if defined (AVR)

ISR(INT0_vect) {
speed++;
}


#4

@Rodrigo_Pino_Perez ah creo que ya se, el problema debe ser el retardo que haces en WaterFlow.Speed() cuando lo lees dentro de la función del servicio, ya que esto tarda tanto que causa un timeout.

La solución seria no ejecutando esa función dentro de la función del servicio, sino que actualizando el valor de la variable Calc en el loop y en el servicio únicamente envia el último valor que tenga esa variable global