Meshtastic 我來了!
和撰寫 RTL-SDR 的介紹文章一樣,寫這篇文章也是為了讓自己更熟悉 Meshtastic 設備、操作方式以及運作原理。畢竟買 Meshtastic 也好幾個月了,卻因為天線的緣故一直沒有積極嘗試連上 mesh 網路。
這篇文章的架構和介紹 RTL-SDR 的那篇一樣。實驗的部分我要求不多,只要能連上臺灣的 Meshtastic 網路就好。
What?
Meshtastic 是一個「基於 LoRa 技術的開源專案」,期望建立一個「使用低功耗、低成本裝置」的「長距離無線網狀網路」[1]。更重要的是,它是去中心化的網路,受到攻擊而解體的可能性較低,韌性十足。[1]是 Meshtastic Taiwan 的入門手冊,從基礎觀念講到實際應用,非常值得一讀。
Meshtastic 常見的應用如下[1]:
- 戶外運動:山區不一定收得到基地台訊號,Meshtastic 可以做為替代/備援通訊方式;搭配 GPS 功能,可以得知同伴或其他山友的位置。
- 緊急救援:作為基礎設施(e.g. 基地台)失去作用時的備援通訊方式。
- 社區連結:都會區的基地台佈建密度高,行動數據網路就夠用;在地廣人稀的地區,如花蓮(被打),社區之間、或是社區內便可以透過 Meshtastic 聯繫彼此。
- 物聯網裝置:畢竟 LoRa 本來就是用於 IoT,不過目前好像較少 IoT 方面的應用。
目前也有人做出地震通報功能,讓登山者判斷行程/路線是否需要變更。
How?
網路上有許多資源可以參考(如[1]),所以我補充一些網路上較少討論的資訊,特別是從實體層的角度來看(硬體的部分如天線、RF 電路等,我沒有涉獵就略過不談)。
LoRa & CMSS
LoRa 為 Long Range 的縮寫,為低功耗廣域網路 (Low-Power Wide Area Network,LPWAN) 的實體層實現之一[2]。和蜂巢式網路、LTE-M 相比,LoRa 有著低功耗、低成本的優勢,非常適合用於在大範圍的區域內佈建 IoT 網路;LoRa 的缺點是資料傳輸率較低,這也限制了它的應用。
LoRa 使用 Chirp Modulation Spread Spectrum (CMSS) 作為調變方式。CMSS 不是什麼新東西,在第二次世界大戰時就已經有人提出,主要用於軍事用途 (DSSS 和 FHSS 好像也是一樣的背景)。這邊參考 Stephan Hengstler 一篇 2002 年的 IEEE 會議論文[3],來呈現 CMSS 的特性。作者設計一組 chirp spreading 訊號:
$$
c_i(t) =
\begin{cases}
\begin{align}
&\sqrt{\frac{2E_s}{T_s}} \cos{\left(2\pi f_c t + \pi\alpha_{a, i}t^2 + \pi\theta_i\right)}&&,\ 0 \leq t < \frac{T_s}{2}\\[10pt]
&\sqrt{\frac{2E_s}{T_s}} \cos{\left(2\pi f_c t + 2\pi\alpha_{a, i}\frac{T_s}{2}\left(t - \frac{Ts}{4}\right) + \pi\alpha_{b, i}\left(t - \frac{T_s}{2}\right)^2 + \pi\theta_i\right)}&&,\ \frac{T_s}{2} \leq t \leq T_s
\end{align}
\end{cases}
$$
其中 $\alpha_{a, i}$ 和 $\alpha_{b, i}$ 是用戶 $i$ 的 chirp rate 參數,單位為 Hs/s。每一個用戶的展頻訊號 $c_i(t)$ 頻寬都相同,因此只要選定 $\alpha_{a, i}$,$\alpha_{b, i}$ 也會決定:
$$
W = \left(\alpha_{a, i} + \alpha_{b, i}\right)\frac{T_s}{2},\ \forall i
$$
圖A-1為某展頻訊號的波型,圖A-2為其功率頻譜,載波頻率為 1500 Hz,頻寬為 500 Hz。Time-bandwidth product 愈大,功率密度頻譜的形狀愈接近方波,但是時域波型會變得過於密集,所以兩張圖採用不同的 time-bandwidth product,以呈現合適的結果。
作者假設傳送 BPSK 符號,接收端為 coherent correlator,進而推導出 AWGN 通道下的錯誤率,當中 ${\bf b} = \left[b_1, \cdots, b_M\right]^T$,$B = \lbrace-1, 1\rbrace$,$\rho_{ij}$ 為 $c_i(t)$ 和 $c_j(t)$ 的 correlation:
$$
P_e = \frac{1}{M}\sum_{i = 1}^{M}{\sum_{ {\bf b} \in B^{M - 1} }{\frac{1}{2^{M - 1}} Q\left(\sqrt{\frac{2E_s}{N_0}} \left(1 - \sum_{j = 1,\ j \neq i}^{M}{b_j\rho_{ij}}\right)\right)}}
$$
如果這些展頻訊號彼此為正交,則 $P_e$ 就化簡為一般常見的 BPSK 錯誤率;使用正交碼(如 Hadamard code)的 DSSS 即為一例。很可惜,這裡的 CMSS 做不到。作者設計 $\Delta\overline{\alpha}_{i, i + 1} = (\alpha_{a, i} - \alpha_{a, i + 1})T_s^2 = \Delta\overline{\alpha}$ 為常數──相當於 equal chirp rate spacing──使得錯誤率可以最小化(至少就所設計的系統而言)。圖B為模擬的錯誤率,調變的符號為 BPSK,假設 M = 4 個用戶,$\eta = T_s W / M$。
$M = 4,\ \eta = 8$ 的錯誤率和論文的比較不一致,可能是參數數值精確度的問題。
(Gemini 幫我想的理由😜)
不過,這篇論文提出的展頻系統畢竟不是 LoRa,兩者雖然都是 chirp 展頻系統,但是本質上還是不一樣:這篇論文的 CMSS 把展頻訊號當成類似正交碼的 chip signal,符號仍為 BPSK 或是一般 QAM 星座圖;而 LoRa 是直接將展頻訊號代表符號,為 constant envelope。
LoRaWAN 的介紹可以參考[2],這份文件也介紹 LoRa 的一些基本概念,推薦閱讀。其實網路上有很多介紹 LoRa 波型的論文,我介紹的這篇比較像是 CSS 的一個早期設計(殘念),之後有時間再來介紹真正討論 LoRa 的 paper。
Heltec V3
Meshtastic 既然是開源專案,從硬體、韌體到軟體的實現方式就有許多公開在網路上。我使用的硬體是 Heltec 的 V3,處理器為 ESP32-S3FN8 (Espressif),LoRa 晶片為 SX1262 (Semtech),韌體和軟體都是直接用別人寫好的。
來看看 SX1262 的 datasheet。頻率合成器的目標範圍為 150 MHz ~ 960 MHz,幾乎是整個 sub-GHz 的頻帶。中頻在 167 kHz 到 250 kHz 之間,經過 ADC 後才轉換 (DDC) 到基頻做後續的訊號處理,和一般的 SDR 架構相仿;這似乎是目前收發機設計的主流?
如圖所示,SX1262 有 LoRa 和 FSK 兩種調變方式。韌體提供的 LoRa 調變參數包括調變頻寬 BW_L、spreading factor SF、編碼率 CR、低資料傳輸率最佳化 LDRO。
BW_L 表示 RF 頻寬 (DSB),參數值對應到的頻寬如表A所示。每個 symbol 由 SF 個 bits 組成,故每個 symbol 乘上 $2^{\text{SF}}$ 個 chips。如 SF = 6,則每個 symbol 乘上 $2^6 = 64$ chips。每個 symbol 以 sweeping 初始的頻率表示,如 SF = 6 的 symbol 起始頻率為 $f_c + 2\Delta f$,表示該 symbol 為 000010 [5]。SF 和 symbol rate 的關係如下:
$$
R_s = \frac{\text{BW}}{2^{\text{SF}}}
$$
固定頻寬的情況下,SF 愈大,symbol 被延展得愈長,symbol energy 也就愈大,不過代價是更長的傳輸時間 (time-on-air)。編碼率則是從 1/2 到 4/5 都有。
| BW_L | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 訊號頻寬 (kHz) | 7.81 | 10.42 | 15.63 | 20.83 | 31.25 | 41.67 | 62.5 | 125 | 250 | 500 |
LoRa 訊號封包的格式可以參考圖,preamble 用於同步,長度從 10 ~ 65535 個 symbols;header 用於 explicit mode,提供 payload 的長度、編碼率、CRC有無等資訊。在 implicit mode 則預設接收端知道這些資訊,就不提供 header。
實驗:連接上網路
第一次測試結果如圖,確認可以連結到 Meshtastic 網路。不過或許是天線的原因(還在使用 Heltec V3 原廠附的天線),傳送訊號的品質不好。
右:第一次發現到附近的節點,數量不少。
後來在蝦皮買了 TX915 天線,租屋處頂樓測試的結果…發現了更多節點,但是還是沒有收到 @ab 機器人回應。也許是設定有些問題,或是機器人回應了但是我沒有收到,之後再試試看。
結語
其實也沒有什麼要說的,Meshtastic Taiwan 的臉書社團有很多大佬,我有時候看著看著,都覺得我這個通訊工程的研究生到底算哪根蔥?所以我決定抱著好玩的心態來認識 Meshtastic,有些人認真的玩,有些人隨便玩。只是玩玩,這樣就可以降低接觸的門檻,希望大家都來玩玩看。
參考資料
[1] BASHCAT, HackMD 筆記, “Meshtastic Taiwan 快速入門指南”, hackmd.io. Available: https://hackmd.io/@fL8pq60EQsG3RplVzWfGWA/S1m_x-AOA/%2FUAmGpkIzQy-Fc5xKmcyBtQ
[2] Semtech (document), “LoRa® and LoRaWAN®”, semtech.com, Mar. 2024. Available: https://www.semtech.com/uploads/technology/LoRa/lora-and-lorawan.pdf
[3] S. Hengstler, D. P. Kasilingam and A. H. Costa, “A novel chirp modulation spread spectrum technique for multiple access,” IEEE Seventh International Symposium on Spread Spectrum Techniques and Applications, Prague, Czech Republic, 2002, pp. 73-77 vol.1, doi: 10.1109/ISSSTA.2002.1049289.
[4] Semtech (datasheet), “SX1261/2: Long Range, Low Power, sub-GHz RF Transceiver”. Available: https://cdn.sparkfun.com/assets/6/b/5/1/4/SX1262_datasheet.pdf
[5] GW Instek (Youtube), “C-1200 LoRa Tester: (4) LoRa Test Overview”, youtube.com. Available: https://www.youtube.com/watch?v=vEZ2xDCCvsU