Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

Données de post-température et lecture à partir du canal

Cet exemple montre comment collecter des données environnementales à partir d'un appareil et les publier depuis votre appareil sur un canal ThingSpeak ™. L'exemple utilise un ESP8266 et la bibliothèque de communication ThingSpeak pour publier des données et récupérer des données à partir d'un canal.

Matériel pris en charge

  • ESP8266-12

  • ESP8266-12E

Cet exemple utilise une thermistance analogique et le CAN intégré d'un ESP8266-12 pour lire la tension et la convertir en température. Une thermistance est un appareil dont la résistance est inversement proportionnelle à la température. Les données d'étalonnage de la thermistance sont stockées dans votre canal et lues par l' appareil. Les données d'étalonnage sont basées sur un ajustement au modèle Steinhart-Hart. Certains fabricants fournissent ces données d'étalonnage avec l' appareil. Vous pouvez régler vous-même les paramètres en mesurant la résistance de la thermistance à trois températures distinctes. Pour plus d'informations, voir Calibrate Temperature Coefficients.

Installation

  • Créez un canal ThingSpeak , comme indiqué dans Collect Data in a New Channel.

  • Activez au moins deux champs : un champ pour la lecture et un champ pour l'écriture. Les données sont écrites dans les champs 1, 2 et 3. Les champs 6, 7 et 8 sont utilisés pour stocker les coefficients d'étalonnage de la température. Cette image montre la vue  Paramètres de canal    pour une configuration à un seul canal .

  • Enregistrez votre clé d'API en lecture et écrivez la clé d'API, que vous pouvez trouver dans l' onglet Clés API de la vue Paramètres du canal .

  • Remplissez les champs d'étalonnage à l'aide de la barre d'adresse d'un navigateur Web. Les valeurs suivantes de a, b et c sont des estimations. Vous pouvez commencer avec ces valeurs, puis calibrer votre thermistance comme décrit dans Calibrate Temperature Coefficients. Modifiez le texte suivant avec votre clé d'API en écriture et collez-le directement dans la barre d'adresse de votre navigateur.

  • Définissez le coefficient a :

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field6=0.002039
  • Définissez le coefficient b :

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field7=0.0000672
  • Définissez le coefficient c :

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field8=0.0000008929
  • La réponse est le nombre d'entrées dans le canal. Si le canal vient d'être créé, le navigateur renvoie 1, 2 et 3 une fois que vous avez créé les premier, deuxième et troisième champs d'étalonnage, respectivement.

Matériel requis

  • ESP8266. Cet exemple utilise l'ESP8266-12E sur une carte de développement NodeMCU. L'ESP8266-01 n'expose pas la broche ADC. Il est possible d'utiliser un capteur de température à interface numérique avec l'ESP8266-01.

  • Thermistance 10 kΩ, telle que Cantherm MF52A2103J3470.

  • Résistance 10 kΩ. Une résistance à haute tolérance, 1% ou moins, donne de meilleurs résultats.

  • Planche à pain.

  • Fils de liaison (au moins 3).

 Schéma et connexions 

Connectez les broches suivantes :

  • Une broche de la thermistance à la broche A0 sur le NodeMCU

  • La deuxième broche de la thermistance à une résistance de 10 kΩ

  • La deuxième broche de résistance à la masse, qui doit être commune à l'ESP8266

La carte NodeMCU dispose d'un diviseur de tension intégré pour convertir la plage d'entrée de 1 V du CAN ESP8266 en une plage de 3,3 V. Envisagez d'ajouter une résistance de 100 kΩ à la terre et de 220 kΩ à l'alimentation si vous avez une autre carte sans diviseur de tension intégré.

 Programmez votre ESP8266 

1) Téléchargez le dernier IDE Arduino®.

2) Ajoutez le ThingSpeak Library for Arduino and ESP8266 :

un. Sélectionnez Sketch > Inclure la bibliothèque > Gérer les bibliothèques .

b. Sélectionnez ThingSpeak pour l'ajouter à votre figure.

3) Ajoutez le package de carte ESP8266.

a) Sous File > Preferences, entrez https://arduino.esp8266.com/stable/package_esp8266com_index.json dans  URL supplémentaires du gestionnaire de cartes .

b) Sélectionnez Outils > Tableaux > Gestionnaire de tableaux . Saisissez ESP8266 dans la barre de recherche et installez le package.

4) Sélectionnez le port et la carte appropriés dans l'IDE Arduino. Le hardware utilisé pour générer cet exemple utilisait l'option Node MCU 1.0 (ESP 8266–12E).

5) Créez l'application. Ouvrez une nouvelle fenêtre dans l'IDE Arduino et enregistrez le fichier. Ajoutez le code fourni ici. Assurez-vous de modifier les informations sur le réseau sans fil, les ID de canal (vous pouvez utiliser un seul canal), la clé d'API en lecture et la clé d'API en écriture . Vous n'avez pas besoin de modifier les coefficients dans le code car le programme les lit à partir de votre canal. Une fois connecté, l' appareil mesure la tension aux bornes de la thermistance toutes les deux minutes. Il calcule la température en fonction de l'étalonnage stocké dans votre canal et affiche la température sur votre canal.

Code

1) La première section initialise les variables. Assurez-vous de modifier la clé d'API en lecture et d'écrire la clé d'API, les numéros de canal et les informations de connexion au réseau sans fil.

#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) Dans la fonction setup, démarrez le moniteur série et lisez les constantes d'étalonnage.

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) La boucle principale vérifie en permanence depuis combien de temps la température a été lue. Si la période de temps définie s'est écoulée, l' appareil est lu, la température est calculée et la sortie est écrite sur votre 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) Connectez votre appareil au réseau sans fil à l'aide de la fonction 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. Lisez les données d'un seul champ sur un canal avec readTSData. Vous pouvez écrire une seule valeur dans ThingSpeak à l'aide de writeTSDataand et écrire plusieurs valeurs simultanément avec 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;
}

 Calibrer les coefficients de température 

Cet exemple utilise le modèle Steinhart-Hart pour transformer la résistance mesurée de la thermistance en température. Le modèle a la forme :

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

Vous pouvez déterminer les coefficients en mesurant la résistance de la thermistance à trois températures différentes. Un bain d'eau glacée est très proche de 0 °C et la température ambiante est généralement de 24 à 26 °C. Si vous avez accès à de l'eau bouillante, vous avez 100°C. Si vous n'avez pas d'eau bouillante, vous pouvez presser la thermistance entre vos doigts et utiliser 33°C comme estimation de la température de surface. Vous pouvez utiliser votre appareil pour calibrer les coefficients avec cette procédure.

1) Initialiser les coefficients. Utilisez les valeurs suggérées précédemment ou une autre supposition.

2) Démarrez votre appareil et regardez le moniteur série. La valeur ADC affichée sur le moniteur série est une mesure précise de la tension, mais donne une température incorrecte avant la fin de l'étalonnage.

3) Placez votre thermistance dans un bain d'eau glacée (0 °C). Convertissez la valeur ADC en une mesure de résistance avec la formule suivante pour la résistance de la thermistance.

R=105*(1024ADC-1)

4) Enregistrez les valeurs de température et ADC pour la température ambiante (environ 25 °C) et une température élevée. Si de l'eau bouillante n'est pas disponible, 33 °C est une estimation raisonnable si vous pressez vos doigts sur la thermistance.

5) Convertissez toutes les valeurs ADC en résistance. Utilisez le Thermistor Calculator pour résoudre les coefficients de votre thermistance. Téléchargez vos nouveaux coefficients sur votre canal et réinitialisez l' appareil.

Voir aussi

Sujets associés