Spisu treści:
- Krok 1: Konfiguracja konta AWS
- Krok 2: Specyfikacje sprzętu i oprogramowania
- Krok 3: Bezprzewodowe czujniki wibracji i temperatury
- Krok 4: Oprogramowanie układowe ESP32 AWS
- Krok 5: Pobieranie danych czujnika z bezprzewodowego czujnika wibracji i temperatury
- Krok 6: Łączenie z AWS
- Krok 7: Wizualizacja danych w AWS
- Krok 8: Ogólny kod
Wideo: Pierwsze kroki z AWS IoT z bezprzewodowym czujnikiem temperatury przy użyciu MQTT: 8 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
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
Specyfikacja oprogramowania
Konto AWS
Specyfikacja sprzętu
- ESP32
- Bezprzewodowy czujnik temperatury i wibracji
- Odbiornik bramy Zigmo
Krok 3: 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
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
- RX0 GPIO 3, TX0 GPIO 1
- RX1 GPIO9, TX1 GPIO 10
- 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
- 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
- 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:
Pierwsze kroki z tanim RPLIDARem przy użyciu Jetson Nano: 5 kroków
Rozpoczęcie pracy z tanim RPLIDARem Korzystanie z Jetson Nano: Krótki przegląd Wykrywanie i określanie zasięgu światła (LiDAR) działa w taki sam sposób, jak dalmierze ultradźwiękowe z impulsem laserowym zamiast fal dźwiękowych. Yandex, Uber, Waymo i inni inwestują duże środki w technologię LiDAR w swoich samochodach autonomicznych
Monitorowanie temperatury i wilgotności przy użyciu AWS-ESP32: 8 kroków
Monitoring-Temp-and-Humidity-using-AWS-ESP32: W tym samouczku zmierzymy różne dane temperatury i wilgotności za pomocą czujnika temperatury i wilgotności. Dowiesz się również, jak przesłać te dane do AWS
Pierwsze kroki z Digispark Attiny85 przy użyciu Arduino IDE: 4 kroki
Rozpoczęcie pracy z Digispark Attiny85 przy użyciu Arduino IDE: Digispark to oparta na Attiny85 płytka rozwojowa mikrokontrolera podobna do linii Arduino, tylko tańsza, mniejsza i nieco mniej wydajna. Z całą gamą osłon rozszerzających jego funkcjonalność i możliwością korzystania ze znanego identyfikatora Arduino
Neopixel Ws2812 Rainbow LED Glow z M5stick-C - Uruchamianie Rainbow na Neopixel Ws2812 przy użyciu M5stack M5stick C przy użyciu Arduino IDE: 5 kroków
Neopixel Ws2812 Rainbow LED Glow z M5stick-C | Uruchamianie Rainbow na Neopixel Ws2812 Używając M5stack M5stick C Używając Arduino IDE: Cześć chłopaki, w tej instrukcji dowiemy się, jak używać neopikselowych ws2812 LED lub taśmy LED lub matrycy LED lub pierścienia LED z płytką rozwojową m5stack m5stick-C z Arduino IDE i zrobimy wzór tęczy z nim
Pierwsze kroki z Stm32 przy użyciu Arduino IDE: 3 kroki
Pierwsze kroki z Stm32 przy użyciu Arduino IDE: STM32 to dość potężna i popularna płyta obsługiwana przez Arduino IDE. Aby z niej skorzystać, musisz zainstalować płyty dla stm32 w Arduino IDE, więc w tej instrukcji opowiem, jak zainstalować płyty stm32 i jak zaprogramować to