Innehållsförteckning:

UbiDots-Anslutning av en ESP32 och publicering av flera sensordata: 6 steg
UbiDots-Anslutning av en ESP32 och publicering av flera sensordata: 6 steg

Video: UbiDots-Anslutning av en ESP32 och publicering av flera sensordata: 6 steg

Video: UbiDots-Anslutning av en ESP32 och publicering av flera sensordata: 6 steg
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, Juli
Anonim
UbiDots-Anslutning av en ESP32 och publicering av flera sensordata
UbiDots-Anslutning av en ESP32 och publicering av flera sensordata

ESP32 ochESP 8266 är mycket välkända SoC inom IoT -området. Dessa är en slags välsignelse för IoT -projekten. ESP 32 är en enhet med integrerad WiFi och BLE. Ge bara dina SSID, lösenord och IP -konfigurationer och integrera sakerna i molnet. Här i denna instruerbara, Vi kommer att begrunda några av de grundläggande termerna för IoT som IoT -plattform, MQTT, Captive portaler etc. Så låt oss gå igenom det

  • IoT -arkitekturen i mycket enkla ord består av en inbäddad enhet och IoT -plattform för att placera enheten i molnet. Här använder vi UbiDots IoT -plattform för att visualisera sensordata.
  • Hantera IP -inställningar och användaruppgifter kan vara en huvudvärk för användaren. Vad händer om användaren vill ändra WiFi -uppgifterna? Vad händer om användaren vill ändra DHCP/statiska IP -inställningar? Att blinka ESP32 varje gång är inte pålitligt och inte ens lösningen på dessa problem. Så vi kommer att gå igenom den fångna portalen för att spara WiFi -uppgifterna och andra konfigurationer.
  • MQTT blir nu en mycket vanlig term i IoT -världen. den har överträffat begäran och svar (HTTP) från Publicera och prenumerera på grund av den snabba, robusta och smala arkitekturen.

Här i denna instruerbara kommer vi att demonstrera.

  • Ge WiFi och MQTT -referenser med Captive Portal.
  • Publicera och prenumerera på flera sensordata till UbiDots.
  • Läser sensordata från trådlösa temperatur- och fuktighetssensorer.
  • Hosta ett webbformulär från ESP32.
  • Läsa och skriva från SPIFFS ESP32.

Steg 1: Specifikationer för hårdvara och programvara

Specifikationer för hårdvara och programvara
Specifikationer för hårdvara och programvara
  • ESP32 WiFi/BLE
  • Trådlös temperatur- och fuktsensor

Programvaruspecifikation

Arduino IDE

Steg 2: Skapa en Captive Portal

Skapa en Captive Portal
Skapa en Captive Portal
Skapa en Captive Portal
Skapa en Captive Portal
Skapa en Captive Portal
Skapa en Captive Portal

En captive portal är en webbsida som visas för nyanslutna användare innan de får bredare åtkomst till nätverksresurser. Här serverar vi tre webbsidor att välja mellan DHCP och statiska IP -inställningar. vi kan definiera IP -adressen till ESP på två sätt.

  • DHCP IP-adress- det är ett sätt att dynamiskt tilldela IP-adressen till enheten. ESP: s standard -IP -adress är 192.168.4.1
  • Den statiska IP-adressen- tilldela en permanent IP-adress till vår nätverksenhet. För att tillhandahålla den statiska IP -adressen till enheten behöver vi definiera IP -adressen, gateway -adressen och subnätmask.

Den första webbsidan är värd på 192.168.1.77. Här får användaren radioknappar för att välja mellan DHCP och statisk IP -inställning. På nästa webbsida måste vi tillhandahålla den IP -relaterade informationen för att gå vidare.

HTML -kod

HTML -koden för webbsidor finns i detta Github -arkiv. Du kan använda alla IDE- eller textredigerare som Sublime eller anteckningar ++ för att skapa HTML -webbsidor.

  • Skapa först en HTML -webbsida som innehåller två alternativknappar för att välja mellan DHCP- och statiska IP -inställningar.
  • Skapa nu knappen för att skicka ditt svar
  • Ge ett namn till alternativknapparna.
  • ESP -webbserverklassen tar dessa namn som argument och får svar från alternativknapparna med dessa argument
  • Sätt nu in en "SKICKA" -knapp för att skicka svaret till enheten. På de andra webbsidorna har vi textrutor.
  • Ge namnvärdet och inmatningstypen i textrutan och lägg till en skicka -knapp för att "SKICKA" skicka svaret.
  • Skapa en "RESET" -knapp för att återställa textfältets innehåll.

Steg 3: Tillhandahåller WiFi- och UbiDots -referenser

Tillhandahåller WiFi och UbiDots Credentials
Tillhandahåller WiFi och UbiDots Credentials

Huvudproblemet uppstår när du hanterar WiFi -uppgifterna. Även om vi har WiFiMulti -bibliotek för det där vi kan ge flera SSID och lösenord till enheten och enheten kommer att ansluta till det tillgängliga nätverket. Men vad händer om det tillgängliga nätverket inte finns i WiFiMulti -listan. Att blinka ESP32 -enheten hela tiden är ingen pålitlig lösning.

