Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
V dřívějších Instructables jsme prošli různými cloudovými platformami, jako jsou Azure, Ubidots, ThingSpeak, Losant atd. Pro odesílání dat senzorů do cloudu používáme téměř na celé cloudové platformě protokol MQTT. Další informace o MQTT, jeho výhodách a výhodách oproti protokolu HTTP naleznete v tomto pokynu.
V tomto pokynu přiblížíme ještě další a nejznámější cloudovou platformu Amazon Web Services. Mnoho z vás možná zná AWS alias Amazon Web Services a cloudové funkce poskytované AWS. Je to již mnoho let jádro webového vývoje. S rostoucím rozsahem aplikací IoT přichází AWS s řešením AWSIoT. AWSIoT je spolehlivé řešení pro hostování našich aplikací IoT.
Dodržováním tohoto pokynu:
- Pro svou aplikaci IoT budete moci nastavit účet AWS
- Budete moci připojit jádro ESP32 k AWS IoT
- Odesílejte a přijímejte zprávy pomocí protokolu MQTT a
- Vizualizujte odeslaná data v AWS
Krok 1: Nastavení účtu AWS
Nastavení účtu AWS je poměrně snadné. Stačí nahrát několik certifikátů, připojit k nim zásady, zaregistrovat zařízení a začít přijímat zprávy o senzorech v AWS.
Chcete -li nastavit účet AWS, postupujte podle tohoto tutoriálu.
Krok 2: Specifikace hardwaru a softwaru
Specifikace softwaru
Účet AWS
Specifikace hardwaru
- ESP32
- Bezdrátový snímač teploty a vibrací
- Přijímač brány Zigmo
Krok 3: Bezdrátové snímače vibrací a teploty
Jedná se o bezdrátový snímač vibrací a teploty IoT s dlouhým dosahem, který se může pochlubit dosahem až 2 míle pomocí bezdrátové síťové architektury. Tento 16bitový snímač vibrací a teploty přenáší vysoce přesná data o vibracích v uživatelem definovaných intervalech. Má následující funkce:
- Průmyslový tříosý snímač vibrací s rozsahem ± 32 g
- Vypočítává RMS, MAX a MIN g vibrací
- Odstranění šumu pomocí dolního filtru
- Frekvenční rozsah (šířka pásma) až 12 800 Hz
- Vzorkovací frekvence až 25 600 Hz
- Šifrovaná komunikace s bezdrátovým dosahem 2 míle
- Rozsah provozních teplot -40 až +85 ° C
- Nástěnná nebo magnetická skříň s krytím IP65 Příklad softwaru pro Visual Studio a LabVIEW
- Senzor vibrací s možností externí sondy
- Až 500 000 přenosů ze 4 baterií AA K dispozici je mnoho možností brány a modemu
Krok 4: Firmware ESP32 AWS
Chcete -li se připojit k AWS a začít odesílat data, proveďte následující kroky
- Stáhněte si knihovnu AWS z následujícího úložiště Github
- naklonujte repo a umístěte soubor AWS_IOT do složky knihovny v adresáři Arduino
klon git
Nyní si projdeme kód:
- V této aplikaci jsme využili portál pro zajetí k uložení přihlašovacích údajů WiFi a k přechodu přes nastavení IP. Podrobný úvod do portálu pro zajetí můžete projít následujícím návodem.
- Portál pro zajetí nám dává možnost vybrat si mezi statickým a DHCP nastavením. Stačí zadat přihlašovací údaje, jako je statická IP, maska podsítě, brána a bezdrátová senzorová brána se na této IP nakonfigurují.
- Hostuje se webová stránka se seznamem dostupných WiFi sítí a RSSI. Vyberte síť WiFi a heslo a zadejte odeslat. Pověření budou uložena do EEPROM a nastavení IP bude uloženo do SPIFFS. Více o tom najdete v tomto návodu.
Krok 5: Získání dat senzoru z bezdrátového senzoru vibrací a teploty
Získáváme 54bajtový rámec z bezdrátových snímačů teploty a vibrací. Tento rámec je upraven tak, aby získal aktuální teplotu a údaje o vibracích.
ESP32 má pro sériové použití k dispozici tři UART
- RX0 GPIO 3, TX0 GPIO 1
- RX1 GPIO9, TX1 GPIO 10
- RX2 GPIO 16, TX2 GPIO 17
a 3 hardwarové sériové porty
- Seriál
- Sériové 1
- Sériové 2
Nejprve inicializujte hlavičkový soubor Hardware Serial. Zde budeme používat RX2 a TX2 aka. GPIO 16 a GPIO 17 piny desky ESP32 pro získání sériových dat.
#zahrnout
# definovat RXD2 16 # definovat TXD2 17
Serial2.begin (115200, SERIAL_8N1, RXD2, TXD2); // piny 16 rx2, 17 tx2, 19200 bps, 8 bitů bez parity 1 stop bit
Následující kroky vás dále dovedou k získání skutečných hodnot senzorů
- Vytvářejte proměnné pro ukládání hodnot teploty, vlhkosti, baterie a dalších senzorů
- Pro hardwarový seriál nastavte bity Rx, tx, přenosovou rychlost a paritu
- Nejprve zkontrolujte, zda je možné něco přečíst pomocí Serial1.available ()
- Dostaneme rám 54 bajtů.
- Zkontrolujte 0x7E, což je počáteční bajt.
- Údaje o vibracích se skládají z hodnoty RMS pro 3 osy, minimální hodnoty pro 3 osy, maximální hodnoty pro 3 osy.
- hodnoty teploty a baterie budou obsahovat 2 bajty dat
- získejte název senzoru, typ, verze senzoru bude obsahovat 1 byte dat a lze jej získat z příslušné adresy
if (Serial2.available ()) {Serial.println ("Read Serial"); data [0] = Serial2.read (); zpoždění (k); if (data [0] == 0x7E) {Serial.println ("Got Packet"); while (! Serial2.available ()); pro (i = 1; i <55; i ++) {data = Serial2.read (); zpoždění (1); } if (data [15] == 0x7F) /////// pro kontrolu správnosti přijímaných dat {if (data [22] == 0x08) //////// zkontrolujte typ senzoru je správné {rms_x = ((uint16_t) (((data [24]) << 16) + ((data [25]) << 8) + (data [26]))/100); rms_y = ((uint16_t) (((data [27]) << 16) + ((data [28]) << 8) + (data [29]))/100); rms_z = ((uint16_t) (((data [30]) << 16) + ((data [31]) << 8) + (data [32]))/100); int16_t max_x = ((uint16_t) (((data [33]) << 16) + ((data [34]) << 8) + (data [35]))/100); int16_t max_y = ((uint16_t) (((data [36]) << 16) + ((data [37]) << 8) + (data [38]))/100); int16_t max_z = ((uint16_t) (((data [39]) << 16) + ((data [40]) << 8) + (data [41]))/100);
int16_t min_x = ((uint16_t) (((data [42]) << 16) + ((data [43]) << 8) + (data [44]))/100); int16_t min_y = ((uint16_t) (((data [45]) << 16) + ((data [46]) << 8) + (data [47]))/100); int16_t min_z = ((uint16_t) (((data [48]) << 16) + ((data [49]) << 8) + (data [50]))/100);
cTemp = ((((data [51]) * 256) + data [52])); float baterie = ((data [18] * 256) + data [19]); napětí = 0,00322 * baterie; Serial.print („číslo senzoru“); Serial.println (data [16]); senseNumber = data [16]; Serial.print („Typ senzoru“); Serial.println (data [22]); Serial.print („Verze firmwaru“); Serial.println (data [17]); Serial.print ("Teplota ve stupních Celsia:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("RMS vibrace v ose X:"); Serial.print (rms_x); Serial.println ("mg"); Serial.print ("RMS vibrace v ose Y:"); Serial.print (rms_y); Serial.println ("mg"); Serial.print ("RMS vibrace v ose Z:"); Serial.print (rms_z); Serial.println ("mg");
Serial.print ("Minimální vibrace v ose X:");
Serial.print (min_x); Serial.println ("mg"); Serial.print ("Minimální vibrace v ose Y:"); Serial.print (min_y); Serial.println ("mg"); Serial.print ("Minimální vibrace v ose Z:"); Serial.print (min_z); Serial.println ("mg");
Serial.print ("hodnota ADC:");
Serial.println (baterie); Serial.print ("Napětí baterie:"); Serial.print (napětí); Serial.println ("\ n"); if (napětí <1) {Serial.println ("Čas na výměnu baterie"); }}} else {for (i = 0; i <54; i ++) {Serial.print (data ); Serial.print (","); zpoždění (1); }}}}
Krok 6: Připojení k AWS
- Zahrňte soubory záhlaví AWS_IOT.h, WiFi.h pro nastavení připojení k rozbočovači AWSIoT
- Zadejte svou hostitelskou adresu, ID klienta, což bude název zásady, a název tématu, který bude název věci
// ********* Pověření AWS ************* // char HOST_ADDRESS = "a2smbp7clzm5uw-ats.iot.us-east-1.amazonaws.com"; char CLIENT_ID = "ncdGatewayPolicy"; char TOPIC_NAME = "ncdGatewayThing";
Vytvořte proměnnou char pro uložení vašeho JSON, v tomto případě jsme vytvořili formát pro ukládání JSON
const char *format = "{" SensorId / ": \"%d / ", \" messageId / ":%d, \" rmsX / ":%d, \" rmsY / ":%d, \" rmsZ / ":%d, \" cTemp / ":%d, \" napětí / ":%. 2f}";
Vytvořte instanci třídy AWS_IOT
AWS_IOT esp; // Instance třídy AWS_IOT
Nyní se připojte k rozbočovači AWSIoT pomocí následující metody
void reconnectMQTT () {if (hornbill.connect (HOST_ADDRESS, CLIENT_ID) == 0) {Serial.println ("Connected to AWS"); zpoždění (1000);
if (0 == hornbill.subscribe (TOPIC_NAME, mySubCallBackHandler))
{Serial.println ("Úspěšné přihlášení k odběru"); } else {Serial.println ("Přihlášení se nezdařilo, zkontrolujte název věci a certifikáty"); zatímco (1); }} else {Serial.println ("Připojení AWS se nezdařilo, zkontrolujte adresu HOST"); zatímco (1); }
zpoždění (2000);
}
publikovat data ze senzoru po každé 1 minutě
if (tick> = 60) // publikovat na téma každých 5 sekund {tick = 0; užitečné zatížení char [PAYLOAD_MAX_LEN]; snprintf (užitečné zatížení, PAYLOAD_MAX_LEN, formát, senseNumber, msgCount ++, rms_x, rms_y, rms_z, cTemp, napětí); Serial.println (užitečné zatížení); if (hornbill.publish (TOPIC_NAME, užitečné zatížení) == 0) {Serial.print ("Publikovat zprávu:"); Serial.println (užitečné zatížení); } else {Serial.println ("Publikování se nezdařilo"); }} vTaskDelay (1000 / portTICK_RATE_MS); zaškrtněte ++;
Krok 7: Vizualizace dat v AWS
- Přihlaste se ke svému účtu AWS.
- v levém rohu panelu nástrojů najdete kartu Služby
- Klikněte na tuto kartu a v části Internet věcí vyberte IoT Core.
- Vyberte QoS a č. zpráv pro předplatitele. Zadejte název tématu.
Krok 8: Celkový kód
Celkový kód najdete v tomto úložišti Github.
Kredity
- Arduino Json
- Bezdrátové snímače teploty a vlhkosti
- ESP32
- PubSubClient