Temperaturdaten veröffentlichen und vom Kanal lesen
Dieses Beispiel zeigt, wie Sie Umgebungsdaten von einem Gerät erfassen und von Ihrem Gerät aus in einem ThingSpeak™-Kanal veröffentlichen. Das Beispiel verwendet einen ESP8266 und die ThingSpeak-Kommunikationsbibliothek, um Daten zu posten und 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, dessen Widerstand 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 mit. Sie können die Parameter selbst anpassen, indem Sie den Widerstand des Thermistors bei drei verschiedenen Temperaturen messen. Weitere Informationen finden Sie unter Temperaturkoeffizienten kalibrieren.


Aufstellen
Erstellen Sie einen ThingSpeak-Kanal, wie unter Daten in einem neuen Kanal sammeln gezeigt.
Aktivieren Sie mindestens zwei Felder: ein Feld zum Lesen und ein Feld zum Schreiben. Daten werden in die Felder 1, 2 und 3 geschrieben. Die Felder 6, 7 und 8 dienen zum Speichern der Temperaturkalibrierungskoeffizienten. Dieses Bild zeigt die Ansicht Kanaleinstellungen für eine Einzelkanalkonfiguration.

Notieren Sie Ihren Read-API-Schlüssel und Ihren Write-API-Schlüssel, die Sie auf der Registerkarte API Keys der Ansicht Channel Settings finden.
Füllen Sie die Kalibrierungsfelder mithilfe der Adressleiste eines Webbrowsers aus. Die folgenden Werte von
a,bundcsind Schätzungen. Sie können mit diesen Werten beginnen und dann Ihren Thermistor wie unter Temperaturkoeffizienten kalibrieren 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 und dritte Kalibrierungsfeld erstellt haben.
Erforderliche Hardware
ESP8266. In diesem Beispiel wird der ESP8266-12E auf einer NodeMCU-Entwicklungsplatine verwendet. Der ESP8266-01 legt den ADC-Pin nicht frei. Es ist möglich, mit dem ESP8266-01 einen Temperatursensor mit digitaler Schnittstelle 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 Anschlüsse
Verbinden Sie die folgenden Pins:
Ein Pin des Thermistors an Pin A0 auf dem NodeMCU
Der zweite Pin des Thermistors an einen 10 kΩ Widerstand
Der zweite Widerstandsstift zur Masse, der mit dem ESP8266 gemeinsam sein muss
Die NodeMCU-Platine verfügt über einen integrierten Spannungsteiler, um den 1-V-Eingangsbereich des ESP8266-ADC in einen 3,3-V-Bereich umzuwandeln. Wenn Sie eine andere Platine ohne integrierten Spannungsteiler haben, sollten Sie einen 100-kΩ-Widerstand zur Masse und einen 220-kΩ-Widerstand zur Stromversorgung hinzufügen.

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 Sketch > Include Library > Manage Libraries.
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 in Zusätzliche Board Manager-URLs https://arduino.esp8266.com/stable/package_esp8266com_index.json ein.
b) Wählen Sie Tools > 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 Karte 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. Denken Sie daran, die Informationen zum drahtlosen Netzwerk, die Kanal-IDs (Sie können einen einzelnen Kanal verwenden), den Read-API-Schlüssel und den Schreib-API-Schlüssel zu ändern. Sie müssen die Koeffizienten im Code nicht ändern, da das Programm sie aus Ihrem Kanal liest. Nach dem Anschließen misst das Gerät 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. Denken Sie daran, den Read-API-Schlüssel und den Schreib-API-Schlüssel, die Kanalnummern und die Informationen zur drahtlosen Netzwerkverbindung zu 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.
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 gelesen, 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 mithilfe der connectWiFi-Funktion 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 mit readTSData Daten aus einem einzelnen Feld auf einem Kanal. 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:
Sie können die Koeffizienten bestimmen, indem Sie den Widerstand des Thermistors bei drei verschiedenen Temperaturen messen. Ein Eiswasserbad hat eine Temperatur nahe 0 °C, die Raumtemperatur liegt im Allgemeinen bei 24–26 °C. Bei kochendem Wasser beträgt die Temperatur 100 °C. Andernfalls können Sie den Thermistor zwischen Ihren Fingern zusammendrücken und 33 °C als Schätzung der Oberflächentemperatur verwenden. Mit diesem Verfahren können Sie die Koeffizienten Ihres Geräts kalibrieren.
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, ergibt 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.
4) Notieren Sie die Temperatur- und ADC-Werte für Raumtemperatur (ca. 25 °C) und erhöhte Temperatur. Wenn kein kochendes Wasser verfügbar ist, sind 33 °C eine vernünftige Schätzung, wenn Sie Ihre Finger auf den Thermistor drücken.
5) Konvertieren Sie alle ADC-Werte in Widerstände. Verwenden Sie den Thermistor-Rechner, um die Koeffizienten für Ihren Thermistor zu berechnen. Laden Sie Ihre neuen Koeffizienten auf Ihren Kanal hoch und setzen Sie das Gerät zurück.