Main Content

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

Temperaturdaten posten und vom Kanal lesen

Dieses Beispiel zeigt, wie Sie Umgebungsdaten von einem Gerät sammeln und diese von Ihrem Gerät auf einem ThingSpeak™ -Kanal veröffentlichen. Das Beispiel verwendet einen ESP8266 und die ThingSpeak Communication Library, um Daten zu veröffentlichen und Daten von einem Kanal abzurufen.

Unterstützte Hardware

  • ESP8266-12

  • ESP8266-12E

In diesem Beispiel werden ein analoger Thermistor und der integrierte ADC eines ESP8266-12 verwendet, um die Spannung zu lesen und in Temperatur umzuwandeln. Ein Thermistor ist ein Gerät mit einem Widerstand, der umgekehrt proportional zur Temperatur ist. Die Kalibrierungsdaten für den Thermistor werden in Ihrem Kanal gespeichert und vom Gerät gelesen. Die Kalibrierungsdaten basieren auf einer Anpassung an das Steinhart-Hart-Modell. Einige Hersteller liefern diese Kalibrierungsdaten mit dem Gerät. Sie können die Parameter selbst anpassen, indem Sie den Widerstand des Thermistors bei drei verschiedenen Temperaturen messen. Weitere Informationen finden Sie Calibrate Temperature Coefficients.

Aufstellen

  • Erstellen Sie einen ThingSpeak Kanal, wie in Collect Data in a New Channel gezeigt.

  • Aktivieren Sie mindestens zwei Felder: ein Feld zum Lesen und ein Feld zum Schreiben. Die Daten werden in die Felder 1, 2 und 3 geschrieben. Die Felder 6, 7 und 8 werden zum Speichern der Temperaturkalibrierungskoeffizienten verwendet. Dieses Bild zeigt die Ansicht „Kanaleinstellungen“ für ein Einzelkanal-Setup.

  • Notieren Sie Ihren Lese-API-Schlüssel und Ihren Schreib-API-Schlüssel, die Sie auf der Registerkarte „API-Schlüssel“ der Ansicht „Kanaleinstellungen“ finden.

  • Füllen Sie die Kalibrierungsfelder mithilfe der Adressleiste eines Webbrowsers aus. Die folgenden Werte von a, b und c sind Schätzungen. Sie können mit diesen Werten beginnen und dann Ihren Thermistor wie in Calibrate Temperature Coefficients beschrieben kalibrieren. Ändern Sie den folgenden Text mit Ihrem Schreib-API-Schlüssel und fügen Sie ihn direkt in die Adressleiste Ihres Browsers ein.

  • Legen Sie den a- Koeffizienten fest:

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field6=0.002039
  • Legen Sie den b- Koeffizienten fest:

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field7=0.0000672
  • Legen Sie den c- Koeffizienten fest:

https://api.thingspeak.com/update?api_key=YOUR WRITE API KEY&field8=0.0000008929
  • Die Antwort ist die Anzahl der Einträge im Kanal. Wenn der Kanal neu erstellt wird, gibt der Browser 1, 2 und 3 zurück, nachdem Sie das erste, zweite bzw. dritte Kalibrierungsfeld erstellt haben.

Erforderliche Hardware

  • ESP8266. In diesem Beispiel wird der ESP8266-12E auf einem NodeMCU-Entwicklungsboard verwendet. Der ESP8266-01 legt den ADC-Pin nicht frei. Es ist möglich, einen Temperatursensor mit digitaler Schnittstelle mit dem ESP8266-01 zu verwenden.

  • 10-kΩ-Thermistor, z. B. Cantherm MF52A2103J3470.

  • 10 kΩ Widerstand. Ein Widerstand mit hoher Toleranz, 1 % oder weniger, liefert bessere Ergebnisse.

  • Steckbrett.

  • Überbrückungskabel (mindestens 3).

Schema und Verbindungen

Verbinden Sie die folgenden Pins:

  • Ein Pin des Thermistors an Pin A0 am NodeMCU

  • Der zweite Pin des Thermistors an einen 10-kΩ-Widerstand

  • Der zweite Widerstandsstift muss mit Masse verbunden sein, was dem ESP8266 gemeinsam sein muss

Das NodeMCU-Board verfügt über einen integrierten Spannungsteiler, um den 1-V-Eingangsbereich des ESP8266-ADC in einen 3,3-V-Bereich umzuwandeln. Erwägen Sie die Hinzufügung eines 100-kΩ-Widerstands zur Masse und eines 220-kΩ-Widerstands zur Stromversorgung, wenn Sie eine andere Platine ohne eingebauten Spannungsteiler haben.

Programmieren Sie Ihren ESP8266

1) Laden Sie die neueste Arduino® IDE herunter.

2) Fügen Sie ThingSpeak Library for Arduino and ESP8266 hinzu:

A. Wählen Sie „Skizze“ > „Bibliothek einschließen“ > „Bibliotheken verwalten“.

B. Wählen Sie ThingSpeak aus, um es Ihrer Skizze hinzuzufügen.

3) Fügen Sie das ESP8266-Board-Paket hinzu.

a) Geben Sie unter File > Preferences https://arduino.esp8266.com/stable/package_esp8266com_index.json in „Zusätzliche Board-Manager-URLs“ ein.

b) Wählen Sie „Extras“ > „Boards“ > „Board-Manager“. Geben Sie ESP8266 in die Suchleiste ein und installieren Sie das Paket.

4) Wählen Sie den entsprechenden Port und die entsprechende Platine in der Arduino IDE aus. Die zum Generieren dieses Beispiels verwendete Hardware verwendete die Option Node MCU 1.0 (ESP 8266–12E) .

5) Erstellen Sie die Anwendung. Öffnen Sie ein neues Fenster in der Arduino IDE und speichern Sie die Datei. Fügen Sie den hier bereitgestellten Code hinzu. Stellen Sie sicher, dass Sie die Informationen zum drahtlosen Netzwerk, die Kanal-IDs (Sie können einen einzelnen Kanal verwenden), den Lese-API-Schlüssel und den Schreib-API-Schlüssel ändern. Sie müssen die Koeffizienten im Code nicht ändern, da das Programm sie von Ihrem Kanal liest. Sobald das Gerät angeschlossen ist, misst es alle zwei Minuten die Spannung am Thermistor. Es berechnet die Temperatur basierend auf der in Ihrem Kanal gespeicherten Kalibrierung und sendet die Temperatur an Ihren Kanal.

Code

1) Der erste Abschnitt initialisiert Variablen. Stellen Sie sicher, dass Sie den Lese-API-Schlüssel und den Schreib-API-Schlüssel, die Kanalnummern und die Informationen zur drahtlosen Netzwerkverbindung bearbeiten.

#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) Starten Sie in der Funktion setup den seriellen Monitor und lesen Sie die Kalibrierungskonstanten aus.

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) Die Hauptschleife prüft kontinuierlich, wie lange es her ist, dass die Temperatur abgelesen wurde. Wenn die eingestellte Zeitspanne abgelaufen ist, wird das Gerät ausgelesen, die Temperatur berechnet und die Ausgabe in Ihren Kanal geschrieben.

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) Verbinden Sie Ihr Gerät mit der Funktion connectWiFi mit dem drahtlosen Netzwerk.

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. Lesen Sie Daten aus einem einzelnen Feld auf einem Kanal mit readTSData. Sie können mit writeTSDataand einen einzelnen Wert in ThingSpeak schreiben und mit write2TSdata mehrere Werte gleichzeitig schreiben.

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;
}

Temperaturkoeffizienten kalibrieren

In diesem Beispiel wird das Steinhart-Hart-Modell verwendet, um den gemessenen Widerstand des Thermistors in eine Temperatur umzuwandeln. Das Modell hat die Form:

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

Sie können die Koeffizienten bestimmen, indem Sie den Widerstand des Thermistors bei drei verschiedenen Temperaturen messen. Die Temperatur eines Eiswasserbades liegt nahe bei 0 °C, die Raumtemperatur liegt im Allgemeinen bei 24–26 °C. Wenn Sie Zugang zu kochendem Wasser haben, haben Sie 100°C. Wenn Sie kein kochendes Wasser haben, können Sie den Thermistor zwischen Ihren Fingern zusammendrücken und 33 °C als Schätzwert für die Oberflächentemperatur verwenden. Mit diesem Verfahren können Sie Ihr Gerät zur Kalibrierung der Koeffizienten verwenden.

1) Initialisieren Sie die Koeffizienten. Verwenden Sie die zuvor vorgeschlagenen Werte oder eine andere Schätzung.

2) Starten Sie Ihr Gerät und beobachten Sie den seriellen Monitor. Der im seriellen Monitor angezeigte ADC-Wert ist ein genaues Maß für die Spannung, liefert jedoch eine falsche Temperatur, bevor die Kalibrierung abgeschlossen ist.

3) Legen Sie Ihren Thermistor in ein Eiswasserbad (0 °C). Wandeln Sie den ADC-Wert mit der folgenden Formel für den Thermistorwiderstand in eine Widerstandsmessung um.

R=105*(1024ADC-1)

4) Notieren Sie die Temperatur- und ADC-Werte für Raumtemperatur (ca. 25 °C) und eine erhöhte Temperatur. Wenn kein kochendes Wasser zur Verfügung steht, sind 33 °C eine vernünftige Schätzung, wenn man mit den Fingern auf den Thermistor drückt.

5) Wandeln Sie alle ADC-Werte in Widerstand um. Verwenden Sie Thermistor Calculator , um die Koeffizienten für Ihren Thermistor zu ermitteln. Laden Sie Ihre neuen Koeffizienten auf Ihren Kanal hoch und setzen Sie das Gerät zurück.

Siehe auch

Verwandte Themen