Konfiguracja urządzeń za pomocą biblioteki DeviceConfigJSON

Cele

Celem projektu było opracowanie biblioteki DeviceConfigJSON, służącej do konfiguracji urządzeń, mikrokontrolerów (w szczególności ESP32) za pomocą formatu JSON.  W artykule zostaną przedstawione kluczowe cechy biblioteki, opis jej funkcjonalności oraz sposób implementacji przy użyciu przykładowego kodu.

Należy zauważyć, że po zaimplementowaniu w swoim urządzeniu tej biblioteki istnieją gotowe aplikacje umożliwiające wykonanie konfiguracji urządzenia. Dla przykładu aplikacja IoT_Configurator dla smartfonów z systemem Android.

Opis Biblioteki

DeviceConfigJSON to biblioteka w języku C++, umożliwiająca konfigurację urządzeń ESP32 przy użyciu formatu JSON. Biblioteka ta stanowi elastyczny protokół konfiguracyjny do interakcji z urządzeniami na przykład poprzez Bluetooth z aplikacji na platformie Android. Pozwala użytkownikom dynamicznie dostosowywać ustawienia mikrokontrolera, takie jak sieć Wi-Fi, parametry komunikacyjne i inne, za pomocą prostych i intuicyjnych poleceń JSON.

Główne cechy biblioteki DeviceConfigJSON:

  • Łatwa integracja z projektami ESP32, umożliwiająca szybką i elastyczną konfigurację urządzeń.
  • Obsługa protokołu JSON, zapewniającego czytelną i zrozumiałą formę konfiguracji dla użytkowników.
  • Kompatybilność z aplikacjami na platformie Android, umożliwiająca konfigurację poprzez interfejs mobilny.
  • Obsługa różnych parametrów konfiguracji, dostosowująca się do różnych przypadków użycia.
  • Możliwość zarządzania i przechowywania konfiguracji w plikach JSON.

Biblioteka DeviceConfigJSON jest idealnym narzędziem dla twórców projektów IoT, oferując wygodną konfigurację urządzenia podczas użytkowania, bez konieczności modyfikacji kodu źródłowego.

Biblioteka została włączona do oficjalnego repozytorium Arduino i jest dostępna do automatycznej instalacji w środowisku Arduino.

Rodzaje pól

Biblioteka DeviceConfigJSON oferuje różnorodne rodzaje pól do konfigurowania ustawień urządzenia, z każdym służącym określonemu celowi:

  • Etykieta: To pole służy do wyświetlania tekstowych informacji lub opisów. Jest to pole informacji np. o temperaturze. Bez możliwości edycji.
  • Pole tekstowe: Idealne do wprowadzania tekstu, to pole umożliwia użytkownikom wprowadzanie wartości liczbowych lub tekstu.
  • Pole hasła: Specjalnie zaprojektowane do wprowadzania haseł, na przykład do sieci Wi-Fi, w celu zapewnienia bezpieczeństwa.
  • Stan: To pole przekazuje stany logiczne, dostarczając informacji na temat tego, czy określona funkcja lub warunek jest obecnie aktywny.
  • Przełącznik binarny: Przełącznik binarny to dwustanowy przełącznik, który pozwala użytkownikom włączać lub wyłączać coś, zapewniając prosty sposób włączania lub wyłączania funkcji. Informuje też aktualnym stanie logicznym.
  • Wybór: Pole wyboru umożliwia użytkownikom wybieranie spośród listy predefiniowanych opcji. Jest szczególnie przydatne podczas wybierania spośród dostępnych sieci Wi-Fi lub innych scenariuszy wyboru.

Dzięki tym zróżnicowanym rodzajom pól, biblioteka ułatwia tworzenie wszechstronnych i przyjaznych użytkownikowi interfejsów konfiguracyjnych dla urządzeń ESP32, zapewniając, że każde ustawienie może być skonfigurowane w sposób najlepiej odpowiadający jego celowi.

Budowa JSON

Aby zrozumieć sposób konfiguracji urządzenia za pomocą biblioteki, warto przyjrzeć się strukturze formatu JSON. Metoda transmisji danych jest taka sama zarówno podczas wysyłania danych do urządzenia, jak i odbierania danych od niego. Format ten powinien obejmować opisy konfigurowanych elementów oraz odpowiadające im ustawienia. Podstawowy przykład struktury JSON zawierający wszystkie obsługiwane rodzaje pól.

Opis metod klasy

Biblioteka napisana jest obiektowo, dostarcza zestaw metod umożliwiających definiowanie pól konfiguracji oraz pobierania odesłanych danych. Biblioteka nie wymaga spełnienia żadnych zależności, nie jest wymagane instalowanie innych bibliotek. Poniżej krótki opis każdej z metod.

Konstruktor:

  • DeviceConfigJSON(const String& formn, const String& formt): Konstruktor klasy, inicjalizuje obiekt konfiguracji.

Definicja pól:

  • void label(const String& name, const String value): Metoda do dodawania pola etykiety.
  • void text(const String& label, const String& name, String value): Metoda do dodawania pola tekstowego.
  • void password(const String& label, const String& name, String value): Metoda do dodawania pola hasła.
  • void state(const String& label, const String& name, bool value): Metoda do dodawania pola stanu.
  • void binswitch(const String& label, const String& name, bool set, bool autosend): Metoda do dodawania pola przełącznika binarnego.
  • void select(const String& label, const String& name, int set, String values[][2], int numValues): Metoda do dodawania pola wyboru.

Obsługa obiektu:

  • String getJSON(): Metoda zwracająca sformatowany JSON zdefiniowany przez użytkownika.
  • void clear(): Metoda czyszcząca ustawienia obiektu.

Pobranie danych:

  • String getValue(String& js, const String& searchString): Metoda do pobierania z JSON wartości Value z podanej nazwy pola.
  • template <typename T>
    T getSet(String& js, const String& searchString)
    : Metoda do pobierania z JSON wartości Set z podanej nazwy pola, zwraca typ bool lub int zależnie od rodzaju pola.

Odnośniki