Inhaltsverzeichnis:

IoT-Wetterstation mit RPi und ESP8266 - Gunook
IoT-Wetterstation mit RPi und ESP8266 - Gunook

Video: IoT-Wetterstation mit RPi und ESP8266 - Gunook

Video: IoT-Wetterstation mit RPi und ESP8266 - Gunook
Video: [EN subs] DIY IoT Wetterstation - mit Regen und Windsensor 2024, Kann
Anonim
IoT-Wetterstation mit RPi und ESP8266
IoT-Wetterstation mit RPi und ESP8266

In früheren Tutorials haben wir mit NodeMCU, Sensoren gespielt und gelernt, wie man Daten auf ThingSpeak erfasst und protokolliert (eine Internet of Things (IoT)-Plattform, mit der Sie Sensordaten in der Cloud sammeln und speichern und IoT-Anwendungen entwickeln können):

IOT LEICHT GEMACHT: FERNBEDIENUNG VON WETTERDATEN: UV- UND LUFTTEMPERATUR & FEUCHTIGKEIT

In diesem neuen Tutorial lernen wir, wie Sie dasselbe tun, diesmal jedoch mit einem Raspberry Pi, um Daten von mehreren verschiedenen Sensoren zu erfassen und verschiedene Möglichkeiten der Kommunikation zwischen Geräten und dem Web zu erkunden:

Sensoren und Kommunikationstyp:

  • DHT22 (Temperatur und Feuchtigkeit) ==> Digitale Kommunikation
  • BMP180 (Temperatur und Druck) ==> I2C-Protokoll
  • DS18B20 (Temperatur) ==> 1-Wire-Protokoll

Das Blockdiagramm zeigt, was wir am Ende mit diesem Projekt bekommen:

Bild
Bild

Schritt 1: Stückliste - Stückliste

  1. Raspberry Pi V3 - US$ 32,00
  2. DHT22 Temperatur- und relativer Luftfeuchtigkeitssensor - USD 9,95
  3. Widerstand 4K7 Ohm
  4. DS18B20 Wasserdichter Temperatursensor - USD 5.95
  5. Widerstand 4K7 Ohm
  6. BMP180 Barometrischer Druck-, Temperatur- und Höhensensor - USD 6,99

Schritt 2: Installation des Temperatur- und Feuchtigkeitssensors

Installation des Temperatur- und Feuchtigkeitssensors
Installation des Temperatur- und Feuchtigkeitssensors

Als erster Sensor wird der DHT22 zur Erfassung von Lufttemperatur und relativer Luftfeuchtigkeit installiert. Die ADAFRUIT-Site bietet großartige Informationen über diese Sensoren. Unten einige Informationen, die von dort abgerufen wurden:

Überblick

Die kostengünstigen DHT-Temperatur- und Feuchtigkeitssensoren sind sehr einfach und langsam, eignen sich jedoch hervorragend für Bastler, die grundlegende Datenprotokollierung durchführen möchten. Die DHT-Sensoren bestehen aus zwei Teilen, einem kapazitiven Feuchtigkeitssensor und einem Thermistor. Es gibt auch einen sehr einfachen Chip, der eine Analog-Digital-Wandlung durchführt und ein digitales Signal mit Temperatur und Luftfeuchtigkeit ausspeist. Das digitale Signal kann mit jedem Mikrocontroller relativ einfach gelesen werden.

DHT22 Hauptmerkmale:

  • Kostengünstig
  • 3 bis 5 V Strom und I/O
  • 2,5 mA maximaler Stromverbrauch während der Konvertierung (während der Datenanforderung)
  • Gut für 0-100% Feuchtigkeitsmessungen mit 2-5% Genauigkeit
  • Gut für Temperaturmessungen von -40 bis 125 °C ±0,5 °C Genauigkeit
  • Nicht mehr als 0,5 Hz Abtastrate (einmal alle 2 Sekunden)
  • Körpergröße 15,1 mm x 25 mm x 7,7 mm
  • 4 Stifte mit 0,1" Abstand

