Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la versión original 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 de ThingSpeak para publicar y recuperar datos de un canal.

Hardware compatible

  • ESP8266-12

  • ESP8266-12E

Este ejemplo utiliza un termistor analógico y el ADC integrado 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 de 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 más información, ver Calibrar coeficientes de temperatura.

Configuración

  • Cree un canal de ThingSpeak, como se muestra en Recopilar datos en un nuevo canal.

  • 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 el Configuración de canales vista para una configuración de un solo canal.

  • Registre su clave de API de lectura y escriba la clave de API, que puede encontrar en el Claves API ficha de la Configuración de canales vista.

  • Rellene los campos de calibración mediante la barra de direcciones de un 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 Calibrar coeficientes de temperatura. Modifique el siguiente texto con su clave API de escritura y péguelo directamente en la barra de direcciones de su navegador.

  • Selecciona el a coeficiente:

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

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

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 se creó recientemente, el navegador devuelve 1, 2 y 3 después de crear los campos de calibración primero, segundo y tercero, respectivamente.

Hardware requerido

  • ESP8266. Este ejemplo usa 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 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 la 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.

Programe su ESP8266

1) Descargue el último IDE de Arduino®.

2) Añadir el ThingSpeak Library for Arduino and ESP8266:

una. Seleccione Bosquejo > Incluir biblioteca > Administrar bibliotecas.

b. Seleccione ThingSpeak para agregarlo a su boceto.

3) Agregue el paquete de placa ESP8266.

a) Bajo File > Preferences , ingresar https://arduino.esp8266.com/stable/package_esp8266com_index.json dentro URL adicionales de Board Manager.

b) Seleccionar Instrumentos > Tableros > Gerente de la Junta. Ingresar ESP8266 en la barra de búsqueda e instale el paquete.

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

5) Crear 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 las variables. Asegúrese de editar la clave de API de lectura y la clave de API de escritura, los números de canal y la información de conexión de la 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 el setup función, inicie el monitor serie y lea 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) Conecte su dispositivo a la red inalámbrica usando el connectWiFi función.

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 solo valor en ThingSpeak usando writeTSDataand 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 de 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)

Puede 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 tiene agua hirviendo, puede apretar el termistor entre sus dedos y usar 33 °C como una 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 mire el monitor serial. El valor ADC que se muestra en el monitor en serie es una medida precisa del voltaje, pero arroja 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 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 se dispone de agua hirviendo, 33 °C es una estimación razonable si aprieta los dedos sobre el termistor.

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

Consulte también

Temas relacionados