Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Publicar datos de temperatura y leer del canal

Este ejemplo muestra cómo recopilar datos ambientales de un dispositivo y publicarlos desde su dispositivo en un canal ThingSpeak™. El ejemplo utiliza un ESP8266 y la biblioteca de comunicación ThingSpeak para publicar datos y recuperar datos de un canal.

Hardware compatible

  • ESP8266-12

  • ESP8266-12E

Este ejemplo utiliza un termistor analógico y el ADC incorporado de un ESP8266-12 para leer el voltaje y convertirlo en temperatura. Un termistor es un dispositivo con una resistencia inversamente proporcional a la temperatura. Los datos de calibración del termistor se almacenan en su canal y el dispositivo los lee. Los datos de calibración se basan en un ajuste al modelo Steinhart-Hart. Algunos fabricantes proporcionan estos datos de calibración con el dispositivo. Puede ajustar los parámetros usted mismo midiendo la resistencia del termistor a tres temperaturas distintas. Para obtener más información, consulte Calibrate Temperature Coefficients.

Configuración

  • Cree un canal ThingSpeak, como se muestra en Collect Data in a New Channel.

  • Habilite al menos dos campos: un campo para lectura y un campo para escritura. Los datos se escriben en los campos 1, 2 y 3. Los campos 6, 7 y 8 se utilizan para almacenar los coeficientes de calibración de temperatura. Esta imagen muestra la vista Configuración de canal para una configuración de un solo canal.

  • Registre su clave API leída y escriba su clave API, que puede encontrar en la pestaña Claves API de la vista Configuración del canal.

  • Complete los campos de calibración utilizando la barra de direcciones del navegador web. Los siguientes valores de a, b y c son estimaciones. Puede comenzar con estos valores y luego calibrar su termistor como se describe en Calibrate Temperature Coefficients. Modifique el siguiente texto con su clave API de escritura y péguelo directamente en la barra de direcciones de su navegador.

  • Establezca el coeficiente a :

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field6=0.002039
  • Establezca el coeficiente b :

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field7=0.0000672
  • Establezca el coeficiente c :

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field8=0.0000008929
  • La respuesta es el número de entradas en el canal. Si el canal es recién creado, el navegador devuelve 1, 2 y 3 después de crear el primer, segundo y tercer campo de calibración, respectivamente.

Hardware requerido

  • ESP8266. Este ejemplo utiliza el ESP8266-12E en una placa de desarrollo NodeMCU. El ESP8266-01 no expone el pin ADC. Es posible utilizar un sensor de temperatura de interfaz digital con el ESP8266-01.

  • Termistor de 10 kΩ, como Cantherm MF52A2103J3470.

  • Resistencia de 10 kΩ. Una resistencia de alta tolerancia, 1% o menos, produce mejores resultados.

  • Tablero de circuitos.

  • Cables de puente (al menos 3).

Esquema y Conexiones

Conecte los siguientes pines:

  • Un pin del termistor al pin A0 en el NodeMCU

  • El segundo pin del termistor a una resistencia de 10 kΩ

  • El segundo pin de resistencia a tierra, que debe ser común al ESP8266.

La placa NodeMCU tiene un divisor de voltaje incorporado para convertir el rango de entrada de 1 V del ADC ESP8266 a un rango de 3,3 V. Considere agregar una resistencia de 100 kΩ a tierra y 220 kΩ a la alimentación si tiene una placa diferente sin un divisor de voltaje incorporado.

Programa tu ESP8266

1) Descargue el último IDE de Arduino®.

2) Agregue el ThingSpeak Library for Arduino and ESP8266:

a. Seleccione Sketch ​​> Incluir biblioteca > Administrar bibliotecas .

b. Seleccione ThingSpeak para agregarlo a su boceto.

3) Agregue el paquete de placa ESP8266.

a) En File > Preferences, ingrese https://arduino.esp8266.com/stable/package_esp8266com_index.json en URL adicionales del administrador de tableros.

b) Seleccione Herramientas > Tableros > Administrador de tableros. Ingrese ESP8266 en la barra de búsqueda e instale el paquete.

4) Seleccione el puerto y la placa apropiados en el IDE de Arduino. El hardware utilizado para generar este ejemplo utilizó la opción Node MCU 1.0 (ESP 8266–12E) .

5) Crea la aplicación. Abra una nueva ventana en el IDE de Arduino y guarde el archivo. Agregue el código proporcionado aquí. Asegúrese de cambiar la información de la red inalámbrica, los ID de los canales (puede usar un solo canal), la clave API de lectura y la clave API de escritura. No necesitas cambiar los coeficientes en el código porque el programa los lee desde tu canal. Una vez conectado, el dispositivo mide el voltaje a través del termistor cada dos minutos. Calcula la temperatura en función de la calibración almacenada en su canal y publica la temperatura en su canal.

Código

1) La primera sección inicializa variables. Asegúrese de editar la clave API de lectura y escribir la clave API, los números de canal y la información de conexión de red inalámbrica.

#include <ThingSpeak.h>
#include <ESP8266WiFi.h>

// Network parameters
const char* ssid     = "SSSSSSS";
const char* password = "PPPPPPPPPP";

// ThingSpeak information
char thingSpeakAddress[] = "api.thingspeak.com";
unsigned long channelID = NNNNNN;
char* readAPIKey = "XXXXXXXXXXXXXXXX";
char* writeAPIKey = "YYYYYYYYYYYYYYYY";
const unsigned long postingInterval = 120L * 1000L;
unsigned int dataFieldOne = 1;                            // Field to write temperature data
unsigned int dataFieldTwo = 2;                       // Field to write temperature data
unsigned int dataFieldThree = 3;                     // Field to write elapsed time data
unsigned int aField = 6;                             //Field to hold first constant of the thermistor calibration                
unsigned int bField = 7;                             //Field to hold second constant of the thermistor calibration
unsigned int cField = 8;                             //Field to hold third constant of the thermistor calibration