Wenn Sie den Sensor normalerweise auf Entfernungen von weniger als 20 m verwenden, sollte ein 4K7-Ohm-Widerstand zwischen Data- und VCC-Pins angeschlossen werden. Der DHT22-Ausgangsdaten-Pin wird mit Raspberry GPIO 16 verbunden. Überprüfen Sie das obige Schaltbild und verbinden Sie den Sensor wie folgt mit den RPi-Pins:

  1. Pin 1 - Vcc ==> 3.3V
  2. Pin 2 - Daten ==> GPIO 16
  3. Pin 3 - Nicht verbunden
  4. Pin 4 - Masse ==> Masse

Vergessen Sie nicht, den 4K7-Ohm-Widerstand zwischen Vcc- und Daten-Pins zu installieren

Sobald der Sensor angeschlossen ist, müssen wir auch seine Bibliothek auf unserem RPi installieren.

Installieren der DHT-Bibliothek:

Gehen Sie auf Ihrem Raspberry, beginnend mit /home, zu /Dokumente

CD-Dokumente

Erstellen Sie ein Verzeichnis, um die Bibliothek zu installieren, und wechseln Sie dorthin:

mkdir DHT22_Sensor

cd DHT22_Sensor

Gehen Sie in Ihrem Browser zu Adafruit GitHub:

github.com/adafruit/Adafruit_Python_DHT

Laden Sie die Bibliothek herunter, indem Sie auf den Download-Zip-Link rechts klicken und das Archiv auf Ihrem kürzlich erstellten Raspberry Pi-Ordner entpacken. Gehen Sie dann in das Verzeichnis der Bibliothek (Unterordner, der beim Entpacken der Datei automatisch erstellt wird) und führen Sie den Befehl aus:

sudo python3 setup.py installieren

Öffne ein Testprogramm (DHT22_test.py) von meinem GITHUB

Adafruit_DHT importieren

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 Luftfeuchtigkeit, Temperatur = Adafruit_DHT.read_retry(DHT22Sensor, DHTpin) wenn Luftfeuchtigkeit nicht None und Temperatur nicht None ist: print('Temp={0:0.1f}*C Humidity={1:0.1 f}%'.format(Temperatur, Feuchtigkeit)) else: print('Fehler beim Lesen. Versuchen Sie es erneut!')

Führen Sie das Programm mit dem Befehl aus:

python3 DHT22_test.py

Der folgende Terminal-Druckbildschirm zeigt das Ergebnis.

Bild
Bild

Schritt 3: DS18B20 installieren - Temperatursensor

Installieren von DS18B20 - Temperatursensor
Installieren von DS18B20 - Temperatursensor
Installieren von DS18B20 - Temperatursensor
Installieren von DS18B20 - Temperatursensor

Sensorübersicht:

In diesem Tutorial verwenden wir eine wasserdichte Version des DS18B20-Sensors. Es ist sehr nützlich für abgelegene Temperaturen unter nassen Bedingungen, zum Beispiel auf einem feuchten Boden. Der Sensor ist isoliert und kann bis 125 °C messen (Adafrut empfiehlt aufgrund des PVC-Mantels des Kabels nicht, ihn über 100 °C zu verwenden).

Der DS18B20 ist ein digitaler Sensor, der auch über große Distanzen gut zu verwenden ist! Diese digitalen 1-Draht-Temperatursensoren sind ziemlich genau (±0,5 °C über einen Großteil des Bereichs) und können bis zu 12 Bit Präzision vom integrierten Digital-Analog-Wandler liefern. Sie funktionieren hervorragend mit der NodeMCU mit einem einzigen digitalen Pin, und Sie können sogar mehrere an denselben Pin anschließen. Jeder hat eine einzigartige 64-Bit-ID, die werkseitig eingebrannt ist, um sie zu unterscheiden.

Der Sensor arbeitet von 3,0 bis 5,0 V, was bedeutet, dass er direkt von den 3,3 V versorgt werden kann, die von einem der Raspberry-Pins (1 oder 17) bereitgestellt werden.

Der Sensor hat 3 Drähte:

  • Schwarz: GND
  • Rot: VCC
  • Gelb: 1-Draht-Daten

Hier finden Sie die vollständigen Daten: DS18B20 Datenblatt

