Buenos días. Estoy trabajando con Arduino + ESP8266 + BME280 y Thinger. Dejando de lado algun problema que tengo con los saltos horarios, que ya trato en otro apartado, mi proyecto imprime los datos de Temperatura, Humedad y Presión en Thinger correctamente. Hasta aquí, casi todo bien.
La cosa es que le he añadido el índice de calor y punto de rocío al sketch. En este tengo las instrucciones para poder leer estos datos en serial. y los veo correctamente, pero no consigo que estos datos (índice de calor y punto de rocío) puedan ser traspasados al Data Buckets de Thinger.
El sketch con el el trabajo es este:
#define _DEBUG_ //Imprimeix, a serial, l'estat de la connexió WiFi
#define _DISABLE_TLS_ //Imprimeix, a serial, l'estat de la connexió WiFi
#include <ESP8266WiFi.h> //Librería de conexión WiFi del módulo ESP8266
#include <ThingerESP8266.h> //Librería de la plataforma thinger.io
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
// Assignar pins ESP8266 a pins arduino
#define D1 5
#define D2 4
#define D4 2
#define D3 0
// Assignar SPI als pins
#define BME_SCK D1 //SCL BME280
#define BME_MOSI D2 //SDA BME280
#define BME_CS D3 //SCB BME280
#define BME_MISO D4 //SD0 BME280
#define SEALEVELPRESSURE_HPA (1013.25) //Pressió aproximada. Es pot modificar
//Adafruit_BME280 bme(BME_CS); // hardware SPI
Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); //Programari SPI
unsigned long delayTime; /////////////////////////////////////////////
//Paràmetres del connexió thinger.io
#define username "loko"
#define deviceId "ESP8266V3"
#define deviceCredentials "jmnnfrr1955"
ThingerESP8266 thing (username, deviceId, deviceCredentials);
//Paràmetres de connexió WiFi
const char WiFi_ssid[] = "MIWIFI_2G_PtG4"; //Nom real de xarxa: WIFI_5G_PtG4
const char WiFi_password[] = "sh96xFX2"; //Clau de xarxa WiFi
//Gestió de decimals a la impressió de Thinger
float round_to_dp( float in_value, int decimal_place )
{
float multiplier = powf( 10.0f, decimal_place );
in_value = roundf( in_value * multiplier ) / multiplier;
return in_value;
}
void setup()
{
Serial.begin (115200); //Obre connexió amb serial
Serial.println (F ("BME280 test"));
bool status;
// Configuració per defecte
status = bme.begin();
if (!status)
{
Serial.println ("No es troba el sensor BME280. Verificar cablejat!");
while (1);
}
Serial.println ("-- Test predeterminat --");
delay (1000); //Velocitat a la que imprimeix a serial////////////////////
Serial.println();
thing.add_wifi (WiFi_ssid, WiFi_password); //Inicialització WiFi per comunicar-se amb l'API
thing["BME280"] >> [](pson& out) //Inicializació de la lectura de dades des de l'API
{
out ["Temperatura"] = round_to_dp(bme.readTemperature(), 2); //*4*
out ["Humitat"] = round_to_dp (bme.readHumidity(), 2); //*4*
out ["Pressió"] = round_to_dp (bme.readPressure() / 100, 2); //*4* i *5*
out ["Índex xafogor"];
float hIndex = 0.63 * (bme.readTemperature() + 61.0 + ((bme.readTemperature() - 68.0) * 1.2) + (bme.readHumidity() * 0.094));
};
}
void loop()
{
thing.handle();
printValues(); //Descomentar per veure valors a serial
}
/*
* Només per depuració. Un cop comprovat el funcionament al serial, cal desactivar
* aquestes instruccions per llegir al serial, altrament interfereix en la recollida
* de dades a Thinger, provocant que les lectures les faci a hores diferents
* a les predeterminades.
*/
void printValues() //Impressió valors a serial
{
//Temperatura
Serial.print ("Temperatura: ");
// Serial.print (bme.readTemperature() / 1.10); //*1*(bme.readTemperature());
// Serial.println (" *C");
float fTemp = bme.readTemperature() / 1.09;//03; /////1.12; //()*9.0/5.0+32; //////////////////////
Serial.print (fTemp); //////////////////////////////
Serial.println (" ºC"); //////////////////////////////////////
//Humitat
Serial.print ("Humitat: ");
// Serial.print (bme.readHumidity() / 0.95); //0.85); //*2*(bme.readHumidity());
// Serial.println(" %");
float rH = bme.readHumidity() / 0.77; //////////////////////////
Serial.print (rH);
Serial.println(" %");
//Pressió
Serial.print ("Pressió: ");
// Serial.print (bme.readPressure() / 100.1F); //*3*
// Serial.println (" hPa");
float bPress = bme.readPressure() / 99.75F; //100.0F / 33.8638866667; ////////////
Serial.print (bPress); ///////////////////////////////////
Serial.println (" hPa"); //////////////////////////////////////
//Índex de xafogor
Serial.print ("Índex xafogor: "); /////////////////////////
float hIndex = 0.63 * (fTemp + 61.0 + ((fTemp-68.0)*1.2) + (rH*0.094)); //*6* //float hIndex = 0.5 * (fTemp + 61.0 + ((fTemp-68.0)*1.2) + (rH*0.094)); ////////////
Serial.print (hIndex); /////////////////////////////
Serial.println (" ºC"); /////////////////////
//Punt de rosada
Serial.print ("Punt rosada: "); ///////////////////////
float dPoint = fTemp - ((100-rH) /5); ///////////////////////////
Serial.print (dPoint); ///////////////////////
Serial.println (" %"); /////////////////////////
delay (1000); ////////////////////
Serial.println();
}
La cosa es que tengo claro estas instrucciones, que envían los datos a Thinger:
out [“Temperatura”] = round_to_dp(bme.readTemperature(), 2); //4
out [“Humitat”] = round_to_dp (bme.readHumidity(), 2); //4
out [“Pressió”] = round_to_dp (bme.readPressure() / 100, 2); //4
Estos parámetros los recoge directamente del sensor BME280, pero no se cómo añadir, con que instrucción añadiría los datos del índice de calor y del punto de rocío.
Entiendo que los de Temperatura, Humedad y Presión són datos específicos y “puros”, que da el sensor, pero los otros dos provienen de fórmulas y, por tanto, imagino que las instrucciones no seran iguales a las anteriores.
He probado todo lo que se me ha ocurrido, pero no hay manera.
Agradecería que si alguien que lo ha hecho o sabe cómo hacerlo, me echara un cable.
Gracias por la atención y la ayuda.
Salu2 cordiales.