// Global variables
// These constants are device specific.  You need to get them from the manufacturer or determine them yourself.
float aConst = 2.25E-02;   
float bConst = -0.003422894649;
float cConst = 0.00001518485044;

unsigned long lastConnectionTime = 0;
long lastUpdateTime = 0; 
WiFiClient client;

2) En la función setup , iniciar el monitor serial y leer las constantes de calibración.

void setup() {

Serial.begin(9600);
Serial.println("Start");
connectWiFi();

// Read the constants at startup.
aConst = readTSData( channelID, aField );
bConst = readTSData( channelID, bField );
cConst = readTSData( channelID, cField );
}

3) El circuito principal verifica continuamente cuánto tiempo ha pasado desde que se leyó la temperatura. Si ha transcurrido el período de tiempo establecido, se lee el dispositivo, se calcula la temperatura y la salida se escribe en su canal.

void loop() {
    
  
 // Update only if the posting time is exceeded
    if (millis() - lastUpdateTime >=  postingInterval) {
        
        float fahrenheitTemperature, celsiusTemperature;
        
        lastUpdateTime = millis();
        
        float readValue = analogRead(A0);
        float logR = log( 10000 * ( 1024 / readValue - 1 ));                 // Separate the calculation for simplicity and debugging
        
        celsiusTemperature = 1 / ( aConst + bConst * logR + cConst * pow(logR,3) ) - 273.15;   // Calculate the temperature in Celsius
        fahrenheitTemperature = celsiusTemperature * 9 / 5 + 32;
        Serial.println("ADC =  " + String( readValue )+ " Temp = "+String( fahrenheitTemperature ));
        write2TSData( channelID , dataFieldOne , fahrenheitTemperature , dataFieldTwo , celsiusTemperature , dataFieldThree , millis() );      // Write the temperature in F, C, and time since starting.
    }
}

4) Conecta tu dispositivo a la red inalámbrica usando la función connectWiFi .

int connectWiFi(){
    
    while (WiFi.status() != WL_CONNECTED) {
      
        WiFi.begin( ssid, password );
        delay(2500);
        Serial.println("Connecting to WiFi");
    }
    
    Serial.println( "Connected" );
    ThingSpeak.begin( client );
}

5. Leer datos de un solo campo en un canal con readTSData. Puede escribir un valor único en ThingSpeak usando writeTSData y escribir varios valores simultáneamente con write2TSdata.

float readTSData( long TSChannel,unsigned int TSField ){
    
  float data =  ThingSpeak.readFloatField( TSChannel, TSField, readAPIKey );
  Serial.println( " Data read from ThingSpeak: " + String( data, 9 ) );
  return data;

}

// Use this function if you want to write a single field.
int writeTSData( long TSChannel, unsigned int TSField, float data ){
  int  writeSuccess = ThingSpeak.writeField( TSChannel, TSField, data, writeAPIKey ); // Write the data to the channel
  if ( writeSuccess ){
    
    Serial.println( String(data) + " written to Thingspeak." );
    }
    
    return writeSuccess;
}

// Use this function if you want to write multiple fields simultaneously.
int write2TSData( long TSChannel, unsigned int TSField1, float field1Data, unsigned int TSField2, long field2Data, unsigned int TSField3, long field3Data ){

  ThingSpeak.setField( TSField1, field1Data );
  ThingSpeak.setField( TSField2, field2Data );
  ThingSpeak.setField( TSField3, field3Data );
   
  int writeSuccess = ThingSpeak.writeFields( TSChannel, writeAPIKey );
  return writeSuccess;
}

Calibrar coeficientes de temperatura

Este ejemplo utiliza el modelo Steinhart-Hart para convertir la resistencia medida del termistor en una temperatura. El modelo tiene la forma:

T=1(a+B*ln(R)+C*ln(R)3)

Puedes determinar los coeficientes midiendo la resistencia del termistor a tres temperaturas diferentes. Un baño de agua helada está muy cerca de 0 °C y la temperatura ambiente es generalmente de 24 a 26 °C. Si tienes acceso a agua hirviendo, tienes 100°C. Si no tienes agua hirviendo, puedes apretar el termistor entre tus dedos y usar 33°C como estimación de la temperatura de la superficie. Puede utilizar su dispositivo para calibrar los coeficientes con este procedimiento.

1) Inicializar los coeficientes. Utilice los valores sugeridos anteriormente o alguna otra suposición.

2) Inicie su dispositivo y observe el monitor en serie. El valor ADC que se muestra en el monitor en serie es una medida precisa del voltaje, pero produce una temperatura incorrecta antes de que se complete la calibración.

3) Coloque su termistor en un baño de agua helada (0 °C). Convierta el valor de ADC en una medida de resistencia con la siguiente fórmula para la resistencia del termistor.

R=105*(1024ADC-1)

4) Registre los valores de temperatura y ADC para temperatura ambiente (aproximadamente 25 °C) y una temperatura elevada. Si no hay agua hirviendo disponible, 33 °C es una estimación razonable si aprietas el termistor con los dedos.

5) Convierta todos los valores de ADC a resistencia. Utilice el Thermistor Calculator para resolver los coeficientes de su termistor. Sube tus nuevos coeficientes a tu canal y reinicia el dispositivo.

Consulte también

Temas relacionados