Sensorinstallation:

Folgen Sie dem obigen Diagramm und stellen Sie die Verbindungen her:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Daten ==> GPIO 4 (Standard für Bibliothek)

Installieren der Python-Bibliothek:

Als Nächstes installieren wir die Python-Bibliothek, die den Sensor verarbeitet:

sudo pip3 install w1thermsensor

Bevor Sie das Skript zum Testen des Sensors ausführen, prüfen Sie, ob die "1-Wire"-Schnittstelle in Ihrem RPi aktiviert ist (siehe Druckbildschirm oben)

Vergessen Sie nicht, Ihr RPi neu zu starten, nachdem Sie seine Konfiguration geändert haben

Testen des Sensors:

Zum Testen des Sensors kann ein einfaches Python-Skript verwendet werden:

Importzeit

from w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor() while True: temperature = ds18b20Sensor.get_temperature() print("Die Temperatur ist %s Celsius" % Temperatur) time.sleep(1)

Schritt 4: Installation des BMP180

Installation des BMP180
Installation des BMP180
Installation des BMP180
Installation des BMP180
Installation des BMP180
Installation des BMP180

Sensorübersicht:

Der BMP180 ist der Nachfolger des BMP085, einer neuen Generation hochpräziser digitaler Drucksensoren für Verbraucheranwendungen. Die extrem stromsparende Niederspannungselektronik des BMP180 ist für den Einsatz in Mobiltelefonen, PDAs, GPS-Navigationsgeräten und Outdoor-Geräten optimiert. Mit einem geringen Höhenrauschen von nur 0,25 m bei schneller Wandlungszeit bietet der BMP180 eine überragende Leistung. Die I2C-Schnittstelle ermöglicht eine einfache Systemintegration mit einem Mikrocontroller. Der BMP180 basiert auf piezoresistiver Technologie für EMV-Robustheit, hohe Genauigkeit und Linearität sowie Langzeitstabilität.

Das vollständige BMP-Datenblatt finden Sie hier: BMP180 - Digitaler Drucksensor

Sensorinstallation: Folgen Sie dem obigen Diagramm und stellen Sie die Verbindungen her:

  • Vin ==> 3.3V
  • GND ==> GND
  • SCL ==> GPIO 3
  • SDA ==> GPIO 2

Aktivieren der I2C-Schnittstelle

Gehen Sie zu RPi-Konfiguration und bestätigen Sie, dass die I2C-Schnittstelle aktiviert ist. Wenn nicht, aktivieren Sie es und starten Sie das RPi neu.

Verwendung des BMP180

Wenn alles in Ordnung ist und alles in Ordnung ist, können Sie jetzt Ihren Pi einschalten und sehen, was der BMP180 Ihnen über die Welt um Sie herum sagt.

Als erstes müssen Sie überprüfen, ob der Pi Ihren BMP180 erkennt. Versuchen Sie Folgendes in einem Terminalfenster:

sudo i2cdetect -y 1

Wenn der Befehl funktioniert hat, sollten Sie etwas Ähnliches wie der obige Terminaldruckbildschirm sehen, der anzeigt, dass sich der BMP180 auf Kanal '77' befindet.

Installieren der BMP180-Bibliothek:

Erstellen Sie ein Verzeichnis, um die Bibliothek zu installieren:

mkdir BMP180_Sensorcd BMP180_Sensor

Gehen Sie in Ihrem Browser zu Adafruit GITHub:

github.com/adafruit/Adafruit_Python_BMP

Laden Sie die Bibliothek herunter, indem Sie auf den Download-Zip-Link rechts klicken und das Archiv in Ihrem von Raspberry Pi erstellten Ordner entpacken. Gehen Sie dann in den erstellten Unterordner und führen Sie im Verzeichnis der Bibliothek folgenden Befehl aus:

sudo python3 setup.py installieren

Öffnen Sie Ihre Python-IDE und erstellen Sie ein Testprogramm und benennen Sie es, zum Beispiel BMP180Test.py

