오픈소스 메시 네트워크 설치 튜토리얼
인터넷이 닿지 않는 오지나 재난 상황, 혹은 사설 사물인터넷망을 구축하고 싶을 때 메시(Mesh) 네트워크는 유연하고 강력한 솔루션을 제공합니다. 이 튜토리얼에서는 대표적인 오픈소스 메시 프로젝트인 **Meshtastic(LoRa 기반)**과 PainlessMesh(Wi-Fi 기반) 두 가지 방법으로 단계별 설치·구축 과정을 안내합니다.
목차
- 준비물
- 개발 환경 세팅
- Meshtastic 설치 및 네트워크 구성
- PainlessMesh 설치 및 네트워크 구성
- 테스트 및 활용 팁
- 문제 해결 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 설치
- 홈페이지에서 최신 버전 다운로드
https://www.arduino.cc/en/software - 보드 매니저 추가
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
- ESP32:
- Boards Manager에서 ESP32, ESP8266 패키지 설치
2.2 PlatformIO (VS Code) 설치 (선택)
- VS Code 확장(Extensions) → PlatformIO 설치
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 사용
- Sketch → Include Library → Manage Libraries에서
Meshtastic
라이브러리 검색·설치 - Examples → Meshtastic → meshtastic_node 선택
- 포트 및 보드(TTGO T-Beam 등) 설정 후 업로드
3.2 모바일/웹 앱 연동
- 스마트폰에 Meshtastic 앱 설치 (Android/iOS)
- BLE 또는 Wi-Fi로 디바이스 스캔
- 네트워크 이름, 채널(Frequency), 네트워크 키 설정
- 추가 노드를 전원만 넣으면 자동 메시 토폴로지 완성
4. PainlessMesh 설치 및 네트워크 구성
4.1 라이브러리 설치
- Arduino IDE → Library Manager
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!");
}
- 보드(ESP32/ESP8266)·포트 설정
- 업로드 후 Serial Monitor(115200)로 메시 로그 확인
- 두 번째 보드에도 동일 코드 업로드 → 서로
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 기능까지 확장해 보세요!
- Meshtastic 공식: https://meshtastic.org
- PainlessMesh GitHub: https://github.com/gmag11/painlessMesh