Inhaltsverzeichnis:
- Schritt 1: Hardware- und Softwarespezifikation
- Schritt 2: Erstellen eines Captive Portals
- Schritt 3: Bereitstellung von WLAN- und UbiDots-Anmeldeinformationen
- Schritt 4: Veröffentlichen von Sensormesswerten in UbiDots
- Schritt 5: Visualisierung der Daten
- Schritt 6: Gesamtcode
Video: UbiDots-Anschließen eines ESP32 und Veröffentlichen mehrerer Sensordaten - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
ESP32 und ESP 8266 sind im IoT-Bereich sehr bekannte SoCs. Diese sind eine Art Segen für die IoT-Projekte. ESP 32 ist ein Gerät mit integriertem WiFi und BLE. Geben Sie einfach Ihre SSID, Ihr Passwort und Ihre IP-Konfigurationen ein und integrieren Sie die Dinge in die Cloud. Hier in diesem anweisbaren werden wir über einige der grundlegenden Begriffe des IoT wie IoT-Plattform, MQTT, Captive Portale usw. nachdenken. Also lassen Sie uns es durchgehen
- Die IoT-Architektur besteht in sehr einfachen Worten aus einem eingebetteten Gerät und einer IoT-Plattform, um das Gerät in die Cloud zu stellen. Hier verwenden wir die UbiDots IoT-Plattform, um die Sensordaten zu visualisieren.
- Die Verwaltung der IP-Einstellungen und Benutzeranmeldeinformationen kann dem Benutzer Kopfschmerzen bereiten. Was ist, wenn der Benutzer die WLAN-Anmeldeinformationen ändern möchte? Was ist, wenn der Benutzer die DHCP/Statische IP-Einstellungen ändern möchte? Das Flashen des ESP32 jedes Mal ist nicht zuverlässig und nicht einmal die Lösung für diese Probleme. Wir werden also das Captive-Portal durchlaufen, um die WLAN-Anmeldeinformationen und andere Konfigurationen zu speichern.
- MQTT wird mittlerweile zu einem sehr gebräuchlichen Begriff in der IoT-Welt. Aufgrund der schnellen, robusten und schlanken Architektur hat es Request and Responses (HTTP) von Publish and Subscribe überholt.
Hier in diesem instructable werden wir demonstrieren.
- Geben Sie WiFi- und MQTT-Anmeldeinformationen über das Captive Portal an.
- Veröffentlichen und Abonnieren mehrerer Sensordaten auf UbiDots.
- Lesen der Sensordaten von drahtlosen Temperatur- und Feuchtigkeitssensoren.
- Hosten eines Webformulars vom ESP32.
- Lesen und Schreiben von SPIFFS ESP32.
Schritt 1: Hardware- und Softwarespezifikation
- ESP32 WLAN/BLE
- Kabelloser Temperatur- und Feuchtigkeitssensor
Softwarespezifikation
Arduino-IDE
Schritt 2: Erstellen eines Captive Portals
Ein Captive Portal ist eine Webseite, die neu verbundenen Benutzern angezeigt wird, bevor ihnen ein breiterer Zugriff auf Netzwerkressourcen gewährt wird. Hier stellen wir drei Webseiten bereit, um zwischen DHCP- und statischen IP-Einstellungen auszuwählen. Wir können die IP-Adresse für ESP auf zwei Arten definieren.
- DHCP-IP-Adresse - Dies ist eine Möglichkeit, dem Gerät die IP-Adresse dynamisch zuzuweisen. Die Standard-IP-Adresse des ESP lautet 192.168.4.1
- Die statische IP-Adresse – weist unserem Netzwerkgerät eine permanente IP-Adresse zu. Um dem Gerät die statische IP bereitzustellen, müssen wir die IP-Adresse, die Gateway-Adresse und die Subnetzmaske definieren.
Die erste Webseite wird unter 192.168.1.77 gehostet. Hier stehen dem Benutzer die Optionsfelder zur Auswahl zwischen DHCP- und statischen IP-Einstellungen zur Verfügung. Auf der nächsten Webseite müssen wir die IP-bezogenen Informationen bereitstellen, um fortzufahren.
HTML Quelltext
Den HTML-Code für Webseiten finden Sie in diesem Github-Repository. Sie können jede IDE oder jeden Texteditor wie Sublime oder Notepad++ verwenden, um HTML-Webseiten zu erstellen.
- Erstellen Sie zunächst eine HTML-Webseite mit zwei Optionsfeldern, um zwischen DHCP- und statischen IP-Einstellungen zu wählen.
- Erstellen Sie nun die Schaltfläche zum Senden Ihrer Antwort
- Geben Sie den Optionsfeldern einen Namen.
- Die ESP-Webserverklasse nimmt diese Namen als Argumente und erhält die Antwort der Optionsfelder mit diesen Argumenten
- Fügen Sie nun eine Schaltfläche ' SUBMIT ' ein, um die Antwort an das Gerät zu senden. Auf den anderen Webseiten haben wir Textfelder.
- Geben Sie den Namenswert und den Eingabetyp in das Textfeld ein und fügen Sie eine Senden-Schaltfläche hinzu, um die Antwort ' SUBMIT ' zu senden.
- Erstellen Sie eine Schaltfläche 'RESET', um den Inhalt des Textfelds zurückzusetzen.
Schritt 3: Bereitstellung von WLAN- und UbiDots-Anmeldeinformationen
Das Hauptproblem tritt bei der Verwaltung der WLAN-Anmeldeinformationen auf. Obwohl wir dafür eine WiFiMulti-Bibliothek haben, können wir dem Gerät mehrere SSIDs und Passwörter geben und das Gerät wird sich mit dem verfügbaren Netzwerk verbinden. Aber was ist, wenn das verfügbare Netzwerk nicht in der WiFiMulti-Liste enthalten ist. Das permanente Flashen des ESP32-Geräts ist keine zuverlässige Lösung.
Um dieses Problem zu beheben, hosten wir eine Webseite, auf der der Benutzer die SSID und das Passwort des verfügbaren Netzwerks übermitteln kann. Es funktioniert wie folgt.
- Die Webseite wird unter der statischen IP oder DHCP-IP gehostet, die vom Benutzer aus dem Captive-Portal ausgewählt wurde
- Diese Webseite enthält Textfelder zur Eingabe von SSID, Passwort und UBIDOTS-Token-ID, um das Gerät mit UbiDots zu verbinden.
- Geben Sie die SSID und das Passwort Ihres lokalen WLANs in die Eingabefelder ein, geben Sie die Token-ID von UbiDot ein und geben Sie SUBMIT. ein
- Diese Anmeldeinformationen werden im EEPROM von ESP32 gespeichert
- Nach 60 Sekunden wird das Gerät automatisch vom AP getrennt
-
Wenn Sie das Gerät das nächste Mal einschalten, muss der Benutzer dieses Verfahren nicht befolgen. Das Gerät ruft automatisch die Benutzeranmeldeinformationen aus dem EEPROM ab und fährt mit der Veröffentlichung der Sensorwerte in UbiDots fort.
Schritt 4: Veröffentlichen von Sensormesswerten in UbiDots
Hier verwenden wir drahtlose Temperatur- und Feuchtigkeitssensoren mit dem ESP 32-Gerät, um die Temperatur- und Feuchtigkeitsdaten zu erhalten. Wir senden die Daten über das MQTT-Protokoll an UbiDots. MQTT folgt einem Publish-and-Subscribe-Mechanismus anstelle von Request und Response. Es ist schneller und zuverlässiger als HTTP. Dies funktioniert wie folgt.
- Wir verwenden den Taskplaner, um die Aufgabe wie das Abrufen von Daten von Sensoren, das Veröffentlichen der Sensormesswerte und das Abonnieren des MQTT-Themas zu planen.
- Fügen Sie zunächst die Header-Dateien des Taskplaners, seine Instanz und die Planung der Tasks hinzu.
- Wir haben zwei Aufgaben geplant, die sich auf zwei verschiedene Kontrollvorgänge beziehen.
#define _TASK_TIMEOUT#include
Scheduler-ts;
//---------Aufgaben------------//Aufgabe tSensor(4 * TASK_SECOND, TASK_FOREVER, &taskSensorCallback, &ts, false, NULL, &taskSensorDisable); Aufgabe tWiFi(10* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);
Aufgabe 1 dient zum Lesen des Sensorwerts. Diese Aufgabe wird 1 Sekunde lang ausgeführt, bis ein Timeout von 10 Sekunden erreicht ist
- Wenn Task1 sein Timeout erreicht, verbinden wir uns mit dem lokalen Wifi- und MQTT-Broker.
- Jetzt ist Aufgabe 2 aktiviert und wir deaktivieren Aufgabe 1
- Aufgabe 2 dient zum Veröffentlichen der Sensordaten an den UbiDots MQTT-Broker. Diese Aufgabe wird 20 Sekunden lang ausgeführt, bis das Timeout von 20 Sekunden erreicht ist
- Wenn Task2 sein Timeout erreicht, wird Task 1 wieder aktiviert und Task 2 wird deaktiviert. Auch hier erhalten wir den aktualisierten Wert und der Prozess geht weiter.
Auslesen der I2C-Sensordaten
Wir erhalten einen 29-Byte-Frame von den drahtlosen Temperatur- und Feuchtigkeitssensoren. Dieser Frame wird manipuliert, um aktuelle Temperatur- und Feuchtigkeitsdaten zu erhalten
uint8_t-Daten[29];
data[0] = Serial1.read(); Verzögerung(k); //chck für Startbyte if(data[0]==0x7E) { while (!Serial1.available()); für (i = 1; i<29; i++) {Daten = Serial1.read(); Verzögerung(1); } if(data[15]==0x7F) /////// um zu überprüfen, ob die empfangenen Daten korrekt sind { if(data[22]==1) //////// Stellen Sie sicher, dass der Sensortyp ist richtig {
Feuchtigkeit = ((((Daten[24]) * 256) + Daten[25]) /100,0); Feuchtigkeit /=10,0; cTempint = (((uint16_t)(Daten[26])<<8)| Daten[27]); cTemp = (float)cTempint /100,0; cTemp /= 10,0; fTemp = cTemp * 1,8 + 32; fTemp /= 10,0; Batterie = zufällig (100, 327); Spannung = Batterie/100; Knoten-ID = Daten[16];}
Verbindung zur UbiDots MQTT-API herstellen
Fügen Sie die Header-Datei für den MQTT-Prozess ein
#enthalten
Definieren Sie andere Variablen für MQTT wie Clientname, Brokeradresse, Token-ID (Wir holen die Token-ID aus dem EEPROM)
#define MQTT_CLIENT_NAME "ClientVBShightime123"
char mqttBroker = "things.ubidots.com";
char-Nutzlast[100];char-Thema[150];
// Variable zum Speichern der Token-ID erstellen
Zeichenfolgen-TokenId;
Erstellen Sie Variablen zum Speichern verschiedener Sensordaten und erstellen Sie eine char-Variable zum Speichern des Themas
#define VARIABLE_LABEL_TEMPF "tempF" // Bewertung des Variablenlabels#define VARIABLE_LABEL_TEMPC "tempC" // Bewertung des Variablenlabels #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "humid" // Bewertung des Variablenlabels
char Thema1[100]; char Thema2[100]; char Thema3[100];
Veröffentlichen Sie die Daten im erwähnten MQTT-Thema, die Nutzlast sieht wie folgt aus { "tempc": {value: "tempData"}}
sprintf(topic1, "%s", ""); sprintf(topic1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf(Nutzlast, "%s", ""); // Bereinigung der Nutzdaten sprintf(payload, "{"%s\":", VARIABLE_LABEL_TEMPC); // Fügt den Wert hinzu sprintf(payload, "%s{"value\":%s}", payload, str_cTemp); // Fügt den Wert hinzu sprintf(payload, "%s}", payload); // Schließt die Wörterbuchklammern Serial.println(payload); Serial.println (client.publish (topic1, payload)? "veröffentlicht": "nicht veröffentlicht");
// Machen Sie dasselbe auch für andere Themen
client.publish() veröffentlicht die Daten an UbiDots
Schritt 5: Visualisierung der Daten
- Gehen Sie zu Ubidots und melden Sie sich bei Ihrem Konto an.
- Navigieren Sie über die oben aufgeführte Registerkarte Daten zum Dashboard.
- Klicken Sie nun auf das Symbol "+", um die neuen Widgets hinzuzufügen.
- Wählen Sie ein Widget aus der Liste aus und fügen Sie eine Variable und Geräte hinzu.
- Die Sensordaten können über verschiedene Widgets auf dem Dashboard visualisiert werden.
Schritt 6: Gesamtcode
Den Over-Code für HTML und ESP32 finden Sie in diesem GitHub-Repository.
Credits
- ncd ESP32 Breakout-Board.
- ncd Drahtlose Temperatur- und Feuchtigkeitssensoren.
- pubsubclient
- UbiDots
- Aufgabenplaner
Empfohlen:
3D-Druck eines Roboters – wikiHow
Wie man einen Roboter in 3D druckt: Heute zeige ich Ihnen, wie Sie von einer in wenigen Minuten erstellten Skizze zu einem gut aussehenden professionellen Roboter gelangen, der druckfertig ist
Die Kurzanleitung zum Erstellen eines Videos mit Ihrem IPhone und Hochladen auf Facebook oder YouTube: 9 Schritte
Die Kurzanleitung zum Erstellen eines Videos mit Ihrem IPhone und Hochladen auf Facebook oder YouTube: Verwenden Sie diesen einfachen 5-Schritte-Prozess (Instructables lässt es wie mehr Schritte aussehen, als es tatsächlich ist), um Ihr erstes YouTube- oder Facebook-Video zu erstellen und hochzuladen - mit nur dein iPhone
So programmieren und veröffentlichen Sie Matlab 2016b in Word (Anleitung für Anfänger): 4 Schritte
So codieren und veröffentlichen Sie Matlab 2016b in Word (Einsteigerhandbuch): Matlab ist ein leistungsstarkes Sprachprogramm, das zum Berechnen technischer Ergebnisse verwendet wird. Es hat die Fähigkeit, Visualisierungen, Berechnungen und Programmierung auf benutzerfreundliche Weise zu integrieren. Mit diesem Programm kann der Benutzer Probleme und Lösungen veröffentlichen
Verbinden eines GPS-Moduls mit dem Raspberry Pi: Dashcam Teil 2: 3 Schritte
Anbindung eines GPS-Moduls an den Raspberry Pi: Dashcam Teil 2: Dies ist Teil 2 des Dashcam-Projekts und in diesem Beitrag erfahren Sie, wie Sie ein GPS-Modul an den Raspberry Pi anschließen. Wir verwenden dann die GPS-Daten und fügen sie dem Video als Textüberlagerung hinzu. Bitte lesen Sie Teil 1 über den untenstehenden Link, bevor Sie
So veröffentlichen Sie ESP32-Daten mit NTP-Zeitstempel in der IoT-Cloud – wikiHow
So veröffentlichen Sie ESP32-Daten mit NTP-Zeitstempel in der IoT-Cloud: In vielen Anwendungen müssen Benutzer ihre Daten zusammen mit dem lokalen Zeitstempel der in der Nutzlast zu sendenden Werte an die AskSensors-IoT-Cloud senden. Das Zeitstempelformat ist die Zeit der UNIX-Epoche: die Anzahl der Millisekunden, die seit Januar