Repozytorium projektu Miernik poziomu z kodami źródłowymi dla klientów JSON - Github: Miernik poziomu
Arduino Ethernet Wiznet W5100 / W5500 ESP8266 ESP32 Ultradźwiękowy HC-SR04 JSN-SR04T Sigfox JSON MQTT
JSON DATA
JSON DATA
ArduinoJSON
ArduinoJSON
MQTT
MQTT
HTTP
HTTP

Klienci JSON - Miernik poziomu


Klient JSON zbudowany na platformie Arduino, ESP8266, ESP32 umożliwia połączenie poprzez websocket z serwerem WWW (interfejs WWW Levelera). Klient wykonuje cykliczne żądanie HTTP GET co 60 sekund w celu pobrania zawartości /json_output.php strona, na której serwer WWW dystrybuuje dane JSON dotyczące poziomu wody (w centymetrach), objętości studni (w litrach) w oparciu o aktualnie ustawioną głębokość i średnicę studni. Załadowany ładunek JSON może przeanalizować klienta JSON z odpowiedzi HTTP, a następnie zdeserializować ten ciąg. Po deserializacji możliwy jest dostęp do poszczególnych kluczy, do których przypisane są wartości i uzyskanie ich -> parsowanie. Dopasowane dane są zapisywane na UART - Linia szeregowa - 115200 bodów/s. W aplikacji użytkownika, którą można dodać do istniejących kodów źródłowych klientów JSON, możliwe jest sterowanie podmiotami na podstawie tych wartości, np.: automatyczne nawadnianie po osiągnięciu określonego poziomu wody, przepompowanie wody, uruchomienie pompy, kochanie. Część oprogramowania układowego oznaczona jako MQTT lub MQTTS (zaszyfrowane MQTT) to rozszerzony klient JSON z możliwością wysyłania — Publikowanie danych do MQTT Broker IoT Industries Slovakia — Słowacki bezpłatny broker MQTT przeznaczony dla programistów. Oba warianty MQTT i MQTTS używają gniazda, które jest również używane do żądań HTTP w celu uzyskania ładunków JSON. Istniejący serwer MQTT możesz zastąpić w swoim kodzie źródłowym swoim, dzięki czemu możesz również udostępniać dane z miernika poziomu w systemach automatyki domowej (Hassio, Mosquitto MQTT, Domoticz, Loxone i inne...). W obecnej implementacji oprogramowania mikrokontroler (klient JSON) przesyła otrzymane dane do Brokera MQTT w mierniku poziomu tematycznego, natomiast poszczególne temperatury są różnicowane w podtematach.

Przykładowe implementacje programów dla klientów JSON: TUTAJ

Dostępne biblioteki dla mikrokontrolerów (Arduino / ESP) - klienci JSON


Archiwum biblioteki (.zip) rozwiń do C:/Users/[User]/Documents/Arduino/libraries
Nazwa biblioteki Funkcja biblioteki Ściągnij
PubSubClient

Biblioteka dla mikrokontrolerów AVR (ATmega) Arduino Uno / Nano / Mega, ESP8266 i ESP32. Umożliwia komunikację poprzez protokół MQTT, istnieje również możliwość realizacji szyfrowanego połączenia z MQTT Broker, dla mikrokontrolerów ESP wymagane jest zastosowanie klasy WiFiClientSecure.

Ściągnij
ArduinoJson

Biblioteka dla mikrokontrolerów AVR (ATmega) Arduino Uno / Nano / Mega, ESP8266 i ESP32. Pozwala na deserializację ciągu w strukturze JSON, może analizować wartość przypisaną do klucza.

Ściągnij
Implementacja MQTTS jest dostępna dla mikrokontrolerów ESP8266, ESP32. ESP8266 i ESP32 używają certyfikatu Root CA do szyfrowanego połączenia z serwerem MQTT. Zaszyfrowany port serwera MQTT to domyślnie 8883, nieszyfrowany 1883. W celu uzyskania certyfikatu Root CA dla konkretnego serwera MQTT (domeny) można skorzystać z narzędzia OpenSSL, które umożliwia łatwe wyszukiwanie i wyświetlanie żądanych informacji. Poszczególne certyfikaty są wymienione w kolejności Chain-of-Trust, m.in. od głównego urzędu certyfikacji do średniozaawansowanego.
Polecenie uzyskania certyfikatu głównego urzędu certyfikacji, który wystawił certyfikat dla serwera MQTT (wydawcy):
openssl s_client -showcerts -verify 5 -connect mqttserver.com:8883 < /dev/null

Przykładowe zestawienie danych w formacie JSON

{
"value": 378,
"volume": 1900.04
}

Tematy używane do publikowania w MQTT Broker to:


  • hladinomer/objem - dla objętości studni w litrach
  • hladinomer/vyska - dla aktualnego poziomu wody w centymetrach

  • Temat do subskrybowania:


  • hladinomer/# - usuwa wszystkie podtematy w hladinomer/, czyli objętość, wzrost
  • Klient MQTT ma subskrybowaną subskrypcję do głównego miernika poziomu tematu i wszystkich jego podtematów. Jednocześnie może zweryfikować, czy informacje zostały pomyślnie opublikowane na MQTT Broker - odpisze je z powrotem do UART. OSTRZEŻENIE: MQTT Broker IoT Industries Slovakia, który jest używany w przykładowej implementacji, jest publiczny, więc dane mogą być zmieniane, nadpisywane, odczytywane przez dowolnego użytkownika! Jeśli jakikolwiek inny użytkownik prześle oprogramowanie układowe klienta JSON do swojego mikrokontrolera bez żadnych zmian, nadpisze dane w predefiniowanym temacie, a Ty go nadpiszesz. Wskazane jest zatem wybranie innego tematu, na który dane będą przesyłane podczas faktycznego wdrożenia.


    Wyjście JSON PHP, analizowanie i publikowanie do MQTT Broker:


    JSON client (Arduino, ESP8266, ESP32) dla miernika poziomu - wyjście UART

    HiveMQ client - Subscribe topicu hladinomer/#

    JSON client MQTT Broker IoT Industries Slovakia - wyjście tematu - miernik poziomu subskrypcji