Main Content

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l'ultima versione in inglese.

Pubblica i dati sulla temperatura e leggi dal canale

Questo esempio mostra come raccogliere dati ambientali da un dispositivo e pubblicarli dal dispositivo a un canale ThingSpeak™ . L'esempio utilizza un ESP8266 e la libreria di comunicazione ThingSpeak per pubblicare e recuperare dati da un canale.

Hardware supportato

  • ESP8266-12

  • ESP8266-12E

Questo esempio utilizza un thermistor analogico e l'ADC integrato di un ESP8266-12 per leggere la tensione e convertirla in temperatura. Un thermistor è un dispositivo con una resistenza inversamente proporzionale alla temperatura. I dati di calibrazione del thermistor vengono memorizzati nel canale e letti dal dispositivo. I dati di calibrazione si basano sull'adattamento al modello Steinhart-Hart. Alcuni produttori forniscono questi dati di calibrazione insieme al dispositivo. Puoi adattare tu stesso i parametri misurando la resistenza del thermistor tre temperature distinte. Per ulteriori informazioni, vedere Calibrate Temperature Coefficients.

Impostare

  • Crea un canale ThingSpeak , come mostrato in Collect Data in a New Channel.

  • Abilita 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 visualizzazione Impostazioni canale per una configurazione a canale singolo.

  • Registra la chiave API letta e scrivi la chiave API, che puoi trovare nella scheda Chiavi API della vista Impostazioni canale.

  • Compila i campi di calibrazione utilizzando la barra degli indirizzi del browser web. I seguenti valori di a, b e c sono stime. Puoi iniziare con questi valori e quindi calibrare il thermistor come descritto in Calibrate Temperature Coefficients. 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. Questo esempio utilizza 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 ESP8266-01.

  • Thermistor da 10 kΩ, come Cantherm MF52A2103J3470.

  • Resistenza da 10 kΩ. Un resistore ad alta tolleranza, 1% o meno, produce risultati migliori.

  • Breadboard.

  • Cavi di collegamento (almeno 3).

Schema e collegamenti

Collega i seguenti pin:

  • Un pin del thermistor al pin A0 sul NodeMCU

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

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

La scheda NodeMCU dispone di un divisore di tensione integrato per convertire l'intervallo di ingresso di 1 V dell'ADC ESP8266 in un intervallo di 3,3 V. Prendi in considerazione l'aggiunta di un resistore da 100 kΩ a terra e da 220 kΩ all'alimentazione se disponi di una scheda diversa senza partitore di tensione integrato.

Programma il tuo ESP8266

1) Scarica l'ultimo IDE Arduino®.

2) Aggiungi il ThingSpeak Library for Arduino and ESP8266:

A. Selezionare Schizzo > Includi libreria > Gestisci librerie.

B. Seleziona ThingSpeak per aggiungerlo al tuo schizzo.

3) Aggiungi il pacchetto scheda ESP8266.

a) In File > Preferences, inserisci https://arduino.esp8266.com/stable/package_esp8266com_index.json in Ulteriori URL del Board Manager.

b) Selezionare Strumenti > Schede > Gestione schede. 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. Aggiungi il codice fornito qui. Assicurati di modificare le informazioni sulla rete wireless, gli ID dei canali (puoi utilizzare 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 tuo canale. Una volta collegato, il dispositivo misura la tensione attraverso il thermistor ogni due minuti. Calcola la temperatura in base alla calibrazione memorizzata nel tuo canale e pubblica la temperatura sul tuo canale.

Codice

1) La prima sezione inizializza le variabili. Assicurati di modificare la chiave API letta e di scrivere la chiave API, i numeri di canale 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 ciclo principale controlla continuamente quanto tempo è trascorso dall'ultima volta che è stata letta la temperatura. Se il periodo di tempo impostato è trascorso, 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) Connetti 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. Leggi i dati da un singolo campo su un canale con readTSData. È possibile scrivere un singolo valore su ThingSpeak utilizzando writeTSData 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

Questo esempio utilizza il modello Steinhart-Hart per trasformare la resistenza misurata del thermistor 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 thermistor a tre diverse temperature. La temperatura di un bagno in acqua ghiacciata è molto vicina a 0°C e la temperatura ambiente è generalmente compresa tra 24 e 26°C. Se hai accesso all'acqua bollente, hai 100°C. Se non disponi di acqua bollente, puoi stringere il thermistor 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) Avvia il dispositivo e guarda il monitor seriale. Il valore ADC mostrato nel monitor seriale è una misura accurata della tensione, ma restituisce una temperatura errata prima del completamento della calibrazione.

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

R=105*(1024ADC-1)

4) Registrare la temperatura e i valori ADC per la temperatura ambiente (circa 25 °C) e una temperatura elevata. Se non è disponibile acqua bollente, 33 °C è una stima ragionevole se si stringono le dita sul thermistor.

5) Converti tutti i valori ADC in resistenza. Utilizza Thermistor Calculator per risolvere i coefficienti del tuo thermistor. Carica i tuoi nuovi coefficienti sul tuo canale e ripristina il dispositivo.

Vedi anche

Argomenti complementari