Inhoudsopgave:

Gegevens van draadloze druksensoren publiceren met MQTT - Ajarnpa
Gegevens van draadloze druksensoren publiceren met MQTT - Ajarnpa

Video: Gegevens van draadloze druksensoren publiceren met MQTT - Ajarnpa

Video: Gegevens van draadloze druksensoren publiceren met MQTT - Ajarnpa
Video: Lellki WK34 - ingebouwde zigbee euro-stopcontact met energiemonitoring, integratie in Home Assistant 2024, November
Anonim
Gegevens van draadloze druksensoren publiceren met MQTT
Gegevens van draadloze druksensoren publiceren met MQTT

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 de draadloze druk- en temperatuursensor lezen
  • Een webformulier hosten vanaf de ESP32.
  • Lezen en schrijven vanuit SPIFFS ESP32.

Stap 1: Hardware- en softwarespecificatie

Hardwarespecificatie:

  • ESP32 WiFi/BLE
  • Draadloze druk- en temperatuursensor

Softwarespecificatie:

  • Arduino IDE
  • XCTU
  • Labview-hulpprogramma

Stap 2: Draadloze druk- en temperatuursensoren

Draadloze druk- en temperatuursensoren
Draadloze druk- en temperatuursensoren
Draadloze druk- en temperatuursensoren
Draadloze druk- en temperatuursensoren
Draadloze druk- en temperatuursensoren
Draadloze druk- en temperatuursensoren

Functies

  • Industriële kwaliteit sensor Lange afstand draadloze druktemperatuursensor
  • Bedrijfsbereik 0 tot 14000 mbar -40° tot +85°C (-40° tot 185°F)
  • Configureerbare interne berekening Drukresolutie 0,012 tot 0,065 mbar
  • Configureerbare interne berekening Temperatuurresolutie 0,002 tot 0,012 °C
  • Nauwkeurigheid ±2,5 mbar, ±2 °C
  • Absolute druk, relatieve druk en relatieve hoogteverandering uitgangen
  • 2 mijl zichtlijnbereik met ingebouwde antenne
  • Superieur LOS-bereik tot 28 mijl met high-gain antennes
  • Interface naar Raspberry Pi, Microsoft® Azure®, Arduino en meer
  • Draadloos mesh-netwerken met DigiMesh®

Draadloze druk- en temperatuursensor configureren met Labview Utility en XCTU

De sensor werkt in twee modi:

  • Configuratiemodus: Configureer de Pan-ID, vertraging, aantal nieuwe pogingen enz. Meer hierover valt buiten het bestek van deze instructable en zal in de volgende instructable worden uitgelegd.
  • Run-modus: we gebruiken het apparaat in de Run-modus. En om deze waarde te analyseren gebruiken we de Labview Utility

Deze Labview UI toont de waarden in mooie grafieken. Het toont zowel de huidige als de vorige waarden. U kunt naar deze link gaan om de Labview UI te downloaden. klik op het pictogram Uitvoeren in het menu van de bestemmingspagina om naar de uitvoeringsmodus te gaan.

Stap 3: Verbinding maken met wifi

Verbinding maken met wifi
Verbinding maken met wifi
Verbinding maken met wifi
Verbinding maken met wifi

We gebruiken de captive portal om de wifi-inloggegevens op te slaan en door de IP-instellingen te navigeren. Voor de gedetailleerde introductie op de captive portal kunt u de volgende instructable doorlopen.

De captive portal geeft ons de mogelijkheid om te kiezen tussen statische en DHCP-instellingen. Voer gewoon de inloggegevens in zoals Static IP, Subnet Mask, gateway en de Wireless Sensor Gateway wordt geconfigureerd op dat IP.

Er wordt een webpagina gehost waar een lijst wordt weergegeven met beschikbare WiFi-netwerken en daar RSSI. Selecteer het wifi-netwerk en wachtwoord en voer verzenden in. De inloggegevens worden opgeslagen in de EEPROM en de IP-instelling wordt opgeslagen in de SPIFFS. Meer hierover is te vinden in deze instructable.

Stap 4: UbiDots instellen op ESP32

UbiDots instellen op ESP32
UbiDots instellen op ESP32

Hier gebruiken we draadloze druk- en temperatuursensoren 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 Scheduler ts; //---------Taken------------// Taak 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 is 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

if (Serial1.available())

{ data[0] = Serial1.read(); vertraging (k); if(data[0]==0x7E) { while (!Serial1.available()); for (i = 1; i<36; i++) { data = Serial1.read(); vertraging(1); } if(data[15]==0x7F) /////// om te controleren of de ontvangen gegevens correct zijn { if(data[22]==0x06) //////// zorg ervoor dat het sensortype klopt { int cTemp = ((((data[24]) * 256) + data[25])); int16_t abs_pressure = ((((uint16_t)(data[26])<<8)| data[27])*0.001); int rlt_pressure = ((((data[28]) * 256) + data[29])*0.001); int16_t delta_alt = ((((uint16_t)(data[30])<<8)|data[31])*0.01); float-batterij = ((data[18] * 256) + data[19]); vlotterspanning = 0,00322 * batterij; Serial.print("Sensornummer"); Serial.println(data[16]); Serial.print("Sensortype "); Serial.println(data[22]); Serial.print("Firmwareversie"); Serial.println(data[17]); Serial.print ("Temperatuur in Celsius:"); Serieel.print(cTemp); Serieel.println("C"); Serial.print("Absolute druk:"); Serial.println(abs_druk); Serial.print ("mbar"); Serial.print("Relatieve druk:"); Serial.println(rlt_druk); Serial.print ("mbar"); Serial.print("Delta Hoogte:"); Serial.println(delta_alt); Serial.print ("meter"); Serial.print ("ADC-waarde:"); Serial.println(batterij); Serial.print ("Batterijspanning:"); Seriële.afdruk (spanning); Serieel.println("\n"); if (voltage < 1) { Serial.println ("Tijd om de batterij te vervangen"); } } }else{ for (i = 0; i< 36; i++) { Serial.print(data); Serieel.print(", "); vertraging(1); }} } }

Verbinding maken met UbiDots MQTT API

Voeg het headerbestand voor het MQTT-proces toe

#erbij betrekken

definieer andere variabelen voor MQTT zoals klantnaam, brokeradres, de token-ID

#define TOKEN "BBFF-****************************************" // Uw Ubidots TOKEN#define MQTT_CLIENT_NAME "**************************"

char mqttBroker = "dingen.ubidots.com";

char-lading [100]; char-onderwerp [150]; // maak een variabele om token-ID-toke op te slaan

Stap 5: Sensormetingen publiceren naar UbiDots

Sensormetingen publiceren naar UbiDots
Sensormetingen publiceren naar UbiDots

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 6: 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 7: Algemene code

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

Credits

  • ncd ESP32 breakoutboard.
  • ncd draadloze druk- en temperatuursensoren
  • pubsubclient
  • UbiDots
  • Taakplanner

Aanbevolen: