# Начало работы ## Платформы, версии Библиотека должна работать на любой Arduino-совместимой платформе, тестировалась на AVR, ESP8266 v3.1.2, ESP32 v2.0.14 (dev, S2, S3, C3). **На старых версиях esp32 (ниже 2.x) не работает!** ### Arduino IDE Ссылки для менеджера плат. Рекомендуются актуальные версии: - ESP8266 v2.7+ https://arduino.esp8266.com/stable/package_esp8266com_index.json - ESP32 v2+ https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json ### Platformio Мой .ini файл для всех платформ. Указана платформа, файловая система и все нужные зависимости:
platformio.ini ```ini [env:d1_mini] framework = arduino monitor_speed = 115200 platform = espressif8266 board = d1_mini upload_speed = 921600 monitor_filters = esp8266_exception_decoder, default build_type = debug board_build.filesystem = littlefs lib_deps = knolleary/PubSubClient links2004/WebSockets ;GyverLibs/GyverHub https://github.com/GyverLibs/GyverHub.git GyverLibs/StringUtils GyverLibs/Pairs GyverLibs/GSON [env:esp32dev] framework = arduino monitor_speed = 115200 platform = espressif32 board = esp32dev upload_speed = 921600 board_build.filesystem = littlefs lib_deps = knolleary/PubSubClient links2004/WebSockets ;GyverLibs/GyverHub https://github.com/GyverLibs/GyverHub.git GyverLibs/StringUtils GyverLibs/Pairs GyverLibs/GSON [env:esp32cam] framework = arduino monitor_speed = 115200 platform = espressif32 board = esp32cam board_build.mcu = esp32 upload_speed = 921600 board_build.f_cpu = 240000000L board_build.filesystem = littlefs lib_deps = knolleary/PubSubClient links2004/WebSockets ;GyverLibs/GyverHub https://github.com/GyverLibs/GyverHub.git GyverLibs/StringUtils GyverLibs/Pairs GyverLibs/GSON [env:esp32-c3] framework = arduino monitor_speed = 115200 platform = espressif32 board = esp32dev board_build.mcu = esp32c3 upload_speed = 921600 board_build.f_cpu = 80000000L lib_deps = knolleary/PubSubClient links2004/WebSockets ;GyverLibs/GyverHub https://github.com/GyverLibs/GyverHub.git GyverLibs/StringUtils GyverLibs/Pairs GyverLibs/GSON [env:s2_mini] framework = arduino monitor_speed = 115200 platform = espressif32 board = lolin_s2_mini board_build.mcu = esp32s2 board_build.f_cpu = 240000000L lib_deps = knolleary/PubSubClient links2004/WebSockets ;GyverLibs/GyverHub https://github.com/GyverLibs/GyverHub.git GyverLibs/StringUtils GyverLibs/Pairs GyverLibs/GSON [env:nano328] framework = arduino monitor_speed = 115200 platform = atmelavr board = nanoatmega328new lib_deps = ;GyverLibs/GyverHub https://github.com/GyverLibs/GyverHub.git GyverLibs/StringUtils GyverLibs/Pairs GyverLibs/GSON ```
## Зависимости Для работы GyverHub необходимы библиотеки: - [pubsubclient](https://github.com/knolleary/pubsubclient) - [arduinoWebSockets](https://github.com/Links2004/arduinoWebSockets) - [StringUtils](https://github.com/GyverLibs/StringUtils) - [GSON](https://github.com/GyverLibs/GSON) - [Pairs](https://github.com/GyverLibs/Pairs) > При установке GyverHub из реестра все библиотеки установятся автоматически! ## Основные понятия - **Устройство** - микроконтроллер (далее МК) с программой на базе библиотеки GyverHub. МК является сервером, к которому подключаются клиенты - **Клиент** - сайт или приложение GyverHub, которое подключено к устройству - **Имя сети** (префикс) - уникальное имя сети "клиент-устройство", используется клиентом для поиска устройств и по сути является паролем, без которого не получится обнаружить устройство ## Минимальный код Библиотека имеет минималистичный API: для начала работы достаточно создать объект GyverHub, вызвать у него `begin()` в блоке setup и вызывать `tick()` в блоке loop. Также нужно создать функцию вида `void build(gh::Builder& b)` и подключить её через `hub.onBuild()` - в ней будет собираться панель управления. ```cpp #include GyverHub hub("MyDevices", "ESP8266", ""); // имя сети, имя устройства, иконка // билдер void build(gh::Builder& b) { } void setup() { // подключение к WiFi.. // настройка MQTT/Serial/Bluetooth.. hub.onBuild(build); // подключаем билдер hub.begin(); // запускаем систему } void loop() { hub.tick(); // тикаем тут } ``` Иконки *Font Awesome v5 Solid*, бесплатный пак: - [Список иконок](https://fontawesome.com/v5/search?o=r&m=free&s=solid) - Вставлять в "строку" сам символ (глиф) `""` или его код `"f6ad"` - Пустая строка `""` - отключить иконку ### Настройка WiFi Для подключения к WiFi роутеру можно использовать стандартный код для ESP: ```cpp void setup() { WiFi.mode(WIFI_STA); WiFi.begin("SSID", "PASS"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // ... } ``` Система может работать и с ESP в режиме точки доступа: ```cpp void setup() { WiFi.mode(WIFI_AP); WiFi.softAP("My Device"); // ... } ``` ### Настройка MQTT Для работы через встроенный MQTT нужно указать хост (адрес или IP) и **TCP** порт, опционально логин-пароль и qos/retain: ```cpp config(const String& host, uint16_t port, const String& login = "", const String& pass = "", uint8_t qos = 0, bool ret = 0) ``` ```cpp void setup() { // настройка на сервер, установленный в приложении по умолчанию hub.mqtt.config("test.mosquitto.org", 1883); // другие примеры hub.mqtt.config(IPAddress(12, 34, 56, 78), 1883); hub.mqtt.config("m8.wqtt.ru", 13448, "user", "pass"); } ``` ### Настройка Serial/Bluetooth Библиотека имеет встроенную поддержку Serial/Bluetooth в виде [Arduino Stream](https://www.arduino.cc/reference/en/language/functions/communication/stream/). К библиотеке можно подключить один Stream-объект, который обеспечивает связь. В большинстве случаев это будет `Serial` или `SoftwareSerial`, к которому в случае с Bluetooth подключен Bluetooth модуль по UART. В программе нужно указать его и тип связи, который обеспечивается подключением: ```cpp void setup() { hub.stream.config(&Serial, gh::Connection::Serial); // ... } ``` ```cpp SoftwareSerial bt(3, 4); void setup() { hub.stream.config(&bt, gh::Connection::Bluetooth); // ... } ```