import Adafruit_BMP. BMP085 als BMP085sensor = BMP085. BMP085() print('Temp = {0:0.2f} *C'.format(sensor.read_temperature())) print('Pressure = {0:0.2f} Pa'. format(sensor.read_pressure())) print('Altitude = {0:0.2f} m'.format(sensor.read_altitude())) print('Sealevel Pressure = {0:0.2f} Pa'.format(sensor.read_sealevel_pressure()))

Führen Sie das Testprogramm aus:

python3 BMP180Test.py

Der obige Terminal-Druckbildschirm zeigt das Ergebnis.

Beachten Sie, dass der Druck in Pa (Pascal) angegeben wird. Sehen Sie sich den nächsten Schritt an, um dieses Gerät besser zu verstehen.

Schritt 5: Messen von Wetter und Höhe mit BMP180

Wetter- und Höhenmessung mit BMP180
Wetter- und Höhenmessung mit BMP180

Nehmen wir uns die Zeit, um ein wenig mehr darüber zu verstehen, was wir mit den BMP-Messwerten erhalten werden. Sie können diesen Teil des Tutorials überspringen oder später zurückkehren.

Wenn Sie mehr über Sensormesswerte erfahren möchten, gehen Sie bitte zu diesem großartigen Tutorial:

Der BMP180 wurde entwickelt, um den atmosphärischen Druck genau zu messen. Der atmosphärische Druck variiert sowohl mit dem Wetter als auch mit der Höhe.

Was ist Atmosphärendruck?

Die Definition des atmosphärischen Drucks ist eine Kraft, die die Luft um Sie herum auf alles ausübt. Das Gewicht der Gase in der Atmosphäre erzeugt Atmosphärendruck. Eine übliche Druckeinheit ist "Pfund pro Quadratzoll" oder psi. Wir verwenden hier die internationale Schreibweise Newton pro Quadratmeter, die als Pascal (Pa) bezeichnet wird.

Wenn Sie eine 1 cm breite Luftsäule nehmen würden, würde sie etwa 1 kg wiegen

Dieses Gewicht, das auf die Standfläche dieser Säule drückt, erzeugt den atmosphärischen Druck, den wir mit Sensoren wie dem BMP180 messen können. Da diese cm breite Luftsäule etwa 1 kg wiegt, beträgt der durchschnittliche Meeresspiegeldruck etwa 101325 Pascal oder besser 1013,25 hPa (1 hPa ist auch als Millibar - mbar bekannt). Dies wird pro 300 Höhenmeter, die Sie aufsteigen, um etwa 4% sinken. Je höher Sie werden, desto weniger Druck werden Sie sehen, da die Säule zum oberen Rand der Atmosphäre viel kürzer ist und daher weniger wiegt. Dies ist nützlich zu wissen, denn durch Messen des Drucks und etwas Mathematik können Sie Ihre Höhe bestimmen.

Der Luftdruck auf 3.810 Metern ist nur halb so hoch wie auf Meereshöhe.

Der BMP180 gibt den Absolutdruck in Pascal (Pa) aus. Ein Pascal ist ein sehr geringer Druck, ungefähr der Betrag, den ein Blatt Papier auf einem Tisch ausübt. Sie werden häufiger Messungen in Hektopascal sehen (1 hPa = 100 Pa). Die hier verwendete Bibliothek gibt Gleitkommawerte in hPa aus, die zufällig auch einem Millibar (mbar) entsprechen.

Hier einige Umrechnungen in andere Druckeinheiten:

  • 1 hPa = 100 Pa = 1 mbar = 0,001 bar
  • 1 hPa = 0,75006168 Torr
  • 1 hPa = 0,01450377 psi (Pfund pro Quadratzoll)
  • 1 hPa = 0,02953337 inHg (Zoll Quecksilbersäule)
  • 1 hpa = 0,00098692 atm (Standardatmosphären)

Temperatureffekte

Da die Temperatur die Dichte eines Gases beeinflusst und die Dichte die Masse eines Gases beeinflusst und die Masse den Druck beeinflusst (puh), ändert sich der Atmosphärendruck dramatisch mit der Temperatur. Piloten kennen dies als „Density Altitude“, was das Abheben an einem kalten Tag leichter macht als an einem heißen, da die Luft dichter ist und eine größere aerodynamische Wirkung hat. Um die Temperatur zu kompensieren, enthält der BMP180 einen recht guten Temperatursensor sowie einen Drucksensor.

Um eine Druckmessung durchzuführen, nehmen Sie zuerst eine Temperaturmessung vor und kombinieren diese dann mit einer Rohdruckmessung, um eine endgültige temperaturkompensierte Druckmessung zu erhalten. (Die Bibliothek macht das alles sehr einfach.)

Absolutdruck messen

Wenn Ihre Anwendung die Messung des Absolutdrucks erfordert, müssen Sie nur eine Temperaturmessung durchführen und dann eine Druckmessung durchführen (siehe Beispielskizze für Details). Die endgültige Druckanzeige erfolgt in hPa = mbar. Wenn Sie möchten, können Sie diese mit den obigen Umrechnungsfaktoren in eine andere Einheit umrechnen.

Beachten Sie, dass der absolute Druck der Atmosphäre sowohl mit Ihrer Höhe als auch mit den aktuellen Wettermustern variiert, die beide nützlich zu messen sind.

Wetterbeobachtungen

Der atmosphärische Druck an einem beliebigen Ort auf der Erde (oder überall mit Atmosphäre) ist nicht konstant. Die komplexe Wechselwirkung zwischen Erddrehung, Achsenneigung und vielen anderen Faktoren führt zu sich bewegenden Gebieten mit höherem und niedrigerem Druck, die wiederum die Wetterschwankungen verursachen, die wir jeden Tag sehen. Indem Sie auf Druckänderungen achten, können Sie kurzfristige Wetteränderungen vorhersagen. Ein sinkender Druck bedeutet beispielsweise normalerweise nasses Wetter oder ein herannahendes Gewitter (ein Tiefdrucksystem zieht ein). Steigender Druck bedeutet in der Regel, dass sich klares Wetter nähert (ein Hochdrucksystem bewegt sich durch). Denken Sie jedoch daran, dass der Luftdruck auch mit der Höhe variiert. Der Absolutdruck in meinem Haus, Lo Barnechea in Chile (Höhe 950m) wird immer niedriger sein als der Absolutdruck in San Francisco zum Beispiel (weniger als 2 Meter, fast Meereshöhe). Wenn Wetterstationen nur ihren Absolutdruck melden würden, wäre es schwierig, Druckmessungen von einem Ort zum anderen direkt zu vergleichen (und groß angelegte Wettervorhersagen hängen von Messungen von so vielen Stationen wie möglich ab).

Um dieses Problem zu lösen, entfernen Wetterstationen immer die Auswirkungen der Höhe aus ihren gemeldeten Druckmesswerten, indem sie den äquivalenten festen Druck mathematisch addieren, um den Eindruck zu erwecken, dass die Messwerte auf Meereshöhe gemessen wurden. Wenn Sie dies tun, wird ein höherer Wert in San Francisco als in Lo Barnechea immer auf das Wettergeschehen und nicht auf die Höhe zurückzuführen sein.

Dazu gibt es in der Bibliothek eine Funktion namens sea level(P, A). Dies nimmt den absoluten Druck (P) in hPa und die aktuelle Höhe der Station (A) in Metern und entfernt die Auswirkungen der Höhe aus dem Druck. Sie können die Ausgabe dieser Funktion verwenden, um Ihre Wetterwerte direkt mit anderen Stationen auf der ganzen Welt zu vergleichen.

Bestimmung der Höhe

Da der Druck mit der Höhe variiert, können Sie die Höhe mit einem Drucksensor messen (mit einigen Einschränkungen). Der durchschnittliche Druck der Atmosphäre auf Meereshöhe beträgt 1013,25 hPa (oder mbar). Dieser fällt auf Null ab, wenn Sie in Richtung des Vakuums des Weltraums aufsteigen. Da die Kurve dieses Abfalls gut verstanden ist, können Sie den Höhenunterschied zwischen zwei Druckmessungen (p und p0) mithilfe einer bestimmten Gleichung berechnen.

Wenn Sie den Druck auf Meereshöhe (1013,25 hPa) als Basisdruck (p0) verwenden, ist die Ausgabe der Gleichung Ihre aktuelle Höhe über dem Meeresspiegel. In der Bibliothek gibt es eine Funktion namens height(P, P0), mit der Sie die "berechnete Höhe" abrufen können.

Die obige Erklärung wurde aus dem BMP 180 Sparkfun-Tutorial extrahiert.

Schritt 6: Die komplette HW

Das komplette HW
Das komplette HW

Schritt 7: Senden von Daten an ThingSpeak

Senden von Daten an ThingSpeak
Senden von Daten an ThingSpeak

An dieser Stelle haben wir gelernt, wie man das RPi so vorbereitet, dass es Daten von allen 3 Sensoren erfasst und auf dem Terminal ausdruckt. Jetzt ist es an der Zeit zu sehen, wie diese Daten an unsere IoT-Plattform ThingSpeak gesendet werden.

Lass uns anfangen!

Zuerst müssen Sie ein Konto bei ThinkSpeak.com haben

Folgen Sie den Anweisungen zum Erstellen eines Kanals und notieren Sie sich Ihre Kanal-ID und den API-Schlüssel schreiben

Laden Sie das Python-Skript von meinem GitHub herunter: localData ToTS_v1_EXT.py

Kommentieren wir die wichtigsten Teile des Codes:

Lassen Sie uns zunächst die ThingSpeak-Bibliothek importieren, den WiFi-Client definieren und Ihre lokalen Router- und Thinkspeak-Anmeldeinformationen definieren:

Dinge importieren

Es gibt mehrere Möglichkeiten, mit ThingSpeak zu kommunizieren, der einfachste Weg wäre die Verwendung der Client-Bibliothek für die Thingspeak.com-API, die von Mikolaj Chwaliz und Keith Ellis entwickelt wurde.

Die Bibliothek kann von https://github.com/mchwalisz/thingspeak heruntergeladen werden oder PIP auf dem Terminal verwenden:

sudo pip3 installiere Thingspeak

Aktualisieren Sie als Nächstes innerhalb des Skripts die Anmeldeinformationen für den ThingSpeak-Kanal

chId = 9999999 # Geben Sie Ihre Kanal-ID ein

tsKey='MIT IHREM KANAL-SCHREIBSCHLÜSSEL EINGEBEN' tsUrl='https://api.thingspeak.com/update' ts = thingspeak. Channel(chId, tsUrl, tsKey)

Lassen Sie uns nun die 3 Sensoren initialisieren:

# DS18B20 1-Wire-Bibliothek

from w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor() # Standardmäßig wird GPIO 4 von der Bibliothek verwendet # DHT22 Bibliotheksimport Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 Bibliotheksimport Adafruit_BMP. BMP085 als BMP085 bmp180Sensor = BMP5085 Sie sollten die tatsächliche Höhe definieren, in der sich Ihre Wetterstation befindet, indem Sie die globale Variable "altReal" aktualisieren. In meinem Fall befindet sich meine Station auf 950m über dem Meeresspiegel

global altReal

altReal = 950

Sobald die tatsächliche Höhe der Station als Eingabe eingegeben wurde, können wir mit der Funktion bmp180GetData(altitude) den Absolutdruck, den Meeresspiegeldruck, die Temperatur und die Höhe erhalten:

def bmp180GetData(Höhe):

temp = bmp180Sensor.read_temperature() pres = bmp180Sensor.read_pressure() alt=bmp180Sensor.read_altitude() presSeaLevel = pres / pow(1.0 - height/44330.0, 5.255) temp = round (temp, 1) pres = round (pres/100.), 2) # absoluter Druck in hPa (oder mbar) alt=rund (alt) presSeaLevel = rund (presSeaLevel/100, 2) # absoluter Druck in hPa (oder mbar) Rücklauftemp, pres, alt, presSeaLevel

Die Funktion getLocalData() gibt alle lokalen Daten zurück, die von unserer Station erfasst werden:

def getLocalData():

