Inhaltsverzeichnis:

UbiDots-Anschließen eines ESP32 und Veröffentlichen mehrerer Sensordaten - Gunook
UbiDots-Anschließen eines ESP32 und Veröffentlichen mehrerer Sensordaten - Gunook

Video: UbiDots-Anschließen eines ESP32 und Veröffentlichen mehrerer Sensordaten - Gunook

Video: UbiDots-Anschließen eines ESP32 und Veröffentlichen mehrerer Sensordaten - Gunook
Video: BitBastelei #340 - Bluetooth-Android-Apps für ESP32 2024, Juli
Anonim
UbiDots-Anschließen eines ESP32 und Veröffentlichen mehrerer Sensordaten
UbiDots-Anschließen eines ESP32 und Veröffentlichen mehrerer Sensordaten

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

Hardware- und Softwarespezifikation
Hardware- und Softwarespezifikation
  • ESP32 WLAN/BLE
  • Kabelloser Temperatur- und Feuchtigkeitssensor

Softwarespezifikation

Arduino-IDE

Schritt 2: Erstellen eines Captive Portals

Erstellen eines Captive-Portals
Erstellen eines Captive-Portals
Erstellen eines Captive-Portals
Erstellen eines Captive-Portals
Erstellen eines Captive-Portals
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

Bereitstellung von WLAN und UbiDots-Anmeldeinformationen
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

Visualisierung der Daten
Visualisierung der Daten
Visualisierung der Daten
Visualisierung der Daten
Visualisierung der Daten
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: