Turinys:

Darbo su „AWS IoT“pradžia naudojant belaidį temperatūros jutiklį naudojant MQTT: 8 žingsniai
Darbo su „AWS IoT“pradžia naudojant belaidį temperatūros jutiklį naudojant MQTT: 8 žingsniai

Video: Darbo su „AWS IoT“pradžia naudojant belaidį temperatūros jutiklį naudojant MQTT: 8 žingsniai

Video: Darbo su „AWS IoT“pradžia naudojant belaidį temperatūros jutiklį naudojant MQTT: 8 žingsniai
Video: CS50 2015 - Week 6 2024, Lapkritis
Anonim
Darbo su „AWS IoT“pradžia naudojant belaidį temperatūros jutiklį naudojant MQTT
Darbo su „AWS IoT“pradžia naudojant belaidį temperatūros jutiklį naudojant MQTT

Ankstesnėse instrukcijose mes perėjome įvairias debesų platformas, tokias kaip „Azure“, „Ubidots“, „ThingSpeak“, „Losant“ir kt. Mes naudojome MQTT protokolą, skirtą siųsti jutiklio duomenis į debesį beveik visoje debesies platformoje. Norėdami gauti daugiau informacijos apie MQTT, jo privalumus ir pranašumus, palyginti su HTTP protokolu, galite perskaityti šioje instrukcijoje.

Šioje instrukcijoje mes priartinsime dar vieną ir labiausiai pažįstamą debesų platformą „Amazon Web Services“. Daugelis iš jūsų gali būti susipažinę su AWS, dar žinomomis kaip „Amazon Web Services“, ir AWS teikiamomis debesies funkcijomis. Tai daugelį metų buvo interneto kūrimo pagrindas. Didėjant daiktų interneto taikymo sričiai, AWS pasiūlė AWSIoT sprendimą. AWSIoT yra patikimas sprendimas, skirtas mūsų interneto programų prieglobai.

Vykdydami šią instrukciją:

  • Galėsite nustatyti AWS paskyrą savo „IoT“programai
  • Galėsite prijungti ESP32 prie AWS IoT branduolio
  • Siųskite ir gaukite pranešimus naudodami MQTT ir HTTP protokolą
  • Vizualizuokite siunčiamus duomenis AWS

1 veiksmas: nustatykite AWS paskyrą

AWS sąskaitos nustatymas yra gana lengvas. Jums tereikia įkelti porą sertifikatų, pridėti prie jų politiką, užregistruoti įrenginį ir pradėti gauti jutiklių duomenų pranešimus AWS.

Norėdami nustatyti AWS paskyrą, vadovaukitės šia pamoka.

2 žingsnis: Techninės ir programinės įrangos specifikacijos

Techninės ir programinės įrangos specifikacijos
Techninės ir programinės įrangos specifikacijos

Programinės įrangos specifikacija

AWS sąskaita

Techninės įrangos specifikacija

  • ESP32
  • Belaidis temperatūros ir vibracijos jutiklis
  • „Zigmo Gateway“imtuvas

3 žingsnis: belaidžiai vibracijos ir temperatūros jutikliai

Belaidžiai vibracijos ir temperatūros jutikliai
Belaidžiai vibracijos ir temperatūros jutikliai

Tai ilgo nuotolio pramoninis IoT belaidis vibracijos ir temperatūros jutiklis, galintis pasiekti iki 2 mylių atstumą, naudojant belaidžio tinklo tinklo architektūrą. Šis jutiklis su 16 bitų vibracijos ir temperatūros jutikliu perduoda labai tikslius vibracijos duomenis vartotojo nustatytais intervalais. Jis turi šias funkcijas:

  • Pramoninis 3 ašių vibracijos jutiklis su ± 32 g diapazonu
  • Skaičiuoja RMS, MAX ir MIN g vibraciją
  • Triukšmo pašalinimas naudojant žemo dažnio filtrą
  • Dažnių diapazonas (pralaidumas) iki 12 800 Hz
  • Mėginių dažnis iki 25, 600 Hz
  • Šifruotas ryšys su 2 mylių belaidžiu diapazonu
  • Darbinės temperatūros diapazonas nuo -40 iki +85 ° C
  • Prie sienos arba prie magneto pritvirtintas IP65 įvertintas korpusas Pavyzdinė programinė įranga, skirta „Visual Studio“ir „LabVIEW“
  • Vibracijos jutiklis su išoriniu zondu
  • Iki 500 000 transmisijų iš 4 AA baterijų. Yra daug šliuzo ir modemo parinkčių

4 žingsnis: ESP32 AWS programinė įranga

Norėdami prisijungti prie AWS ir pradėti siųsti duomenis, atlikite šiuos veiksmus

  • Atsisiųskite AWS biblioteką iš šios „Github“saugyklos
  • klonuokite repo ir įdėkite AWS_IOT failą į „Arduino“katalogo bibliotekos aplanką

git klonas

Dabar pereikime kodą:

  • Šioje programoje mes panaudojome uždarąjį portalą, kad išsaugotume „WiFi“prisijungimo duomenis ir perjungtume IP adresus. Norėdami gauti išsamų įvadą į nelaisvės portalą, galite perskaityti šią instrukciją.
  • Nepriklausomas portalas suteikia mums galimybę pasirinkti tarp statinio ir DHCP nustatymų. Tiesiog įveskite tokius įgaliojimus kaip statinis IP, potinklio kaukė, šliuzas ir belaidžio jutiklio šliuzas bus sukonfigūruoti tuo IP.
  • Priglobiamas tinklalapis, kuriame pateikiamas galimų „WiFi“tinklų ir RSSI sąrašas. Pasirinkite „WiFi“tinklą ir slaptažodį ir įveskite „Pateikti“. Įgaliojimai bus išsaugoti EEPROM, o IP nustatymai - SPIFFS. Daugiau apie tai galite rasti šioje instrukcijoje.

5 veiksmas: jutiklio duomenų gavimas iš belaidžio vibracijos ir temperatūros jutiklio

Jutiklio duomenų gavimas iš belaidžio vibracijos ir temperatūros jutiklio
Jutiklio duomenų gavimas iš belaidžio vibracijos ir temperatūros jutiklio
Jutiklio duomenų gavimas iš belaidžio vibracijos ir temperatūros jutiklio
Jutiklio duomenų gavimas iš belaidžio vibracijos ir temperatūros jutiklio

Mes gauname 54 baitų kadrą iš belaidžių temperatūros ir vibracijos jutiklių. Šiuo rėmeliu manipuliuojama, kad būtų gauti tikri temperatūros ir vibracijos duomenys.

ESP32 turi tris UART, skirtas serijiniam naudojimui

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

ir 3 aparatinės įrangos nuoseklius prievadus

  • Serijinis
  • Serija1
  • Serija2

Pirmiausia inicijuokite „Hardware Serial“antraštės failą. Čia mes naudosime RX2 ir TX2 aka. GPIO 16 ir GPIO 17 kaiščiai iš ESP32 plokštės, kad gautumėte serijinius duomenis.

#įtraukti

# define RXD2 16 # define TXD2 17

Serial2.begin (115200, SERIAL_8N1, RXD2, TXD2); // kaiščiai 16 rx2, 17 tx2, 19200 bps, 8 bitai be pariteto 1 stop bitas

Atlikę toliau nurodytus veiksmus, galėsite sužinoti tikrojo jutiklio reikšmes

  • Sukurkite kintamuosius temperatūros, drėgmės, akumuliatoriaus ir kitų jutiklių vertėms saugoti
  • Nustatykite aparatinės įrangos serijos Rx, tx kaištį, perdavimo greitį ir pariteto bitus
  • Pirmiausia patikrinkite, ar yra ką skaityti naudojant „Serial1.available“()
  • Mes gausime 54 baitų kadrą.
  • Patikrinkite, ar yra 0x7E, kuris yra pradinis baitas.
  • Vibracijos duomenis sudaro 3 ašių RMS reikšmė, 3 ašių min. Vertės, 3 ašių maksimalios vertės.
  • temperatūroje ir akumuliatoriaus vertėse bus 2 baitai duomenų
  • gaukite jutiklio pavadinimą, tipą, jutiklio versiją, kurioje bus 1 baitas duomenų ir ją bus galima gauti iš atitinkamo adreso

if (Serial2.available ()) {Serial.println ("Skaityti seriją"); duomenys [0] = Serial2.read (); vėlavimas (k); if (duomenys [0] == 0x7E) {Serial.println („Gavo paketą“); while (! Serial2.available ()); for (i = 1; i <55; i ++) {data = Serial2.read (); uždelsimas (1); } if (duomenys [15] == 0x7F) ///////, kad patikrintumėte, ar gaunami duomenys teisingi {if (duomenys [22] == 0x08) //////// įsitikinkite, kad jutiklio tipas yra teisingas {rms_x = ((uint16_t) (((duomenys [24]) << 16) + ((duomenys [25]) << 8) + (duomenys [26]))/100); rms_y = ((uint16_t) (((duomenys [27]) << 16) + ((duomenys [28]) << 8) + (duomenys [29]))/100); rms_z = ((uint16_t) (((duomenys [30]) << 16) + ((duomenys [31]) << 8) + (duomenys [32]))/100); int16_t max_x = ((uint16_t) (((duomenys [33]) << 16) + ((duomenys [34]) << 8) + (duomenys [35]))/100); int16_t max_y = ((uint16_t) (((duomenys [36]) << 16) + ((duomenys [37]) << 8) + (duomenys [38]))/100); int16_t max_z = ((uint16_t) (((duomenys [39]) << 16) + ((duomenys [40]) << 8) + (duomenys [41]))/100);

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

cTemp = ((((duomenys [51]) * 256) + duomenys [52])); plūdinė baterija = ((duomenys [18] * 256) + duomenys [19]); įtampa = 0,00322 * baterija; Serial.print („Jutiklio numeris“); Serial.println (duomenys [16]); senseNumber = duomenys [16]; Serial.print („Jutiklio tipas“); Serial.println (duomenys [22]); Serial.print („Firmware Version“); Serial.println (duomenys [17]); Serial.print ("Temperatūra Celsijaus laipsniais:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("RMS vibracija X ašyje:"); Serijinis atspaudas (rms_x); Serial.println („mg“); Serial.print („RMS vibracija Y ašyje:“); Serial.print (rms_y); Serial.println ("mg"); Serial.print ("RMS vibracija Z ašyje:"); Serial.print (rms_z); Serial.println ("mg");

Serial.print („Min. Vibracija X ašyje:“);

Serijinis atspaudas (min_x); Serial.println („mg“); Serial.print („Min. Vibracija Y ašyje:“); Serijinis atspaudas (min_y); Serial.println („mg“); Serial.print („Min. Vibracija Z ašyje:“); Serial.print (min_z); Serial.println („mg“);

Serial.print ("ADC reikšmė:");

Serial.println (baterija); Serial.print ("Baterijos įtampa:"); Serijinis atspaudas (įtampa); Serial.println ("\ n"); if (įtampa <1) {Serial.println („Laikas pakeisti bateriją“); }}} else {for (i = 0; i <54; i ++) {Serial.print (duomenys ); Serial.print (","); uždelsimas (1); }}}}

6 veiksmas: prisijungimas prie AWS

Prisijungimas prie AWS
Prisijungimas prie AWS
  • Įtraukite AWS_IOT.h, WiFi.h antraštės failus, kad nustatytumėte ryšį su AWSIoT centru
  • Įveskite savo prieglobos adresą, kliento ID, kuris bus politikos pavadinimas, ir temos pavadinimą, kuris bus daikto pavadinimas

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

Sukurkite char kintamąjį, kad išsaugotumėte savo JSON, šiuo atveju sukūrėme formatą JSON saugojimui

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

Sukurkite AWS_IOT klasės egzempliorių

AWS_IOT esp; // AWS_IOT klasės egzempliorius

Dabar prisijunkite prie AWSIoT koncentratoriaus naudodami šį metodą

void reconnectMQTT () {if (hornbill.connect (HOST_ADDRESS, CLIENT_ID) == 0) {Serial.println ("Prisijungta prie AWS"); vėlavimas (1000);

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

{Serial.println („Prenumeruoti sėkmingai“); } else {Serial.println ("Nepavyko užsiprenumeruoti, patikrinkite daikto pavadinimą ir sertifikatus"); tuo tarpu (1); }} else {Serial.println ("AWS ryšys nepavyko, patikrinkite HOST adresą"); tuo tarpu (1); }

vėlavimas (2000 m.);

}

paskelbti jutiklio duomenis kas 1 minutę

if (tick> = 60) // publikuoti į temą kas 5 sekundes {tick = 0; anglies naudingoji apkrova [PAYLOAD_MAX_LEN]; snprintf (naudingoji apkrova, PAYLOAD_MAX_LEN, formatas, senseNumber, msgCount ++, rms_x, rms_y, rms_z, cTemp, įtampa); Serial.println (naudingoji apkrova); if (hornbill.publish (TOPIC_NAME, naudingoji apkrova) == 0) {Serial.print ("Paskelbti pranešimą:"); Serial.println (naudingoji apkrova); } else {Serial.println ("Nepavyko paskelbti"); }} „vTaskDelay“(1000 / prievadasTICK_RATE_MS); pažymėkite ++;

7 veiksmas: duomenų vizualizavimas AWS

Duomenų vizualizavimas AWS
Duomenų vizualizavimas AWS
Duomenų vizualizavimas AWS
Duomenų vizualizavimas AWS
Duomenų vizualizavimas AWS
Duomenų vizualizavimas AWS
  • Prisijunkite prie savo AWS paskyros.
  • Kairiajame įrankių juostos kampe rasite skirtuką Paslaugos
  • Spustelėkite šį skirtuką ir po daiktų interneto antrašte pasirinkite „IoT Core“.
  • Pasirinkite QoS ir Nr. pranešimų abonentams. Įveskite temos pavadinimą.

8 žingsnis: bendras kodas

Visą kodą galite rasti šioje „Github“saugykloje.

Kreditai

  • Arduino Json
  • Belaidžiai temperatūros ir drėgmės jutikliai
  • ESP32
  • PubSubClient

Rekomenduojamas: