Publikowanie danych z bezprzewodowego czujnika ciśnienia za pomocą MQTT: 7 kroków
Publikowanie danych z bezprzewodowego czujnika ciśnienia za pomocą MQTT: 7 kroków
Anonim
Publikowanie danych z bezprzewodowego czujnika ciśnienia za pomocą MQTT
Publikowanie danych z bezprzewodowego czujnika ciśnienia za pomocą MQTT

ESP32 i ESP 8266 są bardzo znanymi SoC w dziedzinie IoT. To swego rodzaju dobrodziejstwo dla projektów IoT. ESP 32 to urządzenie ze zintegrowanym WiFi i BLE. Po prostu podaj swój identyfikator SSID, hasło i konfigurację IP i zintegruj rzeczy z chmurą. Tutaj, w tej instrukcji, zastanowimy się nad niektórymi podstawowymi pojęciami IoT, takimi jak platforma IoT, MQTT, portale Captive itp. Przejdźmy więc przez to

  • Architektura IoT w bardzo prostych słowach składa się z wbudowanego urządzenia i platformy IoT, aby umieścić urządzenie w chmurze. Tutaj używamy platformy UbiDots IoT do wizualizacji danych z czujników.
  • Zarządzanie ustawieniami IP i poświadczeniami użytkownika może być dla użytkownika problemem. Co jeśli Użytkownik chce zmienić dane logowania do WiFi? Co zrobić, jeśli użytkownik chce zmienić ustawienia DHCP/Statycznego IP? Flashowanie ESP32 za każdym razem nie jest niezawodne, a nawet nie jest rozwiązaniem tych problemów. Przejdziemy więc przez portal przechwytujący, aby zapisać poświadczenia Wi-Fi i inne konfiguracje.
  • MQTT staje się obecnie bardzo powszechnym terminem w świecie IoT. ominął żądania i odpowiedzi (HTTP) przez publikowanie i subskrybowanie ze względu na szybką, solidną i oszczędną architekturę.

Tutaj w tej instrukcji będziemy demonstrować.

  • Nadawanie danych uwierzytelniających Wi-Fi i MQTT za pomocą Captive Portal.
  • Publikowanie i subskrybowanie wielu danych Sensor do UbiDots.
  • Odczytywanie danych czujnika z bezprzewodowego czujnika ciśnienia i temperatury
  • Hosting formularza internetowego z ESP32.
  • Czytanie i pisanie z SPIFFS ESP32.

Krok 1: Specyfikacja sprzętu i oprogramowania

Specyfikacja sprzętu

  • ESP32 WiFi/BLE
  • Bezprzewodowy czujnik ciśnienia i temperatury

Specyfikacja oprogramowania

  • IDE Arduino
  • XCTU
  • Narzędzie Labview

Krok 2: Bezprzewodowe czujniki ciśnienia i temperatury

Bezprzewodowe czujniki ciśnienia i temperatury
Bezprzewodowe czujniki ciśnienia i temperatury
Bezprzewodowe czujniki ciśnienia i temperatury
Bezprzewodowe czujniki ciśnienia i temperatury
Bezprzewodowe czujniki ciśnienia i temperatury
Bezprzewodowe czujniki ciśnienia i temperatury

Cechy

  • Czujnik przemysłowy dalekiego zasięgu Bezprzewodowy czujnik temperatury ciśnienia
  • Zakres roboczy 0 do 14000 mbar -40° do +85°C (-40° do 185°F)
  • Konfigurowalna rozdzielczość wewnętrznego obliczenia ciśnienia 0,012 do 0,065 mbar
  • Konfigurowalna rozdzielczość wewnętrznych obliczeń Rozdzielczość temperatury 0,002 do 0,012 °C
  • Dokładność ±2,5 mbar, ±2°C
  • Wyjścia ciśnienia bezwzględnego, ciśnienia względnego i zmiany względnej wysokości
  • 2-milowy zasięg w linii wzroku z wbudowaną anteną
  • Doskonały zasięg LOS do 28 mil z antenami o dużym wzmocnieniu
  • Interfejs do Raspberry Pi, Microsoft® Azure®, Arduino i innych
  • Bezprzewodowa sieć mesh przy użyciu DigiMesh®

Konfigurowanie bezprzewodowego czujnika ciśnienia i temperatury za pomocą narzędzia Labview i XCTU

Czujnik działa w dwóch trybach

  • Tryb konfiguracji: Skonfiguruj Pan ID, opóźnienie, liczbę ponownych prób itp. Więcej na ten temat wykracza poza zakres tej instrukcji i zostanie wyjaśnione w następnej instrukcji.
  • Tryb Run: Uruchamiamy urządzenie w trybie Run. Do analizy tych wartości używamy narzędzia Labview

Ten interfejs użytkownika Labview pokazuje wartości na ładnych wykresach. Pokazuje aktualne i przeszłe wartości. Możesz przejść do tego linku, aby pobrać interfejs użytkownika Labview. kliknij ikonę Uruchom z menu strony docelowej, aby przejść do trybu uruchamiania.

Krok 3: Łączenie się z Wi-Fi

Łączę się z Wi-Fi
Łączę się z Wi-Fi
Łączę się z Wi-Fi
Łączę się z Wi-Fi

Używamy portalu przechwytującego, aby zapisać poświadczenia Wi-Fi i najechać kursorem na ustawienia IP. Aby uzyskać szczegółowe wprowadzenie do portalu dla niewoli, 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 4: Konfiguracja UbiDots na ESP32

Konfigurowanie UbiDots na ESP32
Konfigurowanie UbiDots na ESP32

Tutaj używamy bezprzewodowych czujników ciśnienia i temperatury z urządzeniem ESP 32, aby uzyskać dane dotyczące temperatury i wilgotności. Dane przesyłamy do UbiDots za pomocą protokołu MQTT. MQTT stosuje mechanizm publikowania i subskrybowania, a nie żądanie i odpowiedź. Jest szybszy i niezawodny niż HTTP. Działa to w następujący sposób.

  • Korzystamy z Harmonogramu zadań, aby zaplanować zadania, takie jak pobieranie danych z czujników, publikowanie odczytów z czujników, subskrybowanie tematu MQTT.
  • Najpierw dołącz pliki nagłówkowe Harmonogramu zadań, jego instancję i zaplanuj zadania.
  • Zaplanowaliśmy dwa zadania dotyczące dwóch różnych operacji kontrolnych.

#define _TASK_TIMEOUT#include Scheduler ts; //---------Zadania------------// Zadanie tSensor(4 * TASK_SECOND, TASK_FOREVER, &taskSensorCallback, &ts, false, NULL, &taskSensorDisable); Zadanie tWiFi(10* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);

  • Zadanie 1 polega na odczytaniu wartości czujnika, to zadanie działa przez 1 sekundę, aż do osiągnięcia limitu czasu 10 sekund.
  • Kiedy Task1 osiągnie swój limit czasu, łączymy się z lokalnym brokerem Wifi i MQTT.
  • Teraz Zadanie 2 jest włączone i wyłączamy Zadanie 1
  • Zadanie 2 polega na publikowaniu danych z czujnika brokerowi UbiDots MQTT, to zadanie działa przez 20 sekund, aż do osiągnięcia limitu czasu 20 sekund
  • Gdy zadanie 2 osiągnie swój limit czasu, zadanie 1 zostanie ponownie włączone, a zadanie 2 zostanie wyłączone. Tutaj znowu otrzymujemy zaktualizowaną wartość i proces trwa.

Odczytywanie danych czujnika I2C

Otrzymujemy 29-bajtową ramkę z bezprzewodowych czujników temperatury i wilgotności. Ta ramka jest manipulowana, aby uzyskać dane o rzeczywistej temperaturze i wilgotności

jeśli (Serial1.available())

{ dane[0] = Serial1.odczyt(); opóźnienie(k); if(data[0]==0x7E) { while (!Serial1.available()); for (i = 1; i< 36; i++) { dane = Serial1.odczyt(); opóźnienie(1); } if(data[15]==0x7F) /////// aby sprawdzić, czy otrzymane dane są poprawne { if(data[22]==0x06) //////// upewnij się, że typ czujnika jest poprawne { int cTemp = ((((dane[24]) * 256) + dane[25])); int16_t abs_pressure = ((((uint16_t)(dane[26])<<8)| dane[27])*0,001; int rlt_pressure = ((((dane[28]) * 256) + dane[29])*0,001); int16_t delta_alt = ((((uint16_t)(dane[30])<<8)| dane[31])*0,01); bateria podtrzymująca = ((dane[18] * 256) + dane[19]); napięcie podtrzymujące = 0,00322 * bateria; Serial.print("Numer czujnika"); Serial.println(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("Ciśnienie absolutne:"); Serial.println(abs_pressure); Serial.print("mbar"); Serial.print("Ciśnienie względne:"); Serial.println(rlt_pressure); Serial.print(" mbar"); Serial.print("Delta Wysokość:"); Serial.println(delta_alt); Serial.print("metr"); 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< 36; i++) { Serial.print(data); Serial.print(", "); opóźnienie(1); }} } }

Łączenie z UbiDots MQTT API

Dołącz plik nagłówkowy dla procesu MQTT

#włączać

zdefiniować inne zmienne dla MQTT, takie jak nazwa klienta, adres brokera, identyfikator tokena

#define TOKEN "BBFF-************************************" // Twój TOKEN Ubidots#define MQTT_CLIENT_NAME „******************************”

char mqttBroker = "rzeczy.ubidots.com";

ładunek znaków[100]; temat char[150]; //utwórz zmienną do przechowywania tokena ID tokena

Krok 5: Publikowanie odczytów czujników w UbiDots

Publikowanie odczytów czujników w UbiDots
Publikowanie odczytów czujników w UbiDots

Utwórz zmienne do przechowywania różnych danych z czujników i utwórz zmienną typu char do przechowywania tematu

#define VARIABLE_LABEL_TEMPF "tempF" // Przypisanie etykiety zmiennej#define VARIABLE_LABEL_TEMPC "tempC" // Przypisanie etykiety zmiennej #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "wilgotny" // Przypisanie etykiety zmiennej

char temat1[100];

char temat2[100]; char temat3[100];

opublikuj dane we wspomnianym temacie MQTT, ładunek będzie wyglądał następująco { "tempc": {value: "tempData"}}

sprintf(temat1, "%s", ""); sprintf(topic1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf(ładunek, "%s", ""); // Czyści sprintf(payload, "{"%s\":", VARIABLE_LABEL_TEMPC); // Dodaje wartość sprintf(payload, "%s{"value\":%s}", payload, str_cTemp); // Dodaje wartość sprintf(payload, "%s}", payload); // Zamyka nawiasy słownikowe Serial.println(payload); Serial.println(client.publish(topic1, payload) ? "opublikowane": "nieopublikowane"); //Zrób to samo dla innego tematu

client.publish() publikuje dane do UbiDots

Krok 6: Wizualizacja danych

Wizualizacja danych
Wizualizacja danych
  • Przejdź do Ubidots i zaloguj się na swoje konto.
  • Przejdź do pulpitu nawigacyjnego z karty Dane wymienionej na górze.
  • Teraz kliknij ikonę „+”, aby dodać nowe widżety.
  • Wybierz widżet z listy i dodaj zmienną oraz urządzenia.
  • Dane z czujników można wizualizować na desce rozdzielczej za pomocą różnych widżetów.

Krok 7: Ogólny kod

Kod Over dla HTML i ESP32 można znaleźć w tym repozytorium GitHub.

Kredyty

  • Płytka zaciskowa ncd ESP32.
  • Bezprzewodowe czujniki ciśnienia i temperatury ncd
  • pubsubklient
  • UbiDots
  • Harmonogram zadań