Inhoudsopgave:
- Stap 1: Hardware- en softwarespecificatie
- Stap 2: Een Captive Portal maken
- Stap 3: Wifi- en UbiDots-referenties verstrekken
- Stap 4: Sensormetingen publiceren naar UbiDots
- Stap 5: De gegevens visualiseren
- Stap 6: Algemene code
Video: UbiDots: een ESP32 aansluiten en meerdere sensorgegevens publiceren: 6 stappen
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 draadloze temperatuur- en vochtigheidssensoren lezen.
- Een webformulier hosten vanaf de ESP32.
- Lezen en schrijven vanuit SPIFFS ESP32.
Stap 1: Hardware- en softwarespecificatie
- ESP32 WiFi/BLE
- Draadloze temperatuur- en vochtigheidssensor
Softwarespecificatie:
Arduino IDE
Stap 2: 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 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
- 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:
Arduino Meerdere I2C-apparaten aansluiten: 6 stappen
Arduino Verbind meerdere I2C-apparaten: in deze tutorial leren we hoe je verschillende modules met een I2C-verbinding op arduino kunt aansluiten. Bekijk de video! In ons geval gebruiken we 4 OLED-schermen als voorbeeld, maar je kunt elke andere I2C-module gebruiken sensoren indien gewenst.Opmerking: 4 OLED-displays co
Automatisch een programma starten bij het aansluiten van een laptop op een dockingstation: 5 stappen
Een programma automatisch starten wanneer u een laptop op een dockingstation aansluit: deze instructie gaat over het uitvoeren van een programma of een toepassing wanneer u uw laptop op een dockingstation aansluit. In dit voorbeeld gebruik ik Lenovo T480 Windows 10
Meerdere monitoren aansluiten op een laptop: 3 stappen
Sluit meerdere monitoren aan op een laptop: Benodigde componenten: Monitoren (Belangrijk: VGA-connectiviteit met USB-voeding) - 2 nr. muurbevestiging voor tv/monitoren - 2 nr. USB 3.0 naar VGA-converter - 1 nr. 1 naar 2 of 1 naar 4 USB splitter/adapter (om monitoren op te laden) - 1 No.PVC schuim 5mm dikte
MEERDERE SENSOREN AANSLUITEN OP ÉÉN ARDUINO UNO SERILE POORT: 4 stappen
MEERDERE SENSOREN AANSLUITEN OP ÉÉN ARDUINO UNO SERILE POORT: In deze tutorial breiden we een enkele Arduino UNO UART (Rx/Tx) seriële poort uit, zodat meerdere Atlas-sensoren kunnen worden aangesloten. De uitbreiding wordt gedaan met behulp van een 8:1 Serial Port Expander-kaart. De poort van de Arduino wordt na wi
Meerdere knoppen aansluiten op een enkele pin op Arduino: 4 stappen
Meerdere knoppen aansluiten op een enkele pin op Arduino: Hallo allemaal, Als je Arduino-projecten knipperende LED's zijn ontgroeid, heb je misschien wat extra pinnen nodig. Ik zal je een truc laten zien die je kunt gebruiken waar je meerdere knoppen kunt hebben, allemaal aangesloten op dezelfde analoge pin