diff --git a/arduino_code/Test/README.md b/arduino_code/Test/README.md index 513c652..d223467 100644 --- a/arduino_code/Test/README.md +++ b/arduino_code/Test/README.md @@ -1,7 +1,3 @@ -Вот обновленная и расширенная документация по MQTT-интерфейсу, включающая новую функциональность работы с датчиками расстояния **VL53L0X**, а также оптимизации, появившиеся в коде. - ---- - # 📡 Документация по MQTT интерфейсу (ESP32 + TMC2209 + Servo + VL53L0X) ## 📌 Общая информация @@ -97,42 +93,3 @@ | `sensor/feedback/0/raw` | Integer | **Сырое** (некалиброванное) значение расстояния в мм. | *Примечание: Топики `distance` и `raw` публикуются только если канал активен (`vl53l0xIsChannelActive`).* - ---- - -## 💡 Важные особенности реализации (Обновлено) - -1. **Безопасная работа со строками**: В новом коде добавлены функции `intToString` и `uintToString`, использующие статические буферы. Это полностью устраняет риск фрагментации памяти (heap fragmentation) при частой публикации телеметрии, который был присущ использованию класса `String`. -2. **Принудительная публикация**: Топик `sensor/control/publish_all` сбрасывает кэш значений `distance` и `raw` на `65535`. При следующем цикле (через 500 мс) система "увидит" изменение и гарантированно отправит актуальные данные. Это полезно при подключении нового клиента, которому нужно получить текущее состояние без перезагрузки устройства. -3. **Обработка ошибок дальности**: Если датчик возвращает `65535` (стандартный код ошибки "вне диапазона" или сбоя измерения для VL53L0X), в топик `distance` публикуется понятная строка `"out_of_range"`, а не число, что упрощает обработку на стороне клиента. -4. **Изоляция каналов**: Цикл телеметрии VL53L0X предварительно проверяет `vl53l0xIsChannelPresent(ch)`, поэтому несуществующие или отключенные на аппаратном уровне каналы не создают лишнего трафика. - ---- - -### 🛠️ Примеры использования (CLI / mosquitto) - -```bash -# --- Двигатель --- -mosquitto_pub -t "motor/control/rpm" -m "100" -mosquitto_pub -t "motor/control/tmc/stealthchop" -m "on" - -# --- Сервопривод (канал 0) --- -mosquitto_pub -t "servo/control/0/enable" -m "on" -mosquitto_pub -t "servo/control/0/angle" -m "90" - -# --- Датчики VL53L0X --- -# Включить канал 1 -mosquitto_pub -t "sensor/control/enable/1" -m "on" - -# Начать калибровку канала 1 (близкая точка 50 мм) -mosquitto_pub -t "sensor/control/calibrate/start/1" -m "50" -# ... передвинуть объект ... -# Завершить калибровку канала 1 (дальняя точка 400 мм) -mosquitto_pub -t "sensor/control/calibrate/finish/1" -m "400" - -# Принудительно запросить публикацию всех текущих показаний датчиков -mosquitto_pub -t "sensor/control/publish_all" -m "1" - -# Подписаться на все события датчиков для отладки -mosquitto_sub -t "sensor/feedback/#" -v -``` diff --git a/arduino_code/Test/platformio.ini b/arduino_code/Test/platformio.ini index d23aaa0..624e618 100644 --- a/arduino_code/Test/platformio.ini +++ b/arduino_code/Test/platformio.ini @@ -21,3 +21,8 @@ lib_deps = madhephaestus/ESP32Servo@^3.2.1 adafruit/Adafruit PWM Servo Driver Library@^3.0.3 pololu/VL53L0X@^1.3.1 +build_flags = + -Os + -ffunction-sections + -fdata-sections + -Wl,--gc-sections diff --git a/arduino_code/Test/src/config.cpp b/arduino_code/Test/src/config.cpp index 877eb3f..479bad5 100644 --- a/arduino_code/Test/src/config.cpp +++ b/arduino_code/Test/src/config.cpp @@ -1,8 +1,8 @@ #include "config.h" -const char* WIFI_SSID = "TP-Link_3E5C"; -const char* WIFI_PASS = "12697571"; -const char* MQTT_SERVER = "192.168.0.200"; +const char* WIFI_SSID = "Home"; +const char* WIFI_PASS = "88888888qwE"; +const char* MQTT_SERVER = "192.168.31.225"; const int MQTT_PORT = 1883; const char* MQTT_USER = "test"; const char* MQTT_PASS = "1234";