Taula de continguts:

Introducció a AWS IoT amb sensor de temperatura sense fils mitjançant MQTT: 8 passos
Introducció a AWS IoT amb sensor de temperatura sense fils mitjançant MQTT: 8 passos

Vídeo: Introducció a AWS IoT amb sensor de temperatura sense fils mitjançant MQTT: 8 passos

Vídeo: Introducció a AWS IoT amb sensor de temperatura sense fils mitjançant MQTT: 8 passos
Vídeo: Practice: Intro AWS Iot core Example Application part 1 2024, De novembre
Anonim
Introducció a AWS IoT amb sensor de temperatura sense fils mitjançant MQTT
Introducció a AWS IoT amb sensor de temperatura sense fils mitjançant MQTT

En Instructables anteriors, hem passat per diferents plataformes de núvol com Azure, Ubidots, ThingSpeak, Losant, etc. Hem utilitzat el protocol MQTT per enviar les dades del sensor al núvol a gairebé tota la plataforma de núvol. Per obtenir més informació sobre MQTT, els seus avantatges i avantatges respecte al protocol HTTP, podeu consultar aquest document.

En aquesta instrucció, ens aproparem a una altra plataforma de núvol més coneguda d'Amazon Web Services. Molts de vosaltres podríeu estar familiaritzats amb AWS aka Amazon Web Services i la funcionalitat al núvol que ofereix AWS. Ha estat el nucli del desenvolupament web durant molts anys. Amb l’escala creixent d’aplicacions IoT, AWS ha presentat la solució d’AWSIoT. AWSIoT és una solució fiable per allotjar les nostres aplicacions IoT.

Seguint aquesta instrucció:

  • Podreu configurar un compte AWS per a la vostra aplicació IoT
  • Podreu connectar l’ESP32 al nucli AWS IoT
  • Enviar i rebre missatges mitjançant el protocol MQTT i
  • Visualitzeu les dades enviades a AWS

Pas 1: configuració del compte AWS

Configurar un compte AWS és bastant fàcil. Només cal carregar un parell de certificats, adjuntar-hi polítiques, registrar el dispositiu i començar a rebre els missatges de dades del sensor a AWS.

Per configurar el compte d'AWS, seguiu aquest tutorial.

Pas 2: especificacions de maquinari i programari

Especificacions de maquinari i programari
Especificacions de maquinari i programari

Especificació de programari

Un compte AWS

Especificació de maquinari

  • ESP32
  • Sensor de temperatura i vibració sense fils
  • Receptor Zigmo Gateway

Pas 3: Sensors de vibració i temperatura sense fils

Sensors de vibració i temperatura sense fils
Sensors de vibració i temperatura sense fils

Es tracta d’un sensor de temperatura i vibració sense fils IoT industrial de llarg abast, amb un rang de fins a 2 milles mitjançant una arquitectura de xarxa de malla sense fils. Incorporant un sensor de vibració i temperatura de 16 bits, aquest sensor transmet dades de vibracions molt precises a intervals definits per l'usuari. Té les funcions següents:

  • Sensor de vibració de 3 eixos de grau industrial amb un rang de ± 32 g
  • Calcula la vibració RMS, MAX i MIN g
  • Eliminació de soroll mitjançant el filtre de pas baix
  • Rang de freqüència (amplada de banda) fins a 12, 800 Hz
  • Velocitat de mostra fins a 25, 600Hz
  • Comunicació xifrada amb un rang sense fils de 2 milles
  • Rang de temperatura de funcionament -40 a +85 ° C
  • Instal·lació mural o muntada amb imant IP65 Exemple de programari per a Visual Studio i LabVIEW
  • Sensor de vibració amb opció de sonda externa
  • Fins a 500.000 transmissions de 4 bateries AA Hi ha moltes opcions de passarel·la i mòdem disponibles

Pas 4: Firmware ESP32 AWS

Per connectar-vos a AWS i començar a enviar les dades, seguiu els passos següents

  • Baixeu la biblioteca AWS des del següent repositori Github
  • cloneu la reposició i col·loqueu el fitxer AWS_IOT a la carpeta de la biblioteca del directori Arduino

git clon

Ara anem a revisar el codi:

  • En aquesta aplicació, hem fet ús d’un portal captiu per desar les credencials WiFi i passar el cursor a través de la configuració d’IP. Per obtenir una introducció detallada al portal captiu, podeu consultar les instruccions següents.
  • El portal captiu ens ofereix l'opció de triar entre la configuració estàtica i DHCP. Només cal que introduïu les credencials com ara IP estàtica, màscara de subxarxa, passarel·la i la passarel·la del sensor sense fils es configurarà en aquesta IP.
  • S’està allotjant una pàgina web on hi ha una llista que mostra les xarxes WiFi disponibles i allà el RSSI. Seleccioneu la xarxa WiFi i la contrasenya i introduïu enviar. Les credencials es desaran a EEPROM i la configuració IP es desarà a SPIFFS. Podeu trobar més informació sobre això en aquest instructiu.

Pas 5: Obtenir les dades del sensor del sensor de temperatura i vibració sense fils

Obtenir les dades del sensor del sensor de temperatura i vibració sense fils
Obtenir les dades del sensor del sensor de temperatura i vibració sense fils
Obtenir les dades del sensor del sensor de temperatura i vibració sense fils
Obtenir les dades del sensor del sensor de temperatura i vibració sense fils

Obtenim un quadre de 54 bytes dels sensors de temperatura i vibració sense fils. Aquest marc es manipula per obtenir les dades de temperatura i vibracions reals.

ESP32 té tres UART disponibles per a ús en sèrie

  1. RX0 GPIO 3, TX0 GPIO 1
  2. RX1 GPIO9, TX1 GPIO 10
  3. RX2 GPIO 16, TX2 GPIO 17

i 3 ports sèrie de maquinari

  • En sèrie
  • Sèrie1
  • Sèrie2

Primer, inicialitzeu el fitxer de capçalera de la sèrie de maquinari. Aquí farem servir RX2 i TX2 aka. GPIO 16 i GPIO 17 pins de la placa ESP32 per obtenir les dades de sèrie.

#incloure

# define RXD2 16 # define TXD2 17

Serial2.begin (115200, SERIAL_8N1, RXD2, TXD2); // pins 16 rx2, 17 tx2, 19200 bps, 8 bits sense paritat 1 bit de parada

Els següents passos us conduiran a obtenir els valors reals del sensor

  • Creeu variables per emmagatzemar la temperatura, la humitat, la bateria i altres valors del sensor
  • Establiu els bits Rx, tx, velocitat de transmissió i bits de paritat per al serial del maquinari
  • Primer, comproveu que hi hagi alguna cosa per llegir mitjançant Serial1.available ()
  • Obtindrem el marc de 54 bytes.
  • Comproveu si hi ha 0x7E, que és el byte inicial.
  • Les dades de vibració consisteixen en un valor RMS per als 3 eixos, valors mínims per a 3 eixos, valors màxims per a 3 eixos.
  • la temperatura i els valors de la bateria contindran 2 bytes de dades
  • obteniu el nom del sensor, el tipus, la versió del sensor contindrà 1 byte de dades i es podrà obtenir des de l'adreça respectiva

if (Serial2.available ()) {Serial.println ("Llegir sèrie"); dades [0] = Serial2.read (); retard (k); if (dades [0] == 0x7E) {Serial.println ("Got Packet"); while (! Serial2.available ()); for (i = 1; i <55; i ++) {data = Serial2.read (); retard (1); } if (dades [15] == 0x7F) /////// per comprovar si les dades de recepció són correctes {if (dades [22] == 0x08) //////// assegureu-vos que el tipus de sensor és correcte {rms_x = ((uint16_t) (((dades [24]) << 16) + ((dades [25]) << 8) + (dades [26])) / 100); rms_y = ((uint16_t) (((dades [27]) << 16) + ((dades [28]) << 8) + (dades [29])) / 100); rms_z = ((uint16_t) (((dades [30]) << 16) + ((dades [31]) << 8) + (dades [32])) / 100); int16_t max_x = ((uint16_t) (((dades [33]) << 16) + ((dades [34]) << 8) + (dades [35])) / 100); int16_t max_y = ((uint16_t) (((dades [36]) << 16) + ((dades [37]) << 8) + (dades [38])) / 100); int16_t max_z = ((uint16_t) (((dades [39]) << 16) + ((dades [40]) << 8) + (dades [41])) / 100);

int16_t min_x = ((uint16_t) (((dades [42]) << 16) + ((dades [43]) << 8) + (dades [44])) / 100); int16_t min_y = ((uint16_t) (((dades [45]) << 16) + ((dades [46]) << 8) + (dades [47])) / 100); int16_t min_z = ((uint16_t) (((dades [48]) << 16) + ((dades [49]) << 8) + (dades [50])) / 100);

cTemp = (((((dades [51]) * 256) + dades [52])); bateria flotant = ((dades [18] * 256) + dades [19]); tensió = 0,00322 * bateria; Serial.print ("Número del sensor"); Serial.println (dades [16]); SenseNumber = dades [16]; Serial.print ("Tipus de sensor"); Serial.println (dades [22]); Serial.print ("Versió del firmware"); Serial.println (dades [17]); Serial.print ("Temperatura en centígrads"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("Vibració RMS a l'eix X:"); Serial.print (rms_x); Serial.println ("mg"); Serial.print ("Vibració RMS a l'eix Y:"); Serial.print (rms_y); Serial.println ("mg"); Serial.print ("Vibració RMS a l'eix Z:"); Serial.print (rms_z); Serial.println ("mg");

Serial.print ("Vibració mínima a l'eix X:");

Serial.print (min_x); Serial.println ("mg"); Serial.print ("Vibració mínima a l'eix Y:"); Serial.print (min_y); Serial.println ("mg"); Serial.print ("Vibració mínima a l'eix Z:"); Serial.print (min_z); Serial.println ("mg");

Serial.print ("valor ADC:");

Serial.println (bateria); Serial.print ("Voltatge de la bateria"); Serial.print (voltatge); Serial.println ("\ n"); if (tensió <1) {Serial.println ("Temps per substituir la bateria"); }}} else {for (i = 0; i <54; i ++) {Serial.print (dades ); Serial.print (","); retard (1); }}}}

Pas 6: Connexió a AWS

Connexió a AWS
Connexió a AWS
  • Incloeu fitxers de capçalera AWS_IOT.h, WiFi.h per configurar una connexió amb el concentrador AWSIoT
  • Introduïu la vostra adreça d’amfitrió, l’identificador de client que serà el nom de la política i el nom del tema, que serà el nom de la cosa

// ********* Credencials AWS ************* // char HOST_ADDRESS = "a2smbp7clzm5uw-ats.iot.us-east-1.amazonaws.com"; char CLIENT_ID = "ncdGatewayPolicy"; char TOPIC_NAME = "ncdGatewayThing";

Creeu una variable char per emmagatzemar el vostre JSON; en aquest cas, hem creat un format per emmagatzemar JSON

const char * format = "{" SensorId / ": \"% d / ", \" messageId / ":% d, \" rmsX / ":% d, \" rmsY / ":% d, \" rmsZ / ":% d, \" cTemp / ":% d, \" volta / ":%. 2f}";

Creeu una instància de la classe AWS_IOT

AWS_IOT esp; // Instància de la classe AWS_IOT

Ara connecteu-vos al concentrador AWSIoT mitjançant el següent mètode

void reconnectMQTT () {if (hornbill.connect (HOST_ADDRESS, CLID_ID) == 0) {Serial.println ("Connectat a AWS"); retard (1000);

if (0 == hornbill.subscribe (TOPIC_NAME, mySubCallBackHandler))

{Serial.println ("Subscriure amb èxit"); } else {Serial.println ("La subscripció ha fallat, comproveu el nom de la cosa i els certificats"); mentre que (1); }} else {Serial.println ("La connexió AWS ha fallat, comproveu l'adreça HOST"); mentre que (1); }

endarreriment (2000);

}

publiqueu les dades del sensor cada 1 minut

if (tick> = 60) // publica al tema cada 5 segons {tick = 0; càrrega útil char [PAYLOAD_MAX_LEN]; snprintf (càrrega útil, PAYLOAD_MAX_LEN, format, senseNumber, msgCount ++, rms_x, rms_y, rms_z, cTemp, voltatge); Serial.println (càrrega útil); if (hornbill.publish (TOPIC_NAME, càrrega útil) == 0) {Serial.print ("Publica missatge"); Serial.println (càrrega útil); } else {Serial.println ("No s'ha pogut publicar"); }} vTaskDelay (1000 / portTICK_RATE_MS); tick ++;

Pas 7: visualització de dades a AWS

Visualització de dades a AWS
Visualització de dades a AWS
Visualització de dades a AWS
Visualització de dades a AWS
Visualització de dades a AWS
Visualització de dades a AWS
  • Inicieu la sessió al vostre compte d'AWS.
  • a l'extrem esquerre de la barra d'eines, trobareu la pestanya Serveis
  • Feu clic en aquesta pestanya i, a sota del títol Internet de les coses, seleccioneu IoT Core.
  • Seleccioneu la QoS i no. de missatges als subscriptors. Introduïu el nom del tema.

Pas 8: Codi general

Podeu trobar el codi general en aquest dipòsit de Github.

Crèdits

  • Arduino Json
  • Sensors sense fils de temperatura i humitat
  • ESP32
  • PubSubClient

Recomanat: