오픈소스 메시 네트워크 설치 튜토리얼

 

오픈소스 메시 네트워크 설치 튜토리얼

인터넷이 닿지 않는 오지나 재난 상황, 혹은 사설 사물인터넷망을 구축하고 싶을 때 메시(Mesh) 네트워크는 유연하고 강력한 솔루션을 제공합니다. 이 튜토리얼에서는 대표적인 오픈소스 메시 프로젝트인 **Meshtastic(LoRa 기반)**과 PainlessMesh(Wi-Fi 기반) 두 가지 방법으로 단계별 설치·구축 과정을 안내합니다.


목차

  1. 준비물
  2. 개발 환경 세팅
  3. Meshtastic 설치 및 네트워크 구성
  4. PainlessMesh 설치 및 네트워크 구성
  5. 테스트 및 활용 팁
  6. 문제 해결 Q&A

1. 준비물

공통

  • 컴퓨터(Windows/macOS/Linux)
  • USB-A ↔ USB-C 또는 Micro-USB 케이블
  • Python 3.x (esptool 사용 시)

Meshtastic (LoRa 기반)

  • TTGO T-Beam, Heltec LoRa32, LilyGO LoRa 개발 보드 중 1개 이상
  • 해당 보드 드라이버 (CP210x, CH340 등)

PainlessMesh (Wi-Fi 기반)

  • ESP32 또는 ESP8266 개발 보드 2개 이상
  • Arduino IDE 또는 VS Code+PlatformIO

2. 개발 환경 세팅

2.1 Arduino IDE 설치

  1. 홈페이지에서 최신 버전 다운로드
    https://www.arduino.cc/en/software
  2. 보드 매니저 추가
    • File → Preferences → Additional Boards Manager URLs 에 아래 URL 추가
      • ESP32: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
      • ESP8266: http://arduino.esp8266.com/stable/package_esp8266com_index.json
  3. Boards Manager에서 ESP32, ESP8266 패키지 설치

2.2 PlatformIO (VS Code) 설치 (선택)

  1. VS Code 확장(Extensions) → PlatformIO 설치
  2. platformio.ini 예시 (Meshtastic용)
    [env:tbeam]
    platform = espressif32
    framework = arduino
    board = ttgo-lora32-v1
    monitor_speed = 115200
    lib_deps =
      meshtastic/Meshtastic @ ^1.3.7
    

3. Meshtastic 설치 및 네트워크 구성

3.1 펌웨어 플래싱

방법 A. esptool.py 사용 (터미널)

# 1. 플래싱 모드 진입: BOOT 버튼 누른 상태에서 USB 연결
# 2. 플래싱
pip install esptool
esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py --port /dev/ttyUSB0 write_flash -fm dio 0x0 path/to/firmware.bin

방법 B. Arduino IDE 사용

  1. Sketch → Include Library → Manage Libraries에서 Meshtastic 라이브러리 검색·설치
  2. Examples → Meshtastic → meshtastic_node 선택
  3. 포트 및 보드(TTGO T-Beam 등) 설정 후 업로드

3.2 모바일/웹 앱 연동

  1. 스마트폰에 Meshtastic 앱 설치 (Android/iOS)
  2. BLE 또는 Wi-Fi로 디바이스 스캔
  3. 네트워크 이름, 채널(Frequency), 네트워크 키 설정
  4. 추가 노드를 전원만 넣으면 자동 메시 토폴로지 완성

4. PainlessMesh 설치 및 네트워크 구성

4.1 라이브러리 설치

  1. Arduino IDE → Library Manager
  2. painlessMesh 검색 → 설치

4.2 예제 업로드

#include <painlessMesh.h>

#define   MESH_PREFIX     "MyMesh"
#define   MESH_PASSWORD   "meshpassword"
#define   MESH_PORT       5555

painlessMesh  mesh;

void setup() {
  Serial.begin(115200);
  mesh.setDebugMsgTypes( ERROR | STARTUP );
  mesh.init( MESH_PREFIX, MESH_PASSWORD, MESH_PORT );
}

void loop() {
  mesh.update();
  // 메시 송수신 예시
  mesh.sendBroadcast("Hello from node!");
}
  1. 보드(ESP32/ESP8266)·포트 설정
  2. 업로드 후 Serial Monitor(115200)로 메시 로그 확인
  3. 두 번째 보드에도 동일 코드 업로드 → 서로 Hello… 메시 수신

5. 테스트 및 활용 팁

  • RSSI 확인: Meshtastic 앱에서 각 노드의 신호 세기(RSSI)를 모니터링해 최적 배치
  • LoRa 파라미터 조정: 데이터 속도(SF), 대역폭(BW)을 변경해 전송거리 vs 전송속도 밸런스
  • 모듈화 코드 구조: PainlessMesh 예제에서 메시 수신 콜백(mesh.onReceive(...)) 활용해 센서 데이터 전송
  • OTA 업데이트: PlatformIO와 ArduinoOTA 라이브러리로 현장 펌웨어 업데이트

6. 문제 해결 Q&A

Q1. 펌웨어 업로드 중 “Failed to connect” 에러가 뜹니다.

  • BOOT/GPIO0 버튼을 누른 상태로 다시 시도, 케이블·포트 확인

Q2. 노드가 서로 메시를 맺지 못합니다.

  • 동일 SSID, Password, Port 사용 여부 확인
  • 주파수 간섭이 심할 경우 안테나 방향·간격 조정

Q3. 전송 성공 메시지는 뜨는데 수신이 없습니다.

  • Meshtastic: 앱으로 토폴로지 맵 확인, 서로 라우팅 경로가 형성되었는지 체크
  • PainlessMesh: mesh.getNodeList() 출력으로 연결 상태 점검

이제 Meshtastic(LoRa)와 PainlessMesh(Wi-Fi) 두 가지 오픈소스 메시 네트워크 구축 방법을 마스터하셨습니다. 각 프로젝트의 공식 문서를 참고해 보안·암호화, 센서 연동, OTA 기능까지 확장해 보세요!

다음 이전