Taula de continguts:

UbiDots: connexió d’un ESP32 i publicació de dades de sensors múltiples: 6 passos
UbiDots: connexió d’un ESP32 i publicació de dades de sensors múltiples: 6 passos

Vídeo: UbiDots: connexió d’un ESP32 i publicació de dades de sensors múltiples: 6 passos

Vídeo: UbiDots: connexió d’un ESP32 i publicació de dades de sensors múltiples: 6 passos
Vídeo: Клиент-серверная связь ESP32 по Wi-Fi между двумя платами (совместима с ESP8266) 2024, Juliol
Anonim
UbiDots: connexió d’un ESP32 i publicació de dades de diversos sensors
UbiDots: connexió d’un ESP32 i publicació de dades de diversos sensors

ESP32 i ESP 8266 són SoC molt familiars en el camp de l'IoT. Es tracta d’una mena de benefici per als projectes IoT. ESP 32 és un dispositiu amb WiFi i BLE integrats. Simplement doneu les vostres configuracions d’SSID, contrasenya i IP i integreu les coses al núvol. Aquí, en aquest instructiu, reflexionarem sobre alguns dels termes bàsics de l'IoT, com ara la plataforma IoT, MQTT, portals captius, etc.

  • L’arquitectura IoT en paraules molt senzilles consisteix en un dispositiu incrustat i una plataforma IoT per posar el dispositiu al núvol. Aquí estem utilitzant la plataforma IoT UbiDots per visualitzar les dades del sensor.
  • Administrar la configuració d’IP i les credencials d’usuari pot ser un mal de cap per a l’usuari. Què passa si l’usuari vol canviar les credencials de WiFi? Què passa si l'usuari vol canviar la configuració de DHCP / IP estàtica? Parpellejar l’ESP32 cada cop no és fiable ni tan sols és la solució per a aquests problemes. Així, passarem pel portal captiu per desar les credencials WiFi i altres configuracions.
  • MQTT s’està convertint en un terme molt comú al món de l’IoT. ha superat les sol·licituds i respostes (HTTP) de Publish and Subscribe a causa de l'arquitectura ràpida, robusta i senzilla.

Aquí, en aquest instructiu, anirem a demostrar.

  • Donar credencials de WiFi i MQTT mitjançant Captive Portal.
  • Publicació i subscripció de diverses dades del sensor a UbiDots.
  • Lectura de les dades del sensor dels sensors sense fils de temperatura i humitat.
  • Allotjament d’un formulari web des de l’ESP32.
  • Lectura i escriptura des de SPIFFS ESP32.

Pas 1: Especificació de maquinari i programari

Especificació de maquinari i programari
Especificació de maquinari i programari
  • ESP32 WiFi / BLE
  • Sensor de temperatura i humitat sense fils

Especificació de programari

IDE Arduino

Pas 2: crear un portal captiu

Creació d’un portal captiu
Creació d’un portal captiu
Creació d’un portal captiu
Creació d’un portal captiu
Creació d’un portal captiu
Creació d’un portal captiu

Un portal captiu és una pàgina web que es mostra als usuaris recentment connectats abans que se'ls concedeixi un accés més ampli als recursos de la xarxa. Aquí oferim tres pàgines web per seleccionar entre DHCP i Static IP Settings. podem definir l'adreça IP a ESP de dues maneres.

  • Adreça IP DHCP: és una manera d’assignar dinàmicament l’adreça IP al dispositiu. L’adreça IP per defecte de l’ESP és 192.168.4.1
  • L'adreça IP estàtica: assigna una adreça IP permanent al nostre dispositiu de xarxa. per proporcionar la IP estàtica al dispositiu, hem de definir l'adreça IP, l'adreça de la passarel·la i la màscara de subxarxa.

La primera pàgina web s’allotja al 192.168.1.77. Aquí es proporciona a l’usuari els botons d’opció per seleccionar entre els paràmetres DHCP i Static IP. A la següent pàgina web, hem de proporcionar la informació relacionada amb la IP per continuar endavant.

Codi HTML

El codi HTML de les pàgines web es troba en aquest dipòsit de Github. Podeu utilitzar qualsevol IDE o editor de text com Sublim o Bloc de notes ++ per crear pàgines web HTML.

  • Primer, creeu una pàgina web HTML que contingui dos botons d’opció per triar entre la configuració DHCP i la configuració IP estàtica.
  • Ara creeu el botó per enviar la vostra resposta
  • Posa un nom als botons d'opció.
  • La classe de servidor web ESP prendrà aquests noms com a arguments i obtindrà la resposta dels botons d’opció mitjançant aquests arguments
  • Ara inseriu un botó "ENVIAR" per enviar la resposta al dispositiu. A les altres pàgines web, tenim quadres de text.
  • Indiqueu el valor del nom i el tipus d’entrada al quadre de text i afegiu un botó d’enviament per enviar la resposta a "ENVIAR".
  • Creeu un botó "RESET" per restablir el contingut del camp de text.

Pas 3: proporcionar credencials de WiFi i UbiDots

Proporcionar credencials WiFi i UbiDots
Proporcionar credencials WiFi i UbiDots

El problema principal es produeix en gestionar les credencials WiFi. Tot i que tenim una biblioteca WiFiMulti per a això, on podem donar diversos SSID i contrasenyes al dispositiu i el dispositiu es connectarà a la xarxa disponible. Però, què passa si la xarxa disponible no apareix a la llista WiFiMulti. Parpellejar el dispositiu ESP32 tot el temps no és una solució fiable.

Per resoldre aquest problema, estem allotjant una pàgina web on l'usuari pot enviar l'SSID i la contrasenya de la xarxa disponible. Funciona de la següent manera.

  • La pàgina web s’allotja a la IP estàtica o IP DHCP, segons l’opció que ha triat l’usuari des del portal captiu
  • Aquesta pàgina web conté camps de text per introduir SSID, contrasenya i identificador de testimoni UBIDOTS per connectar el dispositiu a UbiDots.
  • Introduïu el SSID i la contrasenya del vostre WiFi local als camps d’entrada, introduïu l’identificador de testimoni d’UbiDot i introduïu ENVIAR
  • Aquestes credencials es guarden a la EEPROM d'ESP32
  • Després de 60 segons, el dispositiu es desconnectarà automàticament de l'AP
  • La propera vegada que engegueu el dispositiu, l'usuari no ha de seguir aquest procediment; el dispositiu recuperarà automàticament les credencials d'usuari d'EEPROM i continuarà publicant les lectures del sensor a UbiDots.

Pas 4: Publicació de les lectures del sensor a UbiDots

Aquí fem servir sensors de temperatura i humitat sense fils amb el dispositiu ESP 32 per obtenir les dades de temperatura i humitat. Enviem les dades a UbiDots mitjançant el protocol MQTT. MQTT segueix un mecanisme de publicació i subscripció més que la sol·licitud i la resposta. És més ràpid i fiable que HTTP. Això funciona de la següent manera.

  • Estem utilitzant Task Scheduler per programar la tasca, com ara obtenir dades de sensors, publicar les lectures del sensor, subscriure’s al tema MQTT.
  • En primer lloc, incloeu els fitxers de capçalera del Planificador de tasques, la seva instància i planifica les tasques.
  • Hem programat dues tasques referents a dues operacions de control diferents.

#define _TASK_TIMEOUT # include

Programador ts;

// --------- Tasques ------------ // Tasca tSensor (4 * TASK_SECOND, TASK_FOREVER, & taskSensorCallback, & ts, false, NULL, & taskSensorDisable); Tasca tWiFi (10 * TASK_SECOND, TASK_FOREVER i & taskWiFiCallback, & ts, false, NULL i & taskWiFiDisable);

La tasca 1 serveix per llegir el valor del sensor que aquesta tasca s'executa durant 1 segon fins que arriba a un temps d'espera de 10 segons

  • Quan la Task1 arribi a la seva data d’espera, ens connectem a l’agent local de Wifi i MQTT.
  • Ara la tasca 2 està activada i estem desactivant la tasca 1

  • La tasca 2 serveix per publicar les dades del sensor al corredor UbiDots MQTT, aquesta tasca s’executa durant 20 segons fins que s’aconsegueix un temps d’espera de 20 segons
  • Quan la tasca 2 arriba al seu temps d'espera, la tasca 1 es torna a activar i la tasca 2 es desactiva. Un cop més, obtenim el valor actualitzat i el procés continua.

Lectura de les dades del sensor I2C

Els sensors de temperatura i humitat sense fils obtenim un marc de 29 bytes. Aquest marc es manipula per obtenir dades reals de temperatura i humitat

dades uint8_t [29];

dades [0] = Serial1.read (); retard (k); // chck for byte start if (data [0] == 0x7E) {while (! Serial1.available ()); for (i = 1; i <29; i ++) {data = Serial1.read (); retard (1); } if (dades [15] == 0x7F) /////// per comprovar si les dades de recepció són correctes {if (dades [22] == 1) //////// assegureu-vos que el tipus de sensor és correcte {

humitat = ((((dades [24]) * 256) + dades [25]) /100.0); humitat /=10,0; cTempint = (((uint16_t) (dades [26]) << 8) | dades [27]); cTemp = (flotant) cTempint /100.0; cTemp / = 10,0; fTemp = cTemp * 1,8 + 32; fTemp / = 10,0; bateria = aleatòria (100, 327); tensió = bateria / 100; nodeId = data [16];}

Connexió a l'API UbiDots MQTT

Incloeu el fitxer de capçalera per al procés MQTT

#incloure

definiu altres variables per a MQTT com el nom del client, l'adreça del corredor, l'identificador del testimoni (estem recuperant l'identificador del testimoni a EEPROM)

#define MQTT_CLIENT_NAME "ClientVBShightime123"

char mqttBroker = "coses.ubidots.com";

char charge [100]; char topic [150];

// crear variable per emmagatzemar l'identificador de testimoni

String tokenId;

Creeu variables per emmagatzemar diferents dades del sensor i creeu una variable de caràcter per emmagatzemar el tema

#define VARIABLE_LABEL_TEMPF "tempF" // Assignació de l'etiqueta de variable # define VARIABLE_LABEL_TEMPC "tempC" // Assignació de l'etiqueta de variable #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "humid" // Assignació de l'etiqueta de variable

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

publiqueu les dades al tema MQTT esmentat, la càrrega útil tindrà l'aspecte de {"tempc": {value: "tempData"}}

sprintf (tema1, "% s", ""); sprintf (tema1, "% s% s", "/v1.6/devices/", DEVICE_LABEL); sprintf (càrrega útil, "% s", ""); // Neteja la càrrega útil sprintf (càrrega útil, "{"% s / ":", VARIABLE_LABEL_TEMPC); // Afegeix el valor sprintf (càrrega útil, "% s {" valor / ":% s}", càrrega útil, str_cTemp); // Afegeix el valor sprintf (càrrega útil, "% s}", càrrega útil); // Tanca els claudàtors del diccionari Serial.println (càrrega útil); Serial.println (client.publish (tema1, càrrega útil)? "Published": "no publicat");

// Feu el mateix amb altres temes

client.publish () publica les dades a UbiDots

Pas 5: visualització de les dades

Visualització de les dades
Visualització de les dades
Visualització de les dades
Visualització de les dades
Visualització de les dades
Visualització de les dades
  • Aneu a Ubidots i inicieu la sessió al vostre compte.
  • Aneu al tauler de control des de la pestanya Dades que apareix a la part superior.
  • Ara feu clic a la icona "+" per afegir els ginys nous.
  • Seleccioneu un widget de la llista i afegiu una variable i dispositius.
  • Les dades del sensor es poden visualitzar al tauler de control mitjançant diferents widgets.

Pas 6: Codi general

El codi Over per a HTML i ESP32 es pot trobar en aquest dipòsit de GitHub.

Crèdits

  • tauler de ruptura ESP32 ncd.
  • Sensors de temperatura i humitat sense fils ncd.
  • pubsubclient
  • UbiDots
  • Planificador de tasques

Recomanat: