Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
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
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
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
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
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
- 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ń