global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Uhrzeit des Lesens jetzt abrufen = datetime.datetime.now() timeString = now.strftime("%Y-%m-%d %H:%M") # Außentemperatur lesen (1 Meter Abstand) tempExt = round(ds18b20Sensor.get_temperature(), 1) tempLab, presAbs, altLab, presSL = bmp180GetData(altReal) humDHT, tempDHT = Adafruit_DHT.read_retry(DHT22Sensor, DHTpin) wenn humDHT nicht None ist und tempDHT ist nicht None: humLab = round (humDHT

Sobald Sie alle Daten durch die oben genannten Funktionen erfasst haben, müssen Sie diese an ThingSpeak senden. Sie tun dies mit der Funktion sendDataTs():

def sendDataTs():

data = { "field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab } ts.update(data) print ("[INFO] Daten für 5 Felder gesendet: ", tempLab, tempExt, humLab, presSL, altLab)

Nachdem Ihre Kanaldaten aktualisiert wurden, speichern Sie das Skript und führen Sie es auf Ihrem Terminal aus:

sudo Python3 localData_ToTs_v1_EXT.py

Über Kommunikationsprotokolle

Beachten Sie, dass mit der "thingspeak library" die "requests library" importiert wird, d. h. eine Apache2-lizenzierte HTTP-Bibliothek, die in Python geschrieben ist. Die offizielle Request Installation Dokumentation finden Sie hier:

docs.python-requests.org/en/latest/user/install/

Bei Bedarf können Sie vor dem Ausführen Ihres Skripts überprüfen, ob die Anforderungsbibliothek installiert ist:

sudo pip3 Installationsanfragen

Optional können Sie MTTQ als Methode verwenden, um Daten an ThingSpeak zu senden. MQTT unterscheidet sich einmal von HTTP. Es ist speziell auf geringes Gewicht ausgelegt und für eingebettete Geräte mit geringer RAM- und CPU-Leistung gedacht. Außerdem verwendet MQTT in den meisten Fällen weniger Bandbreite.

Weitere Informationen finden Sie in diesem Tutorial: Aktualisieren Sie einen ThingSpeak-Kanal mit MQTT auf einem Raspberry Pi.

Schritt 8: Senden von Remote-Daten an ThingSpeak mit ESP8266

Senden von Remote-Daten an ThingSpeak mit ESP8266
Senden von Remote-Daten an ThingSpeak mit ESP8266
Senden von Remote-Daten an ThingSpeak mit ESP8266
Senden von Remote-Daten an ThingSpeak mit ESP8266

Für diesen Schritt verwenden wir dieselbe HW, die in meinem Tutorial erklärt wurde:

IOT LEICHT GEMACHT: FERNBEDIENUNG VON WETTERDATEN: UV- UND LUFTTEMPERATUR & FEUCHTIGKEIT

Der Code, den wir hier verwenden, ist im Grunde derselbe, der in diesem Tutorial verwendet wird. Kommentieren wir die wichtigsten Teile des Codes:

Rufen wir zuerst die ESP8266-Bibliothek auf, definieren den WiFi-Client und definieren Ihre lokalen Router- und Thinkspeak-Anmeldeinformationen:

/* KnotenMCU ESP12-E */

#WiFiClient-Client einschließen; const char* MY_SSID = "MIT IHRER SSDID EINGEBEN"; const char* MY_PWD = "MIT IHREM PASSWORT EINGEBEN"; /* Thinkspeak */ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY ="EINGABE MIT IHREM SCHREIBSCHLÜSSEL";

Zweitens fügen wir eine sehr wichtige Bibliothek für IoT-Projekte hinzu: SimpleTimer.h:

/* TIMER */

#include SimpleTimer-Timer;

Drittens werden wir während setup() die serielle Kommunikation initiieren, die Funktion connectWiFi() aufrufen und die Timer definieren. Beachten Sie, dass die Codezeile: timer.setInterval(60000L, sendDataTS); ruft die Funktion sendDataTS() alle 60 Sekunden auf, um Daten in den ThinkSpeak-Kanal hochzuladen.

Void-Setup ()

{ … Serial.begin(115200); Verzögerung(10); … connectWifi(); Timer.setInterval(60000L, sendDataTS); … }

Zu guter Letzt muss während der Schleife () nur der Befehl gestartet werden, um den Timer zu starten, und das war's!

Leere Schleife ()

{ … timer.run(); // Initiiert SimpleTimer }

Unten sehen Sie die beiden wichtigen Funktionen, die zur Handhabung der Thinkspeak-Kommunikation verwendet werden:

ESP12-E-Verbindung mit Ihrem WLAN-Netzwerk:

/***************************************************

* WLAN verbinden ********************************************* ***/void connectWifi () {Serial.print ("Verbindung zu "+ * MY_SSID); WiFi.begin(MY_SSID, MY_PWD); Während (WiFi.status () != WL_CONNECTED) { Verzögerung (1000); Serial.print("."); } Serial.println(""); Serial.println ("WiFi verbunden"); Serial.println(""); }

ESP12-E sendet Daten an ThinkSpeak:

***************************************************

* Senden von Daten an den Thinkspeak-Kanal ************************************************ ******/ void sendDataTS(void) { if (client.connect(TS_SERVER, 80)) { String postStr = TS_API_KEY; postStr += "&field6="; postStr += String(temp); postStr += "&field7="; postStr += String(brummen); postStr += "&field8="; postStr += String(dataSensorUV); postStr += "\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Verbindung: schließen\n"); client.print("X-THINGSPEAKAPIKEY: " + TS_API_KEY + "\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Inhaltslänge: "); client.print (postStr.length()); client.print("\n\n"); client.print(postStr); Verzögerung (1000); } gesendet++; client.stop(); }

Den kompletten Code findet ihr auf meinem GitHub: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Sobald Sie den Code auf Ihre NodeMCU hochgeladen haben. Lassen Sie uns eine externe Batterie anschließen und einige Messungen unter der Sonne durchführen. Ich stelle die Remote Station auf das Dach und beginne mit der Datenerfassung auf ThingSpeak.com, wie in den obigen Fotos gezeigt.

Schritt 9: Abschließende Hinweise

Abschließende Anmerkungen
Abschließende Anmerkungen

Der Hauptzweck dieses Tutorials bestand darin, zu zeigen, wie Sie den Raspberry Pi mit ThingSpeak verbinden. Dies ist großartig, um Daten zu erfassen und auf einer IoT-Plattform zu protokollieren.

Bei dieser Gelegenheit haben wir auch Daten an diesen bestimmten Kanal gesendet und sie mit einem ESP8266 von einer Remote-Station erfasst. Dieser Ansatz ist in Ordnung, aber nicht der beste. Da wir eine "asynchrone" Operation haben, versuchen manchmal sowohl RPi als auch ESP8266 gleichzeitig (oder mit einem kleinen Intervall) zu loggen, was von ThingSpeak widerlegt wird. Ideal wäre es, wenn der ESP8266 Daten lokal an den Raspberry Pi sendet und der letzte für die Verarbeitung aller Daten verantwortlich ist. Dabei könnte der "Hauptbahnhof" (Raspberry Pi) 3 Dinge tun:

  • Alle Daten in einer lokalen Datenbank protokollieren
  • Präsentieren Sie alle Daten auf einer lokalen Webseite (mit Flask, wie im obigen Foto gezeigt)
  • Alle Daten gleichzeitig an ThingSpeak senden.

In einem zukünftigen Tutorial werden wir diese Optionen untersuchen.

Schritt 10: Fazit

Abschluss
Abschluss

Wie immer hoffe ich, dass dieses Projekt anderen helfen kann, ihren Weg in die spannende Welt der Elektronik zu finden!

Für Details und den endgültigen Code besuchen Sie bitte mein GitHub-Depot: RPi-NodeMCU-Weather-Station

Für weitere Projekte besuchen Sie bitte meinen Blog: MJRoBot.org

Bleiben Sie dran! Im nächsten Tutorial werden wir Daten von einer entfernten Wetterstation an eine zentrale senden, die auf einem Raspberry Pi Webserver basiert:

Bild
Bild

Saludos aus dem Süden der Welt!

Wir sehen uns in meinem nächsten instructable!

Dankeschön, Marcelo

Empfohlen: