Inhoudsopgave:
- Stap 1: Hardware- en softwarespecificatie
- Stap 2: Draadloze druk- en temperatuursensoren
- Stap 3: Verbinding maken met wifi
- Stap 4: UbiDots instellen op ESP32
- Stap 5: Sensormetingen publiceren naar UbiDots
- Stap 6: De gegevens visualiseren
- Stap 7: Algemene code
Video: Gegevens van draadloze druksensoren publiceren met MQTT - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
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
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
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
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
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
- 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:
Maak mooie plots van live Arduino-gegevens (en sla de gegevens op in Excel): 3 stappen
Maak mooie plots van live Arduino-gegevens (en sla de gegevens op in Excel): we spelen allemaal graag met onze plotterfunctie in de Arduino IDE. Hoewel het nuttig kan zijn voor basistoepassingen, worden de gegevens gewist naarmate meer punten worden toegevoegd en het is niet bijzonder aangenaam voor de ogen. De Arduino IDE-plotter werkt niet
Matlab 2016b coderen en publiceren naar Word (handleiding voor beginners): 4 stappen
Hoe Matlab 2016b te coderen en te publiceren naar Word (Beginnersgids): Matlab is een krachtig taalprogramma dat wordt gebruikt om technische resultaten te berekenen. Het heeft de mogelijkheid om visuals, berekeningen en programmering op een gebruiksvriendelijke manier te integreren. Met dit programma kan de gebruiker problemen en oplossingen publiceren
Live gegevens van een temperatuursensor plotten (TMP006) met behulp van MSP432 LaunchPad en Python: 9 stappen
Live gegevens van een temperatuursensor plotten (TMP006) met behulp van MSP432 LaunchPad en Python: De TMP006 is een temperatuursensor die de temperatuur van een object meet zonder contact met het object te maken. In deze tutorial zullen we live temperatuurgegevens van het BoosterPack (TI BOOSTXL-EDUMKII) plotten met Python
Gegevens van draadloze trillingen en temperatuur naar Google Spreadsheets verzenden met Node-RED: 37 stappen
Gegevens van draadloze trillingen en temperatuur naar Google Spreadsheets verzenden met Node-RED: Introductie van NCD's Long Range IoT Industrial draadloze trillings- en temperatuursensor, met een bereik tot 3 mijl door het gebruik van een draadloze mesh-netwerkstructuur. Dit apparaat is voorzien van een nauwkeurige 16-bits trillings- en temperatuursensor en
ESP32-gegevens publiceren met NTP-tijdstempel naar de IoT-cloud: 5 stappen
ESP32-gegevens publiceren met NTP-tijdstempel naar de IoT-cloud: In veel toepassingen moeten gebruikers hun gegevens samen met de lokale tijdstempel van de waarden verzenden in de payload naar de AskSensors IoT-cloud. Het tijdstempelformaat is UNIX Epoch-tijd: het aantal milliseconden dat is verstreken sinds januari