Spisu treści:

Pierwsze kroki z AWS IoT z bezprzewodowym czujnikiem temperatury przy użyciu MQTT: 8 kroków
Pierwsze kroki z AWS IoT z bezprzewodowym czujnikiem temperatury przy użyciu MQTT: 8 kroków

Wideo: Pierwsze kroki z AWS IoT z bezprzewodowym czujnikiem temperatury przy użyciu MQTT: 8 kroków

Wideo: Pierwsze kroki z AWS IoT z bezprzewodowym czujnikiem temperatury przy użyciu MQTT: 8 kroków
Wideo: Jak wykorzystać potencjał danych IoT z usługami AWS 2024, Lipiec
Anonim
Pierwsze kroki z AWS IoT z bezprzewodowym czujnikiem temperatury przy użyciu MQTT
Pierwsze kroki z AWS IoT z bezprzewodowym czujnikiem temperatury przy użyciu MQTT

We wcześniejszych Instructables przeszliśmy przez różne platformy chmurowe, takie jak Azure, Ubidots, ThingSpeak, Losant itp. Używaliśmy protokołu MQTT do wysyłania danych z czujników do chmury na prawie wszystkich platformach chmurowych. Więcej informacji na temat MQTT, jego zalet i zalet w stosunku do protokołu HTTP można znaleźć w tej instrukcji.

W tej instrukcji przybliżymy kolejną i najbardziej znaną platformę chmurową Amazon Web Services. Wielu z was może być zaznajomionych z AWS, czyli Amazon Web Services i funkcjonalnością chmury zapewnianą przez AWS. Od wielu lat stanowi rdzeń tworzenia stron internetowych. Wraz ze wzrostem skali zastosowań IoT, AWS wymyślił rozwiązanie AWSIOT. AWSIOT to niezawodne rozwiązanie do hostingu naszych aplikacji IoT.

Postępując zgodnie z tą instrukcją:

  • Będziesz mógł założyć konto AWS dla swojej aplikacji IoT
  • Będziesz mógł podłączyć ESP32 do rdzenia AWS IoT
  • Wysyłaj i odbieraj wiadomości za pomocą protokołu MQTT i
  • Wizualizuj przesłane dane w AWS

Krok 1: Konfiguracja konta AWS

Konfiguracja konta AWS jest dość łatwa. Wystarczy wgrać kilka certyfikatów, dołączyć do niego polityki, zarejestrować urządzenie i zacząć odbierać wiadomości z danymi czujnika w AWS.

Aby skonfigurować konto AWS, postępuj zgodnie z tym samouczkiem.

Krok 2: Specyfikacje sprzętu i oprogramowania

Specyfikacje sprzętu i oprogramowania
Specyfikacje sprzętu i oprogramowania

Specyfikacja oprogramowania

Konto AWS

Specyfikacja sprzętu

  • ESP32
  • Bezprzewodowy czujnik temperatury i wibracji
  • Odbiornik bramy Zigmo

Krok 3: Bezprzewodowe czujniki wibracji i temperatury

Bezprzewodowe czujniki wibracji i temperatury
Bezprzewodowe czujniki wibracji i temperatury

Jest to bezprzewodowy czujnik wibracji i temperatury dalekiego zasięgu Industrial IoT, który może pochwalić się zasięgiem do 2 mil przy użyciu bezprzewodowej architektury sieci kratowej. Wyposażony w 16-bitowy czujnik wibracji i temperatury, czujnik ten przesyła bardzo dokładne dane dotyczące wibracji w określonych przez użytkownika odstępach czasu. Posiada następujące cechy:

  • Przemysłowy 3-osiowy czujnik wibracji o zakresie ± 32g
  • Oblicza wibracje RMS, MAX i MIN g
  • Usuwanie szumów za pomocą filtra dolnoprzepustowego
  • Zakres częstotliwości (przepustowość) do 12 800 Hz
  • Częstotliwość próbkowania do 25, 600 Hz
  • Szyfrowana komunikacja z zasięgiem bezprzewodowym do 2 mil
  • Zakres temperatury roboczej -40 do +85 °C
  • Naścienna lub montowana na magnes obudowa o stopniu ochrony IP65Przykładowe oprogramowanie do Visual Studio i LabVIEW
  • Czujnik wibracji z opcją sondy zewnętrznej
  • Do 500 000 transmisji z 4 baterii AA Dostępnych jest wiele opcji bram i modemów

Krok 4: Oprogramowanie układowe ESP32 AWS

Aby połączyć się z AWS i rozpocząć wysyłanie danych, wykonaj następujące kroki

  • Pobierz bibliotekę AWS z następującego repozytorium Github
  • sklonuj repozytorium i umieść plik AWS_IOT w folderze biblioteki katalogu Arduino

git clone

Przejdźmy teraz przez kod:

  • W tej aplikacji wykorzystaliśmy portal przechwytujący, aby zapisać poświadczenia Wi-Fi i poruszać się po ustawieniach IP. Aby uzyskać szczegółowe wprowadzenie do portalu przechwytującego, możesz przejść przez następujące instrukcje.
  • Portal przechwytujący daje nam możliwość wyboru między ustawieniami statycznymi i DHCP. Wystarczy wprowadzić dane uwierzytelniające, takie jak statyczny adres IP, maska podsieci, brama i brama czujnika bezprzewodowego zostaną skonfigurowane na tym adresie IP.
  • Hostowana jest strona internetowa, na której znajduje się lista z dostępnymi sieciami Wi-Fi i RSSI. Wybierz sieć Wi-Fi i hasło i wprowadź prześlij. Poświadczenia zostaną zapisane w pamięci EEPROM, a ustawienia IP zostaną zapisane w SPIFFS. Więcej na ten temat można znaleźć w tej instrukcji.

Krok 5: Pobieranie danych czujnika z bezprzewodowego czujnika wibracji i temperatury

Pobieranie danych czujnika z bezprzewodowego czujnika wibracji i temperatury
Pobieranie danych czujnika z bezprzewodowego czujnika wibracji i temperatury
Pobieranie danych czujnika z bezprzewodowego czujnika wibracji i temperatury
Pobieranie danych czujnika z bezprzewodowego czujnika wibracji i temperatury

Otrzymujemy 54-bajtową ramkę z bezprzewodowych czujników temperatury i wibracji. Ta ramka jest manipulowana, aby uzyskać rzeczywistą temperaturę i dane dotyczące wibracji.

ESP32 ma trzy UART dostępne do użytku szeregowego

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

i 3 sprzętowe porty szeregowe

  • Seryjny
  • Numer seryjny1
  • Numer seryjny2

Najpierw zainicjuj plik nagłówkowy Hardware Serial. Tutaj będziemy używać RX2 i TX2 aka. Piny GPIO 16 i GPIO 17 płyty ESP32 do pobierania danych szeregowych.

#włączać

# zdefiniuj RXD2 16 # zdefiniuj TXD2 17

Serial2.początek (115200, SERIAL_8N1, RXD2, TXD2); // piny 16 rx2, 17 tx2, 19200 bps, 8 bitów brak parzystości 1 bit stopu

Poniższe kroki doprowadzą Cię dalej do uzyskania rzeczywistych wartości czujnika

  • Twórz zmienne do przechowywania temperatury, wilgotności, baterii i innych wartości czujników
  • Ustaw Rx, tx pin, szybkość transmisji i bity parzystości dla szeregowego sprzętu
  • Najpierw sprawdź, czy jest coś do przeczytania za pomocą Serial1.available()
  • Otrzymamy ramkę o długości 54 bajtów.
  • Sprawdź 0x7E, który jest bajtem początkowym.
  • Dane dotyczące wibracji składają się z wartości skutecznej dla 3 osi, wartości minimalnych dla 3 osi, wartości maksymalnych dla 3 osi.
  • wartości temperatury i baterii będą zawierać 2 bajty danych
  • pobierz nazwę czujnika, typ, wersja czujnika będzie zawierała 1 bajt danych i stamtąd można uzyskać odpowiedni adres

if (Serial2.available()) { Serial.println("Odczytaj numer seryjny"); dane[0] = Serial2.odczyt(); opóźnienie(k); if(data[0]==0x7E) { Serial.println("Pobrano pakiet"); while (!Serial2.available()); for (i = 1; i< 55; i++) { dane = Serial2.odczyt(); opóźnienie(1); } if(data[15]==0x7F) /////// aby sprawdzić, czy otrzymane dane są poprawne { if(data[22]==0x08) //////// upewnij się, że typ czujnika jest poprawne { rms_x = ((uint16_t)(((dane[24])<<16) + ((dane[25])<<8) + (dane[26]))/100); rms_y = ((uint16_t)(((dane[27])<<16) + ((dane[28])<<8) + (dane[29]))/100); rms_z = ((uint16_t)(((dane[30])<<16) + ((dane[31])<<8) + (dane[32]))/100); int16_t max_x = ((uint16_t)(((dane[33])<<16) + ((dane[34])<<8) + (dane[35]))/100); int16_t max_y = ((uint16_t)(((dane[36])<<16) + ((dane[37])<<8) + (dane[38]))/100); int16_t max_z = ((uint16_t)(((dane[39])<<16) + ((dane[40])<<8) + (dane[41]))/100);

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

cTemp = ((((dane[51]) * 256) + dane[52])); bateria podtrzymująca = ((dane[18] * 256) + dane[19]); napięcie = 0,00322 * bateria; Serial.print("Numer czujnika"); Serial.println(dane[16]); numerZeznania = dane[16]; Serial.print("Typ czujnika"); Serial.println(dane[22]); Serial.print("Wersja oprogramowania"); Serial.println(dane[17]); Serial.print("Temperatura w stopniach Celsjusza:"); druk.seryjny(cTemp); Serial.println("C"); Serial.print("Wibracje RMS w osi X:"); Serial.print(rms_x); Serial.println(" mg"); Serial.print("Wibracje RMS w osi Y:"); Serial.print(rms_y); Serial.println(" mg"); Serial.print("Wibracje RMS w osi Z:"); Serial.print(rms_z); Serial.println(" mg");

Serial.print("Minimalne wibracje w osi X:");

Serial.print(min_x); Serial.println(" mg"); Serial.print("Minimalne wibracje w osi Y:"); Serial.print(min_y); Serial.println(" mg"); Serial.print("Minimalne wibracje w osi Z:"); Serial.print(min_z); Serial.println(" mg");

Serial.print("wartość ADC:");

Serial.println(akumulator); Serial.print("Napięcie baterii:"); Serial.print(napięcie); Serial.println("\n"); if (napięcie < 1) { Serial.println("Czas na wymianę baterii"); } } } else { for (i = 0; i< 54; i++) { Serial.print(data); Serial.print(", "); opóźnienie(1); } } } }

Krok 6: Łączenie z AWS

Łączenie z AWS
Łączenie z AWS
  • Dołącz pliki nagłówkowe AWS_IOT.h, WiFi.h, aby skonfigurować połączenie z koncentratorem AWSIoT
  • Wprowadź swój adres hosta, identyfikator klienta, który będzie nazwą polityki, i nazwę tematu, która będzie nazwą rzeczy

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

Utwórz zmienną char do przechowywania twojego JSON, w tym przypadku stworzyliśmy format do przechowywania JSON

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

Utwórz instancję klasy AWS_IOT

AWS_IOT w szczególności; //Instancja klasy AWS_IOT

Teraz połącz się z koncentratorem AWSIOT, korzystając z następującej metody

void reconnectMQTT(){ if(hornbill.connect(HOST_ADDRESS, CLIENT_ID)== 0) { Serial.println("Połączono z AWS"); opóźnienie (1000);

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

{ Serial.println("Subskrypcja powiodła się"); } else { Serial.println("Subskrypcja nie powiodła się, sprawdź nazwę obiektu i certyfikaty"); natomiast(1); } } else { Serial.println("Połączenie AWS nie powiodło się, sprawdź adres HOSTA"); natomiast(1); }

opóźnienie (2000);

}

publikować dane z czujnika co 1 minutę

if(tick >= 60) // publikuj w temacie co 5 sekund { tick=0; ładunek znaków [PAYLOAD_MAX_LEN]; snprintf(ładunek, PAYLOAD_MAX_LEN, format, sensNumber, msgCount++, rms_x, rms_y, rms_z, cTemp, napięcie); Serial.println(ładunek); if(hornbill.publish(TOPIC_NAME, payload) == 0) { Serial.print("Publikuj wiadomość:"); Serial.println(ładunek); } else { Serial.println("Publikowanie nie powiodło się"); } } vTaskDelay(1000 / portTICK_RATE_MS); kleszcz++;

Krok 7: Wizualizacja danych w AWS

Wizualizacja danych w AWS
Wizualizacja danych w AWS
Wizualizacja danych w AWS
Wizualizacja danych w AWS
Wizualizacja danych w AWS
Wizualizacja danych w AWS
  • Zaloguj się na swoje konto AWS.
  • w lewym rogu paska narzędzi znajdziesz zakładkę Usługi
  • Kliknij tę kartę i pod nagłówkiem Internet of Things wybierz IoT Core.
  • Wybierz QoS i nie. wiadomości do subskrybentów. Wpisz nazwę tematu.

Krok 8: Ogólny kod

Cały kod można znaleźć w tym repozytorium Github.

Kredyty

  • Arduino Json
  • Bezprzewodowe czujniki temperatury i wilgotności
  • ESP32
  • PubSubClient

Zalecana: