ESP32 Tutorial 48/55 - Fernüberwachung der Temperatur und LED-Steuerung MQTT | SunFounder's ESP32 IoT-Kit
In diesem Tutorial werden wir untersuchen, wie man das ESP32-Modul in Kombination mit der ESP32-Erweiterungsplatine von SunFounder nutzen kann, um Temperatur und Luftfeuchtigkeit aus der Ferne über die Adafruit IO-Plattform zu überwachen. Darüber hinaus werden wir die Funktionalität implementieren, um eine LED über eine Weboberfläche zu steuern. Am Ende dieses Projekts wird es Ihnen möglich sein, Echtzeitdaten zu Temperatur und Luftfeuchtigkeit einzusehen und eine LED über Ihren Browser ein- und auszuschalten.
Dieses Projekt nutzt das MQTT-Protokoll für eine effiziente Kommunikation zwischen dem ESP32 und dem Adafruit IO-Dienst. MQTT ist leichtgewichtig und gut geeignet für IoT-Anwendungen, was es uns ermöglicht, Sensordaten einfach zu veröffentlichen und Befehle zur LED-Steuerung zu abonnieren. Für weitere Erläuterungen zum Code und zur Verkabelung schauen Sie sich unbedingt das begleitende Video zu diesem Tutorial an (im Video bei :00).
Hardware erklärt
Die Hauptkomponenten für dieses Projekt umfassen den ESP32-Mikrocontroller, einen DHT11-Temperatur- und Feuchtigkeitssensor sowie eine LED. Der ESP32 ist ein leistungsstarker Mikrocontroller, der über integrierte Wi-Fi- und Bluetooth-Funktionen verfügt, wodurch er eine ideale Wahl für IoT-Projekte ist. Er kann mehrere Aufgaben erledigen und nahtlos mit dem Internet verbunden werden.
Der DHT11-Sensor ist verantwortlich für die Messung von Temperatur und Feuchtigkeit. Er gibt digitale Signale aus, die vom ESP32 gelesen werden können. Die LED dient als Indikator und kann aus der Ferne gesteuert werden, um die Effektivität des MQTT-Protokolls bei der Verwaltung von Geräten über das Internet zu demonstrieren.
Datenblattdetails
| Hersteller | Adafruit |
|---|---|
| Teilenummer | DHT11 |
| Logik/IO-Spannung | 3,3 V |
| Versorgungsspannung | 3,3 V |
| Ausgangsstrom (pro Kanal) | 20 mA |
| Spitzenstrom (pro Kanal) | 50 mA |
| PWM-Frequenzleitfaden | N/A |
| Eingangslogikschwellen | 0,3 V (niedrig), 0,7 V (hoch) |
| Spannungsabfall / RDS(on)/ Sättigung | N/A |
| Thermische Grenzen | 0 bis 50 °C |
| Paket | 3-polig |
| Hinweise / Varianten | Verwenden Sie DHT22 für höhere Genauigkeit. |
- Stellen Sie die korrekte Verkabelung sicher, um Schäden zu vermeiden.
- Verwenden Sie einen 220-Ohm-Widerstand mit der LED zur Strombegrenzung.
- Verwenden Sie bei Bedarf Pull-up-Widerstände für den Datenpin des DHT11.
- Überprüfen Sie die Wi-Fi-Anmeldeinformationen auf Groß- und Kleinschreibung.
- Überwachen Sie die serielle Ausgabe zur Fehlersuche bei Verbindungsproblemen.
- Halten Sie MQTT-Themen einzigartig, um Konflikte zu vermeiden.
- Testen Sie die Sensorwerte, um sicherzustellen, dass sie gültig sind.
- Seien Sie vorsichtig mit der Reaktionszeit des DHT11; es kann einige Zeit dauern, bis die Werte stabil sind.
LED= Steuer-LED;temperature= Temperaturdaten veröffentlichen;humidity= veröffentliche Feuchtigkeitsdaten.
Verdrahtungsanweisungen
Um die Komponenten zu verdrahten, beginnen Sie mit der Verbindung des DHT11-Sensors. Verbinden Sie den linken Pin des DHT11 mit der 3,3V-Stromschiene auf dem Breadboard mithilfe eines roten Drahtes. Der mittlere Pin des DHT11 sollte mit Pin 13 des ESP32 mittels eines gelben Drahts verbunden werden. Schließlich verbinden Sie den rechten Pin des DHT11 mit der Masseführung mithilfe eines blauen Drahts.
Als Nächstes verbinden Sie für die LED die Anode (langer Fuß) über einen 220 Ohm Widerstand mit Pin 15 des ESP32. Verbinden Sie die Kathode (kurzer Fuß) direkt mit der Masseleitung auf dem Breadboard. Stellen Sie sicher, dass alle Verbindungen sicher sind, und überprüfen Sie, ob lose Drähte vorhanden sind.
Dashboard einrichten
-
BesuchenAdafruit IO, dann klicken Sie aufJetzt kostenlos startenein kostenloses Konto erstellen.

-
Füllen Sie das Formular aus, um ein Konto zu erstellen.

-
Nachdem Sie ein Adafruit-Konto erstellt haben, müssen Sie Adafruit io erneut öffnen. Klicken Sie auf dieDashboards, dann klicken Sie aufNeues Dashboard.

-
Erstellen Sie einNeues Dashboard.

-
Geben Sie die neu erstellte einDashboardund erstelle einen neuen Block.

-
Erstellen Sie 1UmschaltenBlock.

-
Als nächstes müssen Sie hier ein neues Feed erstellen. Dieser Schalter wird verwendet, um die LED zu steuern, und wir werden dieses Feed "LED" nennen.

-
Überprüfen Sie dieLEDfüttern, dann zum nächsten Schritt übergehen.

-
Vervollständigen Sie die Blockeinstellungen (hauptsächlich Blocktitel, An-Text und Aus-Text), und klicken Sie dann auf dieBlock erstellenTaste unten rechts, um abzuschließen.

-
Wir müssen auch zwei erstellen.Textblöckenächste. Sie werden verwendet, um Temperatur und Luftfeuchtigkeit anzuzeigen. Erstellen Sie also zwei Feeds mit den NamenTemperaturundLuftfeuchtigkeit.

-
Nach der Erstellung sollte Ihr Dashboard ungefähr so aussehen:

-
Sie können das Layout anpassen, indem Sie dieLayout bearbeitenOption auf dem Dashboard.

-
Klicken Sie aufAPI-SCHLÜSSEL, und Sie werden Ihren Benutzernamen sehen undAPI-SCHLÜSSELNotieren Sie diese, da Sie sie für Ihren Code benötigen.

Code Beispiele & Anleitung
Der Code beginnt mit dem Einbinden der notwendigen Bibliotheken, dem Einrichten der WLAN-Zugangsdaten und der Definition der MQTT-Parameter. Wichtige Kennungen wieAIO_USERNAMEundAIO_KEYwerden verwendet, um sich beim Adafruit IO-Dienst zu authentifizieren.
#define AIO_USERNAME "YourUsername"
#define AIO_KEY "YourKey"Diese Zeilen definieren Ihren Adafruit IO-Benutzernamen und -Schlüssel, die für die Verbindung zum MQTT-Broker unerlässlich sind. Stellen Sie sicher, dass diese Werte korrekt sind, um eine erfolgreiche Verbindung herzustellen.
In dersetup()Die Funktion, die Wi-Fi-Verbindung wird initialisiert und der MQTT-Client wird mit dem Root-CA-Zertifikat für eine sichere Kommunikation eingerichtet.
WiFi.begin(WLAN_SSID, WLAN_PASS);
client.setCACert(adafruitio_root_ca);Dieser Code verbindet den ESP32 mit dem angegebenen Wi-Fi-Netzwerk und legt das Root-CA für sichere MQTT-Verbindungen fest. Eine ordnungsgemäße Handhabung dieser Verbindungen ist entscheidend für eine zuverlässige Datenübertragung.
Schließlich, dasloop()Die Funktion verwaltet die MQTT-Verbindung und veröffentlicht Temperatur- und Feuchtigkeitsmessungen in regelmäßigen Abständen.
mqtt.processPackets(5000);Diese Zeile ermöglicht es dem ESP32, eingehende Nachrichten für abonnierte Themen zu verarbeiten, sodass das Gerät auf Befehle, die von der Weboberfläche gesendet werden, reaktionsfähig bleibt.
Für den vollständigen Code verweisen Sie bitte auf das gesamte Programm, das unter dem Artikel geladen ist.
Demonstration / Was Sie erwarten können
Bei erfolgreichem Setup sollten Sie in Ihrem Adafruit IO-Dashboard Echtzeitaktualisierungen der Temperatur und Luftfeuchtigkeit sehen. Sie können auch die LED über die Weboberfläche ein- und ausschalten. Wenn die LED nicht wie erwartet reagiert, überprüfen Sie Ihre Verkabelung und stellen Sie sicher, dass die MQTT-Themenbezeichnungen mit denen im Code definierten übereinstimmen.
Seien Sie sich bewusst, dass bestimmte MQTT-Verbindungsfehler aufgrund abgelaufener Zertifikate auftreten können. Stellen Sie sicher, dass Sie das neueste Root-CA-Zertifikat in Ihrem Code haben, um diese Probleme zu vermeiden (im Video um 15:30).
Video-Zeiten
- 00:00 Start
- 1:50 Einführung in das Projekt
- 3:16 Was ist MQTT
- 6:36 Adafruit IO Einrichtung
- 11:13 Verdrahtung
- 13:38 Arduino-Code erklärt
- 22:03 Auswahl des ESP32-Boards und des COM-Ports
- 23:44 Projektdemonstration
- 27:05 Dashboard wird aktualisiert
/*
* Adafruit MQTT-Bibliothek ESP32 Adafruit IO SSL/TLS-Beispiel
*
* Verwenden Sie die neueste Version des ESP32 Arduino Kernels:
* https://github.com/espressif/arduino-esp32
*
* Funktioniert hervorragend mit Adafruit Huzzah32 Feather und Breakout Board:
* https://www.adafruit.com/product/3405
* https://www.adafruit.com/products/4172
*
* Adafruit investiert Zeit und Ressourcen in die Bereitstellung dieses Open-Source-Codes, bitte unterstützen Sie Adafruit und Open-Source-Hardware, indem Sie Produkte von Adafruit kaufen!
*
* Geschrieben von Tony DiCola für Adafruit Industries.
* Modifiziert von Brent Rubell für Adafruit Industries.
* MIT-Lizenz, aller obiger Text muss in jeglicher Redistribution enthalten sein.
*/
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/*
* WiFi Zugangspunkt *********************************/
*
* #define WLAN_SSID "SSID"
* #define WLAN_PASS "PASSWORD"
*
* /************************* Adafruit.io Einrichtung
*/
#define AIO_SERVER "io.adafruit.com"
// Port 8883 für MQTTS verwenden
#define AIO_SERVERPORT 8883
// Adafruit IO Kontokonfiguration
// Um diese Werte zu erhalten, besuchen Sie https://io.adafruit.com und klicken Sie auf Aktiver Schlüssel.
// #define AIO_USERNAME "IHR_ADAFRUIT_IO_BENUTZERNAME"
// #define AIO_KEY "IHREN_ADAFRUIT_IO_SCHLÜSSEL"
#define AIO_USERNAME "JimmyKernel"
#define AIO_KEY "aio_Mxiv12i74b5jKfKNSKLYjlhPmoHC"
/*
* Global State (das müssen Sie nicht ändern!) ******************/
*
* // WiFiFlientSecure für SSL/TLS Unterstützung
* WiFiClientSecure client;
*
* // Setup der MQTT-Client-Klasse, indem der WiFi-Client sowie die MQTT-Server- und Anmeldedaten übergeben werden.
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // io.adafruit.com Root-CA
* const char* adafruitio_root_ca = \
* "-----BEGIN CERTIFICATE-----\n"
* "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
* "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
* "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
* "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
* "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
* "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
* "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
* "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
* "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
* "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
* "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
* "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
* "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
* "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
* "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
* "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
* "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
* "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
* "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
* "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
* "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
* "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
* "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
* "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
* "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
* "-----END CERTIFICATE-----\n";
*/
// Richten Sie einen Feed mit dem Namen 'test' für die Veröffentlichung und 'test2' für das Abonnieren ein.
// Hinweis: MQTT-Pfade für AIO folgen der Form: <Benutzername>/feeds/<Feedname>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
Adafruit_MQTT_Publish humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");
/*
* Adafruit MQTT Grundkurs 1
* Siehe Videoanleitung für diesen Code auf YouTube https://youtu.be/M9BQweAsHJM
* Ressourcenseite für diese Lektion und den Code:
* 📚⬇️ Download- und Ressourcenseite https://robojax.com/RJT670
* Tutorial von https://youTube.com/@robojax
*
* Adafruit MQTT Bibliothek ESP32 Adafruit IO SSL/TLS Beispiel
*
* Verwenden Sie die neueste Version des ESP32 Arduino Kernels:
* https://github.com/espressif/arduino-esp32
*
* Funktioniert hervorragend mit dem Adafruit Huzzah32 Feather und Breakout Board:
* https://www.adafruit.com/product/3405
* https://www.adafruit.com/products/4172
*
* Adafruit investiert Zeit und Ressourcen in die Bereitstellung dieses Open-Source-Codes,
* bitte unterstützen Sie Adafruit und Open-Source-Hardware, indem Sie
* Produkte von Adafruit kaufen!
*
* Geschrieben von Tony DiCola für Adafruit Industries.
* Modifiziert von Brent Rubell für Adafruit Industries
* MIT-Lizenz, alle obigen Texte müssen in jeder Weiterverbreitung enthalten sein
* /
*
* /// ref: https://www.electronicwings.com/esp32/esp32-mqtt-client
*/
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/*
* WiFi Access Point *********************************/
*
* #define WLAN_SSID "dars"
* #define WLAN_PASS "5152535455"
*
* /************************* Adafruit.io Setup
*/
#define AIO_SERVER "io.adafruit.com"
// Verwendung des Ports 8883 für MQTTS
#define AIO_SERVERPORT 8883
// Adafruit IO Kontokonfiguration
// (zum Abrufen dieser Werte besuchen Sie https://io.adafruit.com und klicken Sie auf Aktiver Schlüssel)
// #define AIO_USERNAME "DEIN_ADAFRUIT_IO_BENUTZERNAME"
// #define AIO_KEY "DEIN_ADAFRUIT_IO_SCHLÜSSEL"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_wCyL33EVKLcGoAotGNEQ4dGQYOLZ"
/*
* Globale Zustände (dies muss nicht geändert werden!) ******************/
*
* // WiFiFlientSecure für SSL/TLS-Unterstützung
* WiFiClientSecure client;
*
* // Setup der MQTT-Client-Klasse durch Übergabe des WiFi-Clients und der MQTT-Server- und Anmeldedaten.
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // io.adafruit.com Root CA
* const char* adafruitio_root_ca =
* "-----BEGIN CERTIFICATE-----\n"
* "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"
* "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
* "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n"
* "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n"
* "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
* "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n"
* "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n"
* "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n"
* "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n"
* "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n"
* "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n"
* "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n"
* "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n"
* "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n"
* "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n"
* "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n"
* "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n"
* "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"
* "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"
* "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"
* "-----END CERTIFICATE-----\n";
*
* /****************************** Feeds
*/
// Richten Sie einen Feed namens 'test' zum Veröffentlichen und 'test2' zum Abonnieren ein.
// Hinweis: Die MQTT-Pfade für AIO folgen der Form: <benutzername>/feeds/<feedname>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
// Adafruit_MQTT_Publish luftfeuchtigkeit = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/luftfeuchtigkeit");
// Adafruit_MQTT_Publish temperatur = Adafruit_MQTT_Publish(&mqtt, AIO_BENUTZERNAME "/feeds/temperatur");
Common Course Links
Common Course Files
Ressourcen & Referenzen
-
Dokumentation
Dateien📁
Keine Dateien verfügbar.