Contenuto principale

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l’originale in inglese.

Dati di temperatura post e lettura dal canale

Questo esempio mostra come raccogliere dati ambientali da un dispositivo e post dal dispositivo su un canale ThingSpeak ™. L'esempio utilizza un ESP8266 e la libreria di comunicazione ThingSpeak per post dati e recuperarli da un canale.

Hardware supportato

  • ESP8266-12

  • ESP8266-12E

Questo esempio utilizza un termistore analogico e l'ADC integrato di un ESP8266-12 per leggere la tensione e convertirla in temperatura. Un termistore è un dispositivo la cui resistenza è inversamente proporzionale alla temperatura. I dati di calibrazione del termistore vengono memorizzati nel canale e letti dal dispositivo. I dati di calibrazione si basano su un adattamento al modello Steinhart-Hart. Alcuni produttori forniscono questi dati di calibrazione insieme al dispositivo. È possibile adattare autonomamente i parametri misurando la resistenza del termistore a tre temperature distinte. Per ulteriori informazioni, vedere Calibrare i coefficienti di temperatura.

Impostare

  • Crea un canale ThingSpeak, come mostrato in Raccogli dati in un nuovo canale.

  • Abilitare almeno due campi: un campo per la lettura e un campo per la scrittura. I dati vengono scritti nei campi 1, 2 e 3. I campi 6, 7 e 8 vengono utilizzati per memorizzare i coefficienti di calibrazione della temperatura. Questa immagine mostra la vista Impostazioni canale per la configurazione di un singolo canale.

  • Registra la tua chiave API di lettura e la tua chiave API di scrittura, che puoi trovare nella scheda Chiavi API della vista Impostazioni canale.

  • Compilare i campi di calibrazione utilizzando la barra degli indirizzi del browser web. I seguenti valori di a, b e c sono stime. È possibile iniziare con questi valori e quindi calibrare il termistore come descritto in Calibrare i coefficienti di temperatura. Modifica il testo seguente con la tua chiave API di scrittura e incollalo direttamente nella barra degli indirizzi del tuo browser.

  • Imposta il coefficiente a:

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field6=0.002039
  • Imposta il coefficiente b:

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field7=0.0000672
  • Imposta il coefficiente c:

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field8=0.0000008929
  • La risposta è il numero di voci nel canale. Se il canale è stato appena creato, il browser restituisce 1, 2 e 3 dopo aver creato rispettivamente il primo, il secondo e il terzo campo di calibrazione.

Hardware richiesto

  • ESP8266. In questo esempio viene utilizzato l'ESP8266-12E su una scheda di sviluppo NodeMCU. L'ESP8266-01 non espone il pin ADC. È possibile utilizzare un sensore di temperatura con interfaccia digitale con l'ESP8266-01.

  • Termistore da 10 kΩ, come Cantherm MF52A2103J3470.

  • Resistore da 10 kΩ. Un resistore ad alta tolleranza, pari o inferiore all'1%, produce risultati migliori.

  • Tagliere.

  • Cavi jumper (almeno 3).

Schema e connessioni

Collegare i seguenti pin:

  • Un pin del termistore al pin A0 sul NodeMCU

  • Il secondo pin del termistore a un resistore da 10 kΩ

  • Il secondo pin del resistore a terra, che deve essere comune all'ESP8266

La scheda NodeMCU è dotata di un partitore di tensione integrato per convertire l'intervallo di ingresso da 1 V dell'ADC ESP8266 in un intervallo da 3,3 V. Se si dispone di una scheda diversa senza partitore di tensione integrato, si consiglia di aggiungere una resistenza da 100 kΩ a terra e una da 220 kΩ all'alimentazione.

Programma il tuo ESP8266

1) Scarica l'ultima versione di Arduino® IDE.

2) Aggiungere ThingSpeak Library for Arduino and ESP8266:

UN. Seleziona Schizzo > Includi libreria > Gestisci librerie.

B. Seleziona ThingSpeak per aggiungerlo al tuo schizzo.

3) Aggiungere il pacchetto della scheda ESP8266.

a) In File > Preferences, inserisci https://arduino.esp8266.com/stable/package_esp8266com_index.json in URL aggiuntivi del gestore della bacheca.

b) Selezionare Strumenti > Bacheche > Gestore bacheche. Inserisci ESP8266 nella barra di ricerca e installa il pacchetto.

4) Selezionare la porta e la scheda appropriate nell'IDE di Arduino. L'hardware utilizzato per generare questo esempio utilizzava l'opzione Node MCU 1.0 (ESP 8266–12E).

5) Creare l'applicazione. Apri una nuova finestra nell'IDE di Arduino e salva il file. Aggiungere il codice fornito qui. Assicurati di modificare le informazioni della rete wireless, gli ID del canale (puoi usare un singolo canale), la chiave API di lettura e la chiave API di scrittura. Non è necessario modificare i coefficienti nel codice perché il programma li legge dal canale. Una volta collegato, il dispositivo misura la tensione ai capi del termistore ogni due minuti. Calcola la temperatura in base alla calibrazione memorizzata nel tuo canale e la invia al tuo canale.

Codice

1) La prima sezione inizializza le variabili. Assicurati di modificare la chiave API di lettura e di scrivere la chiave API, i numeri dei canali e le informazioni sulla connessione di rete wireless.

#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) Nella funzione setup, avviare il monitor seriale e leggere le costanti di calibrazione.

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) Il circuito principale controlla continuamente quanto tempo è trascorso dall'ultima lettura della temperatura. Una volta trascorso il periodo di tempo impostato, il dispositivo viene letto, la temperatura viene calcolata e l'output viene scritto sul canale.

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) Collega il tuo dispositivo alla rete wireless utilizzando la funzione 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. Leggere i dati da un singolo campo su un canale con readTSData. È possibile scrivere un singolo valore in ThingSpeak utilizzando writeTSDataand e scrivere più valori contemporaneamente 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;
}

Calibrare i coefficienti di temperatura

In questo esempio si utilizza il modello Steinhart-Hart per trasformare la resistenza misurata del termistore in una temperatura. Il modello ha la forma:

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

È possibile determinare i coefficienti misurando la resistenza del termistore a tre diverse temperature. Un bagno di acqua ghiacciata è molto vicino a 0 °C, mentre la temperatura ambiente è generalmente di 24-26 °C. Se si ha accesso all'acqua bollente, si raggiungono i 100 °C. In assenza di acqua bollente, si può stringere il termistore tra le dita e utilizzare 33 °C come stima della temperatura superficiale. È possibile utilizzare il dispositivo per calibrare i coefficienti con questa procedura.

1) Inizializzare i coefficienti. Utilizzare i valori suggeriti in precedenza o qualche altra ipotesi.

2) Avviare il dispositivo e osservare il monitor seriale. Il valore ADC mostrato nel monitor seriale è una misura accurata della tensione, ma fornisce una temperatura errata prima del completamento della calibrazione.

3) Mettere il termistore in un bagno di acqua ghiacciata (0 °C). Convertire il valore ADC in una misurazione della resistenza con la seguente formula per la resistenza del termistore.

R=105*(1024ADC-1)

4) Registrare i valori di temperatura e ADC per la temperatura ambiente (circa 25 °C) e per una temperatura elevata. Se non si ha a disposizione acqua bollente, una stima ragionevole è 33 °C se si premono le dita sul termistore.

5) Convertire tutti i valori ADC in resistenza. Utilizza la Calcolatrice del termistore per calcolare i coefficienti del tuo termistore. Carica i nuovi coefficienti sul tuo canale e reimposta il dispositivo.

Vedi anche

Argomenti