프로젝트 소개

AlteriomPainlessMesh는 ESP8266 및 ESP32 기기에서 자율 조직 메시 네트워크를 구축하기 위한 painlessMesh 라이브러리의 포크입니다. 원래의 애드혹 네트워킹 모델(중앙 컨트롤러나 라우터 불필요, 32비트 칩 ID로 노드 식별, JSON 기반 메시징, 노드 간 시간 동기화)을 유지하면서 IoT 배포를 위한 구조화된 패키지를 얹습니다. 핵심 메시 동작 - 진정한 애드혹 네트워킹: 하나 이상의 노드 집합이 자율적으로 메시를 구성합니다. 크기는 주로 연결 버퍼에 사용 가능한 힙에 의해 제한됩니다. - 가독성과 웹/자바스크립트 프런트엔드와의 쉬운 통합을 위한 JSON 메시징. README는 약간의 성능 비용이 있으며 바이너리 메시징이 가능한 기여 사항이 될 수 있다고 언급합니다. - 네트워킹은 지연 시간 문제로 Arduino WiFi 라이브러리 대신 네이티브 ESP32/ESP8266 SDK 라이브러리를 사용합니다. - IP 네트워킹이 아닙니다: 메시지는 브로드캐스트되거나 특정 nodeId로 전송됩니다. - 문서화된 주의사항: delay()를 피하고(TaskScheduler 사용), WiFi 이벤트 구독 충돌에 주의하며, 메시지 속도를 보수적으로 유지하고, 높은 트래픽에서 메시지 손실 가능성을 예상해야 합니다. Alteriom 확장 이 포크는 IoT 통합을 위한 mqtt-schema(v0.7.2/v0.7.3)에 맞춘 직렬화 및 JSON 변환 기능을 갖춘 타입 패키지를 추가합니다. - SensorPackage (200): 온도, 습도, 기압, 배터리, 센서 ID, 타임스탬프. - StatusPackage (202): 상태 플래그, 가동 시간, 사용 가능한 메모리, WiFi 신호 강도, 펌웨어 버전. - CommandPackage (400): JSON 매개변수와 고유 ID를 가진 대상 명령. - MetricsPackage (204): CPU, 메모리 상태, 네트워크 처리량, 패킷 통계, 지연 시간, RSSI. - HealthCheckPackage (605): 상태 점수, 문제 플래그, 메모리 누수 추세 분석, 예측 유지보수, 충돌/재부팅 추적. - MeshNodeListPackage (600), MeshTopologyPackage (601), MeshAlertPackage (602), MeshBridgePackage (603), EnhancedStatusPackage (604): 노드 인벤토리, 링크 품질을 포함한 토폴로지 그래프, 알림, 프로토콜 브리징, 상세 메시 통계. - 브리지 장애 조치 패키지(610-614): 브리지 상태, 선출, 인수, 조정, NTP 시간 동기화. 운영 기능 - 브로드캐스트 OTA 배포: README는 단일 매개변수로 50개 이상 노드 메시에서 약 98% 네트워크 트래픽 감소와 100개 이상 노드로 확장되는 병렬 업데이트를 주장합니다. - MQTT 상태 브리지: 구성 가능한 간격으로 Grafana, InfluxDB, Prometheus 같은 모니터링 스택을 위해 메시 상태/토폴로지를 게시합니다. - 자동 브리지 장애 조치: RSSI 기반 선출(동률 시 가동 시간, 사용 가능한 메모리, 노드 ID로 결정), 하트비트 기반 손실 브리지 감지, 인수 후 채널 추적, 분산 합의, 그리고 한 번에 하나의 선출, 역할 변경 사이 60초 유지, 단독 후보에 대한 최소 RSSI를 통한 스플릿 브레인 방지. - 다중 브리지 조정: 우선순위 레벨(1-10), 역할(primary/secondary/standby), 피어 디스커버리, 부하 분산 전략을 가진 여러 동시 브리지. - 오프라인 모드용 메시지 큐: 중요 메시지를 보호하는 축출 규칙을 가진 우선순위 기반 큐(CRITICAL/HIGH/NORMAL/LOW), 자동 온라인/오프라인 감지, 자동 플러시. - 공유 게이트웨이 모드: 모든 노드가 동일한 라우터에 연결되고 인터넷으로 중계할 수 있으며, 게이트웨이 선출, 중복 제거, 전달 확인을 제공합니다. 하드웨어 검증 README는 장애 조치, 라우팅, 채널 추적 및 스테이션 스캔에 대한 2.0 변경 사항이 실제 라우터와 함께 ESP32, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-S3 및 ESP8266을 결합한 하드웨어 인 더 루프 장치에서 검증되었으며, 전체 스위트를 3회 연속 깨끗하게 실행해야 릴리스하는 게이트가 있다고 명시합니다. ESP8266 용량 참고 README는 ESP8266을 소규모 메시 또는 리프 노드에 적합하다고 설명하며, 7개 노드 메시에서 내부 노드로 작동할 때 10-13KB의 사용 가능한 힙을 보고하고, 그 수준에서 단일 8KB 패키지 또는 OTA 파트 하나가 할당에 실패할 수 있다고 언급합니다. ESP8266을 maxconn = 0 또는 1로 리프로 구성할 것을 제안하고, overCapacity() 및 apChildren() 헬퍼와 주기적인 저메모리 검사를 제공합니다. 설치 및 의존성 "Alteriom PainlessMesh"라는 이름으로 Arduino Library Manager를 통해, sparck75/AlteriomPainlessMesh로 PlatformIO를 통해(README는 alteriom/ 소유자 항목이 1.10.0에서 멈춘다고 언급), 그리고 npm에서 @alteriom/painlessmesh로 사용할 수 있습니다. 의존성에는 ArduinoJson, TaskScheduler, AsyncTCP(ESP32) 또는 ESPAsyncTCP(ESP8266)가 포함됩니다. 저장소의 예제는 기본 센서 노드, 자동 채널 감지가 있는 인터넷 브리지, 브리지 장애 조치, 공유 게이트웨이, MQTT 브리지, 구조화된 패키지를 사용하는 Alteriom 센서 노드를 다룹니다.