Skip to content

This project uses Raspberry Pi to create an offline WiFi hotspot and chat room, allowing the general public to connect to the Meshtastic network to send messages or communicate without installing an app, simply by opening a mobile browser.

License

Notifications You must be signed in to change notification settings

SCWhite/MeshBridge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MeshBridge

遇到災害時,一般人大概不會準備好適當的通訊工具,但你大概會有手機。

MeshBridge 是一個基於 Raspberry Pi 與 Meshtastic 的災難應急通訊閘道器。
本專案目的在建立一個離線 WiFi 熱點與 Captive Portal(強制登入頁面),讓一般民眾無需安裝 App,僅需透過手機瀏覽器,即可接入 Meshtastic 網路發送求救訊息或進行通訊。

Status Python License Meshtastic

圖片

專案特點

目前版本 (MVP) 已實現以下功能:

  • 無需 App (Captive Portal)
    • 使用者連接 WiFi 後,手機自動跳出聊天視窗,大幅降低使用門檻。
  • 離線運作 (Offline First)
    • 所有資源(包含 Socket.IO 前端庫)皆儲存於 RPi 本地,無網際網路環境下可完全運作。
    • 離線歷史紀錄:瀏覽器端 (Local Storage) 會暫存歷史訊息,斷線重連或重新整理後紀錄不消失。
  • 硬體隨插即用 (Hot-plug)
    • 自動偵測 USB/Serial 上的 Meshtastic 裝置。
    • 支援熱插拔:斷線自動偵測,重新插入後自動恢復連線。
  • 節點狀態監測
    • 網頁端即時顯示 LoRa 硬體連線狀態(紅綠燈號)。
    • 訊息傳送回饋:若 LoRa 未連線,訊息氣泡會變色提示「僅限 WiFi 本地」。

未來規劃

未來可能加入以下功能:

  • 多頻道支援:目前所有訊息皆跑在 LongFast 主頻道,未來支援切換或顯示不同頻道。
  • 流量控制:增加留言速度限制與訊息長度分段,避免 LoRa 頻寬阻塞。
  • 管理頁面:提供 Web 介面設定 WiFi SSID、LoRa 參數等。
  • 功能分組:區分一般聊天、緊急求救、公告廣播等不同類型的訊息流。
  • 多節點/多頻率 Preset:支援同時管理多個 LoRa 節點或預設頻率切換。
  • 電子紙/留言板支援:整合 E-Paper 顯示重要公告。
  • Local 服務延伸:整合離線地圖或物資回報系統。
  • 簡易安裝腳本
  • 系統更新
  • 移除腳本
  • 英文版文件
  • QRcode
  • 類BBS系統
  • 系統公告
  • 山區通訊柱?

硬體需求

  1. Raspberry Pi
    • 支援 3B, 4, 5, Zero 2W。
    • 建議運行 Raspberry Pi OS
  2. Meshtastic Device (LoRa 節點)
    • 測試通過:Heltec V3, T114, Wio Tracker L1。
    • 其他裝置 (ESP32/nRF52) 理論上皆可支援。
  3. USB 傳輸線 (具備資料傳輸功能)。

專案目錄

MeshBridge/
├── app.py                      # 後端主程式 (Flask + SocketIO + Meshtastic)
├── requirements.txt            # Python 套件清單
├── README.md                   # 專案說明書 (包含安裝與使用指南)
├── LICENSE                                  
│
├── templates/
│   └── index.html              # 前端介面 (HTML + CSS + JS 邏輯)
│
├── static/
│   └── socket.io.min.js        # 離線版 Socket.IO 函式庫
│
│
├── setup_wifi.sh               # [腳本] 自動設定 WiFi AP (依據 MAC 碼)
├── setup_dns.sh                # [腳本] 自動設定 dnsmasq (Captive Portal)
├── setup_services.sh           # [腳本] 自動安裝 Systemd 服務 (複製與註冊)
│
├── meshbridge-wifi.service     # [設定] WiFi 設定服務檔 (供 setup_services.sh 複製用)
└── meshbridge.service          # [設定] 主程式服務檔 (供 setup_services.sh 複製用)

自動下載安裝 (推薦)

如果您使用的是 Raspberry Pi OS (Debian-based),可以使用以下指令一鍵完成下載與安裝:

curl -sSL https://raw.githubusercontent.com/SCWhite/MeshBridge/main/quick_install.sh | bash

自動化安裝 (手動下載)

因為手動有點煩人

git clone https://github.com/SCWhite/MeshBridge.git
cd MeshBridge

chmod +x install.sh
./install.sh

Important

注意: 目前預設WiFi Localisation 為 TW / 如果選項不同請自行修改

等腳本完全跑完,系統會提示重新開機 重新啟動後就完成了

手動安裝指南

1. 系統環境準備

更新系統並安裝必要套件:

sudo apt update
sudo apt install python3-venv python3-pip dnsmasq git -y

2. 下載專案

git clone https://github.com/SCWhite/MeshBridge.git
cd MeshBridge

# 建立並啟動虛擬環境
python3 -m venv venv
source venv/bin/activate

# 安裝 Python 依賴套件
pip install -r requirements.txt

3. 設定 WiFi AP (自動化腳本)

本專案包含一個自動化腳本 setup_wifi.sh,它會讀取樹莓派的 MAC 位址後四碼,自動建立一個獨一無二的 SSID(例如:MeshBridge_A1B2),避免多台裝置名稱衝突。

執行以下指令以將PI設定成 WiFi 熱點:

# 給予腳本執行權限
chmod +x setup_wifi.sh

# 執行設定 (只需執行一次,之後會由 Systemd 接手)
sudo ./setup_wifi.sh

Important

說明:此腳本將 WiFi 設為 AP 模式,並指定固定 IP 10.0.0.1 / 或使用 chat.meshbridge.com

4. 設定 DNS 轉導 (自動化腳本)

執行此腳本以設定 dnsmasq。這是 Captive Portal 的核心,負責將連入使用者的所有網域請求導向樹莓派的聊天室。

chmod +x setup_dns.sh
sudo ./setup_dns.sh

Note

說明:腳本會修改 /etc/dnsmasq.conf 並重啟服務。

5. 建立與啟動服務 (自動化腳本)

最後,執行此腳本將 MeshBridge 註冊為 Systemd 服務,確保開機後自動運作。

chmod +x setup_services.sh
sudo ./setup_services.sh

Note

說明:此腳本會將專案中的 .service 檔案複製到系統目錄,並設定開機自動啟動。

用以下指令確認他有在執行:

sudo journalctl -u meshbridge.service -f

常見問題 (Troubleshooting)

Q: 手機連上 WiFi 後沒有自動跳出畫面?

請手動開啟瀏覽器,輸入 10.0.0.1 或 chat.meshbridge.com。

部分 Android/iOS 裝置對 Captive Portal 的偵測機制不同,可能需要幾秒鐘才會跳出通知。
Q: 程式顯示找不到 USB 裝置或 Timed out?

請檢查 USB 線材是否具備傳輸功能。
Q: 如何查看程式運作紀錄 (Logs)?

使用以下指令查看即時日誌:

sudo journalctl -u meshbridge.service -f

致謝

  • Google Gemini 3:特別感謝 Gemini 3 在本專案開發過程中擔任技術顧問,協助系統架構規劃、Python 程式實作、除錯以及文件撰寫。
  • 基本上它做了所有的事情,我就是個按鍵盤的馬鈴薯。

About

This project uses Raspberry Pi to create an offline WiFi hotspot and chat room, allowing the general public to connect to the Meshtastic network to send messages or communicate without installing an app, simply by opening a mobile browser.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •