Об этом проекте
AlteriomPainlessMesh — это форк библиотеки painlessMesh для построения самоорганизующихся mesh-сетей на устройствах ESP8266 и ESP32. Он сохраняет исходную модель ad-hoc сети — без центрального контроллера или маршрутизатора, узлы идентифицируются 32-битными чип-ID, обмен сообщениями на основе JSON, синхронизация времени между узлами — и добавляет структурированные пакеты, ориентированные на IoT-развёртывания.
Базовое поведение mesh
- Настоящая ad-hoc сеть: любой набор из одного или нескольких узлов самоорганизуется в mesh; размер ограничен в основном heap-памятью, доступной для буферов соединений.
- JSON-сообщения для читаемости и лёгкой интеграции с веб/JavaScript-интерфейсами; в README отмечаются некоторые накладные расходы по производительности и что бинарный обмен сообщениями мог бы стать возможным вкладом в проект.
- Сеть использует нативные библиотеки SDK ESP32/ESP8266, а не библиотеки Arduino WiFi, из-за задержек.
- Это не IP-сеть: сообщения рассылаются широковещательно или отправляются конкретному nodeId.
- Документированные ограничения: избегайте delay() (используйте TaskScheduler), остерегайтесь конфликтов подписки на WiFi-события, поддерживайте консервативные частоты сообщений и ожидайте возможной потери сообщений при высокой нагрузке.
Расширения Alteriom
Форк добавляет типизированные пакеты с сериализацией и преобразованием в JSON, согласованные с mqtt-schema (v0.7.2/v0.7.3) для IoT-интеграции:
- SensorPackage (200): температура, влажность, давление, заряд батареи, идентификатор датчика, временная метка.
- StatusPackage (202): флаги состояния, аптайм, свободная память, уровень WiFi, версия прошивки.
- CommandPackage (400): целевые команды с JSON-параметрами и уникальными идентификаторами.
- MetricsPackage (204): CPU, состояние памяти, пропускная способность сети, статистика пакетов, задержка, RSSI.
- HealthCheckPackage (605): оценка работоспособности, флаги проблем, анализ тенденций утечек памяти, предиктивное обслуживание, отслеживание сбоев/перезагрузок.
- MeshNodeListPackage (600), MeshTopologyPackage (601), MeshAlertPackage (602), MeshBridgePackage (603), EnhancedStatusPackage (604): инвентаризация узлов, граф топологии с качеством связи, оповещения, мостовое взаимодействие протоколов и детальная статистика mesh.
- Пакеты переключения моста (610-614): статус моста, выборы, переход роли, координация и синхронизация времени NTP.
Эксплуатационные возможности
- Широковещательное распространение OTA: в README утверждается примерно 98% снижение сетевого трафика для mesh-сетей от 50 узлов и параллельные обновления, масштабирующиеся до 100+ узлов, включается одним параметром.
- MQTT-мост статуса: публикует статус/топологию mesh для систем мониторинга, таких как Grafana, InfluxDB и Prometheus, с настраиваемыми интервалами.
- Автоматическое переключение моста: выборы на основе RSSI (при равенстве — по аптайму, свободной памяти, node ID), обнаружение потери моста по heartbeat, переход канала после захвата роли, распределённый консенсус и предотвращение split-brain за счёт одних выборов в момент времени, 60-секундной паузы между сменами ролей и минимального RSSI для единственного кандидата.
- Координация нескольких мостов: несколько одновременных мостов с приоритетами (1-10), ролями (primary/secondary/standby), обнаружением пиров и стратегиями балансировки нагрузки.
- Очередь сообщений для офлайн-режима: приоритетная очередь (CRITICAL/HIGH/NORMAL/LOW) с правилами вытеснения, защищающими критические сообщения, автоматическое определение онлайн/офлайн и автоматический сброс.
- Режим общего шлюза: все узлы подключаются к одному роутеру и могут выходить в Интернет, с выборами шлюза, дедупликацией и подтверждением доставки.
Аппаратная валидация
В README указано, что изменения 2.0 в переключении моста, маршрутизации, следовании за каналом и сканировании станций были проверены на аппаратном стенде с обратной связью, объединяющем ESP32, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-S3 и ESP8266 с реальным роутером, с критерием релиза в виде трёх последовательных чистых прогонов полного набора тестов.
Примечание по ёмкости ESP8266
В README говорится, что ESP8266 подходит для небольших mesh-сетей или в качестве листового узла, сообщается о 10-13 КБ свободной heap при работе в качестве внутреннего узла в mesh из семи узлов, и отмечается, что один пакет размером 8 КБ или одна часть OTA могут не выделиться при таком уровне. Рекомендуется настраивать ESP8266 как лист с maxconn = 0 или 1, предоставляются вспомогательные функции overCapacity() и apChildren(), а также периодическая проверка низкой памяти.
Установка и зависимости
Доступна через Arduino Library Manager как "Alteriom PainlessMesh", через PlatformIO как sparck75/AlteriomPainlessMesh (в README отмечается, что запись владельца alteriom/ останавливается на 1.10.0), и на npm как @alteriom/painlessmesh. Зависимости включают ArduinoJson, TaskScheduler и AsyncTCP (ESP32) или ESPAsyncTCP (ESP8266).
Примеры в репозитории охватывают базовый сенсорный узел, мост в Интернет с автоматическим определением канала, переключение моста, общий шлюз, MQTT-мост и сенсорный узел Alteriom с использованием структурированных пакетов.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.