För att lösa detta problem är vi värd för en webbsida där användaren kan skicka SSID och lösenord för det tillgängliga nätverket. Det fungerar enligt följande.

  • Webbsidan finns på den statiska IP- eller DHCP -IP som användaren väljer från den fångade portalen
  • Denna webbsida innehåller textfält för att ange SSID, lösenord och UBIDOTS -token -ID för att ansluta enheten till UbiDots.
  • Ange SSID och lösenord för din lokala WiFi i inmatningsfälten, ange UbiDots token -ID och ange SKICKA
  • Dessa referenser sparas i ESP32: s EEPROM
  • Efter 60 sek kopplas enheten automatiskt från AP
  • Nästa gång du slår på enheten behöver användaren inte följa denna procedur. Enheten hämtar automatiskt användaruppgifterna från EEPROM och fortsätter med att publicera sensoravläsningarna till UbiDots.

Steg 4: Publicera sensoravläsningar till UbiDots

Här använder vi trådlösa temperatur- och fuktighetssensorer med ESP 32 -enheten för att få data om temperatur och luftfuktighet. Vi skickar data till UbiDots med MQTT -protokollet. MQTT följer en publicerings- och prenumerationsmekanism snarare den begäran och svaret. Det är snabbare och pålitligare än HTTP. Detta fungerar enligt följande.

  • Vi använder Task Scheduler för att schemalägga uppgiften som att hämta data från sensorer, publicera sensoravläsningarna, prenumerera på MQTT -ämne.
  • Inkludera först rubrikfilerna för Task Scheduler, det är instans och schemalägger uppgifterna.
  • Vi har planerat två uppgifter som avser två olika kontrolloperationer.

#define _TASK_TIMEOUT#inkluderar

Schemaläggare ts;

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

Uppgift 1 är för avläsning av sensorvärdet, den här uppgiften körs i 1 sekund tills den når timeout på 10 sekunder

  • När uppgiften1 når sin tid, ansluter vi till lokal Wifi- och MQTT -mäklare.
  • Nu är uppgift 2 aktiverad och vi inaktiverar uppgift 1
  • Uppgift 2 är för att publicera sensordata till UbiDots MQTT -mäklare, den här uppgiften körs i 20 sekunder tills den når timeout på 20 sekunder

  • När uppgift 2 når sin timeout är uppgift 1 aktiverad igen och uppgift 2 inaktiverad. Även här får vi det uppdaterade värdet och processen fortsätter.

Läser av I2C -sensordata

Vi får en ram på 29 byte från trådlösa temperatur- och fuktsensorer. Denna ram manipuleras för att få data om faktisk temperatur och luftfuktighet

uint8_t data [29];

data [0] = Serial1.read (); fördröjning (k); // chck för startbyte om (data [0] == 0x7E) {while (! Serial1.available ()); för (i = 1; i <29; i ++) {data = Serial1.read (); fördröjning (1); } if (data [15] == 0x7F) /////// för att kontrollera om mottagna data är korrekta {om (data [22] == 1) //////// se till att sensortypen stämmer {

luftfuktighet = ((((data [24]) * 256) + data [25]) /100,0); luftfuktighet /=10,0; cTempint = (((uint16_t) (data [26]) << 8) | data [27]); cTemp = (float) cTempint /100.0; cTemp /= 10,0; fTemp = cTemp * 1,8 + 32; fTemp /= 10,0; batteri = slumpmässigt (100, 327); spänning = batteri/100; nodeId = data [16];}

Ansluter till UbiDots MQTT API

Inkludera rubrikfilen för MQTT -processen

#omfatta

definiera andra variabler för MQTT som klientnamn, mäklaradress, token -ID (Vi hämtar token -ID från EEPROM)

#define MQTT_CLIENT_NAME "ClientVBShightime123"

char mqttBroker = "things.ubidots.com";

röding nyttolast [100]; röding ämne [150];

// skapa variabel för att lagra token -ID

String tokenId;

Skapa variabler för att lagra olika sensordata och skapa en char -variabel för att lagra ämne

#define VARIABLE_LABEL_TEMPF "tempF" // Utvärdera variabeln etikett #definiera VARIABLE_LABEL_TEMPC "tempC" // Utvärdera variabeln etikett #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "variabel" //

char topic1 [100]; char topic2 [100]; char topic3 [100];

publicera data till det nämnda MQTT -ämnet nyttolasten kommer att se ut som {"tempc": {value: "tempData"}}

sprintf (topic1, "%s", ""); sprintf (topic1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf (nyttolast, "%s", ""); // Rensar nyttolasten sprintf (nyttolast, "{"%s / ":", VARIABLE_LABEL_TEMPC); // Lägger till värdet sprintf (nyttolast, "%s {" värde / ":%s}", nyttolast, str_cTemp); // Lägger till värdet sprintf (nyttolast, "%s}", nyttolast); // Stänger ordlistans parenteser Serial.println (nyttolast); Serial.println (client.publish (topic1, nyttolast)? "Publicerad": "notpublished");

// Gör samma sak för andra ämnen också

client.publish () publicerar data till UbiDots

Steg 5: Visualisera data

Visualisera data
Visualisera data
Visualisera data
Visualisera data
Visualisera data
Visualisera data
  • Gå till Ubidots och logga in på ditt konto.
  • Navigera till instrumentpanelen från fliken Data ovan.
  • Klicka nu på "+" -ikonen för att lägga till de nya widgetarna.
  • Välj en widget från listan och lägg till en variabel och enheter.
  • Sensordata kan visualiseras på instrumentpanelen med hjälp av olika widgets.

Steg 6: Övergripande kod

Över -koden för HTML och ESP32 finns i detta GitHub -arkiv.

Poäng

  • ncd ESP32 breakout board.
  • ncd Trådlösa temperatur- och luftfuktighetssensorer.
  • pubsubclient
  • UbiDots
  • Schemaläggaren

Rekommenderad: