Inhoudsopgave:

UbiDots: een ESP32 aansluiten en meerdere sensorgegevens publiceren: 6 stappen
UbiDots: een ESP32 aansluiten en meerdere sensorgegevens publiceren: 6 stappen

Video: UbiDots: een ESP32 aansluiten en meerdere sensorgegevens publiceren: 6 stappen

Video: UbiDots: een ESP32 aansluiten en meerdere sensorgegevens publiceren: 6 stappen
Video: Tutorial - Multi-sensor setups for ESP32 & Home Assistant 2024, Juli-
Anonim
UbiDots: een ESP32 aansluiten en meerdere sensorgegevens publiceren
UbiDots: een ESP32 aansluiten en meerdere sensorgegevens publiceren

ESP32 en ESP 8266 zijn zeer bekende SoC op het gebied van IoT. Dit is een soort zegen voor de IoT-projecten. ESP 32 is een apparaat met geïntegreerde WiFi en BLE. Geef gewoon uw SSID, wachtwoord en IP-configuraties op en integreer de dingen in de cloud. Hier in deze instructable zullen we nadenken over enkele van de basisvoorwaarden van IoT, zoals IoT-platform, MQTT, Captive portals enz. Dus laten we er doorheen gaan

  • De IoT-architectuur bestaat in heel eenvoudige bewoordingen uit een ingebed apparaat en een IoT-platform om het apparaat in de cloud te plaatsen. Hier gebruiken we UbiDots IoT-platform om de sensorgegevens te visualiseren.
  • Het beheren van de IP-instellingen en gebruikersreferenties kan hoofdpijn opleveren voor de gebruiker. Wat als de gebruiker de wifi-inloggegevens wil wijzigen? Wat als de gebruiker de DHCP/Static IP-instellingen wil wijzigen? Elke keer de ESP32 flashen is niet betrouwbaar en zelfs niet de oplossing voor deze problemen. We gaan dus door de captive portal om de wifi-inloggegevens en andere configuraties op te slaan.
  • MQTT wordt nu een veel voorkomende term in de IoT-wereld. het heeft het verzoek en de antwoorden (HTTP) van Publish and Subscribe overtroffen vanwege de snelle, robuuste en slanke architectuur.

Hier in dit instructable, zullen we gaan demonstreren.

  • Het geven van WiFi- en MQTT-referenties met behulp van Captive Portal.
  • Meerdere sensorgegevens publiceren en abonneren op UbiDots.
  • De sensorgegevens van draadloze temperatuur- en vochtigheidssensoren lezen.
  • Een webformulier hosten vanaf de ESP32.
  • Lezen en schrijven vanuit SPIFFS ESP32.

Stap 1: Hardware- en softwarespecificatie

Hardware- en softwarespecificatie
Hardware- en softwarespecificatie
  • ESP32 WiFi/BLE
  • Draadloze temperatuur- en vochtigheidssensor

Softwarespecificatie:

Arduino IDE

Stap 2: Een Captive Portal maken

Een Captive Portal maken
Een Captive Portal maken
Een Captive Portal maken
Een Captive Portal maken
Een Captive Portal maken
Een Captive Portal maken

Een captive portal is een webpagina die wordt weergegeven aan nieuw verbonden gebruikers voordat ze bredere toegang krijgen tot netwerkbronnen. Hier serveren we drie webpagina's om te kiezen tussen DHCP- en statische IP-instellingen. we kunnen het IP-adres voor ESP op twee manieren definiëren.

  • DHCP IP-adres - het is een manier om het IP-adres dynamisch aan het apparaat toe te wijzen. Het standaard IP-adres van de ESP is 192.168.4.1
  • Het statische IP-adres - een permanent IP-adres toewijzen aan ons netwerkapparaat. om het statische IP-adres aan het apparaat te geven, moeten we het IP-adres, het gateway-adres en het subnetmasker definiëren.

De eerste webpagina wordt gehost op 192.168.1.77. Hier krijgt de gebruiker de keuzerondjes om te kiezen tussen DHCP- en statische IP-instellingen. Op de volgende webpagina moeten we de IP-gerelateerde informatie verstrekken om verder te gaan.

HTML code

De HTML-code voor webpagina's is te vinden in deze Github-repository. U kunt elke IDE of teksteditor zoals Sublime of notepad++ gebruiken om HTML-webpagina's te maken.

  • Maak eerst een HTML-webpagina met twee keuzerondjes om te kiezen tussen DHCP- en statische IP-instellingen.
  • Maak nu de knop om uw reactie in te dienen
  • Geef een naam aan keuzerondjes.
  • De ESP-webserverklasse neemt deze namen als argumenten en krijgt het antwoord van de keuzerondjes met behulp van deze argumenten
  • Voeg nu een 'VERZENDEN'-knop in om het antwoord naar het apparaat te sturen. Op de andere webpagina's hebben we tekstvakken.
  • Geef de naamwaarde en het invoertype in het tekstvak en voeg een verzendknop toe om het antwoord in te dienen met 'VERZENDEN'.
  • Maak een ' RESET ' knop aan om de inhoud van het tekstveld te resetten.

Stap 3: Wifi- en UbiDots-referenties verstrekken

Het verstrekken van WiFi en UbiDots-referenties
Het verstrekken van WiFi en UbiDots-referenties

Het grootste probleem doet zich voor bij het beheren van de WiFi-inloggegevens. Ook al hebben we daarvoor een WiFiMulti-bibliotheek waar we meerdere SSID's en wachtwoorden aan het apparaat kunnen geven en het apparaat zal verbinding maken met het beschikbare netwerk. Maar wat als het beschikbare netwerk niet in de WiFiMulti-lijst staat? De hele tijd het ESP32-apparaat flashen is geen betrouwbare oplossing.

Om dit probleem op te lossen, hosten we een webpagina waar de gebruiker de SSID en het wachtwoord van het beschikbare netwerk kan indienen. Het werkt als volgt.

  • De webpagina wordt gehost op het statische IP- of DHCP-IP zoals gekozen door de gebruiker uit de captive portal
  • Deze webpagina bevat tekstvelden om SSID, wachtwoord en UBIDOTS-token-ID in te voeren om het apparaat met UbiDots te verbinden.
  • Voer de SSID en het wachtwoord van uw lokale wifi in de invoervelden in, voer de token-ID van UbiDot in en voer SUBMIT in
  • Deze inloggegevens worden opgeslagen in de EEPROM van ESP32
  • Na 60 seconden verbreekt het apparaat automatisch de verbinding met AP
  • De volgende keer dat u het apparaat inschakelt, hoeft de gebruiker deze procedure niet te volgen. Het apparaat haalt automatisch de gebruikersgegevens op uit de EEPROM en gaat verder met het publiceren van de sensormetingen naar UbiDots.

Stap 4: Sensormetingen publiceren naar UbiDots

Hier gebruiken we draadloze temperatuur- en vochtigheidssensoren met het ESP 32-apparaat om de temperatuur- en vochtigheidsgegevens te krijgen. We sturen de gegevens naar UbiDots met behulp van het MQTT-protocol. MQTT volgt een publicatie- en abonnementsmechanisme in plaats van dat verzoek en antwoord. Het is sneller en betrouwbaarder dan HTTP. Dit werkt als volgt.

  • We maken gebruik van Taakplanner om de taak te plannen, zoals het ophalen van gegevens van sensoren, het publiceren van de sensormetingen, het abonneren op MQTT-onderwerp.
  • Neem eerst de headerbestanden van de Taakplanner op, het is het exemplaar en plant de taken.
  • We hebben twee taken gepland die verwijzen naar twee verschillende controlehandelingen.

#define _TASK_TIMEOUT#include

Planner ts;

//---------Taken------------//Task tSensor (4 * TASK_SECOND, TASK_FOREVER, &taskSensorCallback, &ts, false, NULL, &taskSensorDisable); Taak tWiFi (10* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);

Taak 1 is voor het uitlezen van de sensorwaarde. Deze taak duurt 1 seconde totdat de time-out van 10 seconden wordt bereikt

  • Wanneer de Task1 zijn time-out bereikt, maken we verbinding met lokale wifi en MQTT-makelaar.
  • Nu is Taak 2 ingeschakeld en schakelen we Taak 1 uit

  • Taak 2 is voor het publiceren van de sensorgegevens naar UbiDots MQTT-broker. Deze taak duurt 20 seconden totdat de time-out van 20 seconden wordt bereikt
  • Wanneer Taak 2 zijn time-out bereikt, wordt Taak 1 weer ingeschakeld en Taak 2 uitgeschakeld. Ook hier krijgen we de bijgewerkte waarde en gaat het proces door.

De I2C-sensorgegevens lezen

We krijgen een frame van 29 bytes van de draadloze temperatuur- en vochtigheidssensoren. Dit frame wordt gemanipuleerd om de werkelijke temperatuur en vochtigheidsgegevens te krijgen

uint8_t gegevens[29];

data[0] = Serie1.lezen(); vertraging (k); //chck voor startbyte if(data[0]==0x7E) { while (!Serial1.available()); for (i = 1; i<29; i++) { data = Serial1.read(); vertraging(1); } if(data[15]==0x7F) /////// om te controleren of de ontvangen gegevens correct zijn { if(data[22]==1) //////// zorg ervoor dat het sensortype is juist {

vochtigheid = ((((data[24]) * 256) + data[25])/100,0); vochtigheid /=10,0; cTempint = (((uint16_t)(data[26])<<8)|data[27]); cTemp = (zweven)cTempint / 100,0; cTemp /= 10.0; fTemp = cTemp * 1,8 + 32; fTemp /= 10,0; batterij = willekeurig (100, 327); spanning = batterij/100; nodeId = gegevens[16];}

Verbinding maken met UbiDots MQTT API

Voeg het headerbestand voor het MQTT-proces toe

#erbij betrekken

definieer andere variabelen voor MQTT zoals klantnaam, brokeradres, token-ID (we halen de token-ID op uit EEPROM)

#define MQTT_CLIENT_NAME "ClientVBShightime123"

char mqttBroker = "dingen.ubidots.com";

char payload[100];char topic[150];

// maak een variabele om token-ID op te slaan

Tekenreeks-token-ID;

Maak variabelen om verschillende sensorgegevens op te slaan en maak een char-variabele om een onderwerp op te slaan

#define VARIABLE_LABEL_TEMPF "tempF" // Het variabele label toekennen#define VARIABLE_LABEL_TEMPC "tempC" // Het variabele label toekennen #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "humid" // Het variabele label toekennen

char onderwerp1 [100]; char topic2[100]; char topic3 [100];

publiceer de gegevens naar het genoemde MQTT-onderwerp, de payload zal er als volgt uitzien { "tempc": {value: "tempData"}}

sprintf(topic1, "%s", ""); sprintf(topic1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf(lading, "%s", ""); // Reinigt de payload sprintf(payload, "{"%s\":", VARIABLE_LABEL_TEMPC); // Voegt de waarde toe sprintf(payload, "%s{"value\":%s}", payload, str_cTemp); // Voegt de waarde toe sprintf(payload, "%s}", payload); // Sluit de woordenboekhaakjes Serial.println(payload); Serial.println(client.publish(topic1, payload)? "gepubliceerd": "niet gepubliceerd");

//Doe hetzelfde ook voor een ander onderwerp

client.publish() publiceert de gegevens naar UbiDots

Stap 5: De gegevens visualiseren

De gegevens visualiseren
De gegevens visualiseren
De gegevens visualiseren
De gegevens visualiseren
De gegevens visualiseren
De gegevens visualiseren
  • Ga naar Ubidots en log in op uw account.
  • Navigeer naar het Dashboard vanaf het tabblad Gegevens bovenaan.
  • Klik nu op het pictogram "+" om de nieuwe widgets toe te voegen.
  • Selecteer een widget uit de lijst en voeg een variabele en apparaten toe.
  • De sensorgegevens kunnen op het dashboard worden gevisualiseerd met behulp van verschillende widgets.

Stap 6: Algemene code

De Over-code voor HTML en ESP32 is te vinden in deze GitHub-repository.

Credits

  • ncd ESP32 breakoutboard.
  • ncd Draadloze temperatuur- en vochtigheidssensoren.
  • pubsubclient
  • UbiDots
  • Taakplanner

Aanbevolen: