# 🐧用Linux Mint 22.2 運行 Meshtastic cli  之前的裝置零件都用得差不多了,最近在等待零件的空窗期,又剛好踢到一台筆電,拿來灌Linux系統,然後就研究了一下Meshtastic裝置,要如何在Linux的系統環境進行設定,所以這並不是讓筆電變成Meshtastic裝置的東西喔! 只是剛好閒來無事,研究玩玩看而已,順便紀錄一下以免日後忘記wwww 以下命令皆透過Linux終端機運行,Windows與Linux命令不同,所以Windows用戶可以略過本篇。 >[!note] >目前我只有先用USB連接裝置,還沒試過藍芽連線,所以下面操作以USB連接裝置為主。 --- 先介紹一下我踢到的💻環境 ~~(踢到的配備沒有很好www)~~  ## 🔌cp210x驅動 我查過Linux mint 22.2已經預設安裝cp210x驅動,所以現在要先確認是否有安裝成功,並且可以正常偵測到裝置。 ``` zsh dmesg | grep cp210x ``` 正常會出現以下訊息 ``` zsh [ 6938.141684] usbcore: registered new interface driver cp210x [ 6938.141708] usbserial: USB Serial support registered for cp210x [ 6938.141733] cp210x 1-2:1.0: cp210x converter detected [ 6938.143150] usb 1-2: cp210x converter now attached to ttyUSB0 ``` >[!note] 訊息內容說明 [ 6938.141684] usbcore: registered new interface driver cp210x:Linux 核心已註冊CP210x驅動程式。 [ 6938.141733] cp210x 1-2:1.0: cp210x converter detected:您的CP210x裝置已成功被偵測到。 [ 6938.143150] usb 1-2: cp210x converter now attached to ttyUSB0:系統已為您的裝置建立了一個虛擬序列埠介面,名稱為 **/dev/ttyUSB0** 。(這邊要記一下PORT,待會會用到) 出現以上訊息就表示已經有安裝好CP210x驅動了,並且訊息中也告訴你PORT是/dev/ttyUSB0。 ## 🚢確認Meshtastic PORT閘道 雖然在上面的訊息當中有告訴你是用哪一個PORT,但以防萬一沒有出現,或是想要單獨查詢,或是你有很多裝置同時插電腦就可以按照我這步驟做查詢。 1. Meshtastic裝置**先不要接上電腦**,開啟終端機輸入以下命令 ``` zsh ls /dev/tty* ``` 2. 再將Meshtastic裝置透過USB接上電腦,再輸入一次命令 ``` zsh ls /dev/tty* ``` 前後比對就可以知道Meshtastic PORT閘道的名字是哪一個  ## 📟透過虛擬環境運行Meshtastic 因為我是使用Mint 22.2,根據PEP 668規範的實施,防止使用者使用pip在系統級別安裝、升級或移除套件,從而破壞作業系統或依賴於特定Python版本/套件組合的應用程式,所以我透過source建立虛擬環境來運行Meshtastic。 如果是非debian、ubuntu、mint…等,沒有鎖pip就可以直接按照Meshtastic官方的教學操作。 1. 設定使用者權限,然後登出再登入或重開機 ``` zsh sudo usermod -a -G dialout $USER #或者 sudo usermod -a -G uucp $USER ``` >[!note] groups查詢權限設定 >登出後重新登入,或重開機之後,再確認權限是否設定成功,輸入`groups`就應該會有dialout或uucp 2. 先確認已經安裝python ``` zsh sudo apt update sudo apt install python3-full ``` 3. 要建立虛擬環境,`meshtastic_cli`可以改成你喜歡的名字,如果這邊有改,下面第四步驟也要跟著改。 ``` zsh python3 -m venv ~/meshtastic_cli ``` 4. 運行虛擬環境 輸入以下命令,就會看到終端機進入meshtastic_cli的環境 ``` zsh source ~/meshtastic_cli/bin/activate ``` 5. 在虛擬環境中透過pip安裝Meshtastic ```zsh pip install meshtastic ``` 6. 運行Meshtastic ```zsh meshtastic --port /dev/ttyUSB0 ``` 如果有出現下列訊息就表示有成功連接,就可以開始你的Meshtastic裝置設定。 ```zsh Connected to radio ``` 7. 測試 節點查詢 `meshtastic --node`  發送訊息測試`meshtastic --sendtext "Linux cli發送訊息測試" --ch-index 2`  8. 一些常用命令 ```zsh source ~/meshtastic_cli/bin/activate #進入環境 ``` ```bash meshtastic --info #查詢裝置資訊 meshtastic --node #查詢節點 meshtastic --port "PORT" --sendtext "訊息內容" #指定PORT裝置發送訊息(連多個裝置可用) meshtastic --sendtext "訊息內容" #發送訊息,沒有指定頻道就是公頻 meshtastic --sendtext "訊息內容" --ch-index 1 #指定頻道1發送訊息(--info可以查頻道代號是多少) meshtastic -listen #監聽訊息 meshtastic –reboot #裝置重開機 meshtastic –enter-dfu #nrf52進入DFU模式 meshtastic -h #查看使用說明 deactivate #退出虛擬環境 ``` 9. 簡化指令(可選) 如果嫌每次要進虛擬環境都要打一長串命令,我們可以用`alies`來簡化命令 ~~(這個指令有玩過CS應該都不陌生XD)~~ 先看你的Shell是zsh還是bash,可以輸入以下命令查詢。 ``` zsh echo $SHELL ``` 再來看你是使用nano還是vim,如果沒有先安裝其中一個`sudo apt install vim`或`sudo apt install vim`,再透過vim或nano打開你的Shell檔案(zshrc或bashrc) ```zsh nano ~/.zshrc #or nano ~/.bashrc #or vim ~/.zshrc #or vim ~/.bashrc ``` 這時候你會開啟檔案,按page down(Pgdn)鍵到最下面,在最後加入以下文字 ``` zsh # 啟用 Meshtastic CLI 環境 alias mesh-on='source ~/meshtastic_cli/bin/activate' # 停用虛擬環境 alias mesh-off='deactivate' ``` 如果是用nano,存檔按Ctrl + X → 按 Y → Enter 如果是用vim,存檔Esc → 輸入:wq → Enter 這時候就會退回到先前終端機的畫面,但是修改完檔案後不會立即生效,需要執行命令來重新載入設定,或是關掉再重開終端機也可以。 ```zsh source ~/.zshrc #or ~/.bashrc ``` 這樣日後只要在終端機輸入`mesh-on`就可以進入Meshtastic CLI虛擬環境,`mesh-off`就可以退出虛擬環境,也可以改成你覺得好記的命令。 # </>Meshtastic 命令大全 不負責任翻譯`meshtastic -h`所提供的內容,如果有誤還請留言給我,感謝。 用法: meshtastic [-h | --version | --support] [--port [PORT] | --host [HOST] | --ble [BLE]] [--ble-scan] [--dest !xxxxxxxx] [--ch-index 索引] [--configure 配置檔案] [--export-config [檔案]] [--get 欄位] [--set 欄位 值] [--begin-edit] [--commit-edit] [--get-canned-message] [--set-canned-message 設定罐頭訊息] [--get-ringtone] [--set-ringtone 鈴聲] [--ch-vlongslow] [--ch-longslow] [--ch-longfast] [--ch-medslow] [--ch-medfast] [--ch-shortslow] [--ch-shortfast] [--set-owner 設定擁有者] [--set-owner-short 設定擁有者短名] [--set-ham 設定業餘無線電ID] [--set-is-unmessageable 設定不可傳訊] [--ch-set-url 網址] [--ch-add-url 網址] [--setalt 設定海拔] [--setlat 設定緯度] [--setlon 設定經度] [--remove-position] [--pos-fields [位置欄位 ...]] [--ch-add 新增頻道] [--ch-del] [--ch-set 欄位 值] [--channel-fetch-attempts 嘗試次數] [--qr] [--qr-all] [--ch-enable] [--ch-disable] [--info] [--nodes] [--show-fields 顯示欄位] [--sendtext 文字] [--private] [--traceroute !xxxxxxxx] [--request-telemetry [類型]] [--request-position] [--reply] [--reboot | --reboot-ota | --enter-dfu | --shutdown | --device-metadata | --factory-reset | --factory-reset-device | --remove-node !xxxxxxxx | --set-favorite-node !xxxxxxxx | --remove-favorite-node !xxxxxxxx | --set-ignored-node !xxxxxxxx | --remove-ignored-node !xxxxxxxx | --reset-nodedb | --set-time [時間戳]] [--seriallog [日誌目標]] [--ack] [--timeout 秒數] [--no-nodes] [--debug] [--debuglib] [--test] [--wait-to-disconnect [秒數]] [--noproto] [--listen] [--no-time] [--power-riden 乘電源 | --power-ppk2-meter | --power-ppk2-supply | --power-sim] [--power-voltage 電壓] [--power-stress] [--power-wait] [--slog [結構化日誌目標]] [--gpio-wrb GPIO_WRB GPIO_WRB] [--gpio-rd 讀取GPIO] [--gpio-watch 監測GPIO] [--tunnel] [--subnet 隧道網路] 協助 (Help): -h, --help 顯示此幫助訊息並退出 --version 顯示程式的版本號碼並退出 --support 顯示支援資訊 (在疑難排解問題時很有用) --- ### 🔗 **連線 (Connection)** 指定如何連線到 Meshtastic 裝置的可選參數。 | 參數 | 說明 | | :--- | :--- | | **--port [PORT]**, **--serial [PORT]**, **-s [PORT]** | 使用序列埠連線到裝置的埠號,例如 `/dev/ttyUSB0`。(預設會嘗試偵測埠號) | | **--host [HOST]**, **--tcp [HOST]**, **-t [HOST]** | 使用 **TCP** 連線到裝置,可選擇傳入主機名稱或 IP 地址。(預設為 `'localhost'`) | | **--ble [BLE]**, **-b [BLE]** | 連線到 **BLE**(藍牙低功耗)裝置,可選擇指定裝置名稱。(預設為 `'any'`) | | **--ble-scan** | 掃描可連線的 Meshtastic BLE 裝置 | --- ### 🎯 **選擇 (Selection)** 選擇要使用的頻道、目標節點等的參數。 | 參數 | 說明 | | :--- | :--- | | **--dest !xxxxxxxx** | 任何發送命令的**目標節點 ID**。如果未設定,則假定為 `^all`(所有)或 `^local`(本地)。使用帶有 `!` 或 `0x` 前綴的節點 ID 或節點編號。 | | **--ch-index 索引** | 設定用於頻道特定命令的**指定頻道索引**。頻道從 **0** 開始(`0` 是主要頻道)。 | --- ### 📂 **匯入/匯出 (Import/Export)** 與匯入和匯出 Meshtastic 裝置配置相關的參數。 | 參數 | 說明 | | :--- | :--- | | **--configure 配置檔案** | 指定一個 YAML (`.yml`) 檔案的路徑,其中包含連線裝置所需的設定。 | | **--export-config [檔案]** | 將裝置配置匯出為 **YAML** 格式 (如果未指定檔案則輸出到標準輸出)。 | --- ### ⚙️ **配置 (Configuration)** 與 Meshtastic 裝置的一般配置相關的參數。 | 參數 | 說明 | | :--- | :--- | | **--get 欄位** | 取得一個偏好設定欄位。使用無效欄位 (例如 `'0'`) 可取得所有欄位的列表。可使用 **`snake_case`** 或 **`camelCase`** 格式。 | | **--set 欄位 值** | 設定一個偏好設定欄位。可使用 **`snake_case`** 或 **`camelCase`** 格式。 | | **--begin-edit** | 告訴節點開啟一個**交易 (transaction)** 來編輯設定。 | | **--commit-edit** | 告訴節點提交開啟的設定交易。 | | **--get-canned-message** | 顯示**罐頭訊息**插件訊息。 | | **--set-canned-message SET\_CANNED\_MESSAGE** | 設定罐頭訊息插件訊息 (最多 200 個字元)。 | | **--get-ringtone** | 顯示儲存的**鈴聲**。 | | **--set-ringtone RINGTONE** | 設定通知鈴聲 (最多 230 個字元)。 | | **--ch-vlongslow** | 切換到 **超遠距離且慢速** 的數據機預設設定。 | | **--ch-longslow** | 切換到 **遠距離且慢速** 的數據機預設設定。 | | **--ch-longfast** | 切換到 **遠距離且快速** 的數據機預設設定。 | | **--ch-medslow** | 切換到 **中距離且慢速** 的數據機預設設定。 | | **--ch-medfast** | 切換到 **中距離且快速** 的數據機預設設定。 | | **--ch-shortslow** | 切換到 **短距離且慢速** 的數據機預設設定。 | | **--ch-shortfast** | 切換到 **短距離且快速** 的數據機預設設定。 | | **--set-owner SET\_OWNER** | 設定裝置擁有者名稱。 | | **--set-owner-short SET\_OWNER\_SHORT** | 設定裝置擁有者短名稱。 | | **--set-ham SET\_HAM** | 設定持有許可證的**業餘無線電 ID** 並關閉加密。 | | **--set-is-unmessageable SET\_IS\_UNMESSAGEABLE** | 設定節點是否**不可傳訊**。 | | **--ch-set-url URL**, **--seturl URL** | 從提供的 URL 設定**所有頻道**和 LoRa 配置。 | | **--ch-add-url URL** | 從提供的 URL **新增次要頻道**並設定 LoRa 配置。 | --- ### 📍 **位置配置 (Position Configuration)** 修改固定位置和其他位置相關配置的參數。 | 參數 | 說明 | | :--- | :--- | | **--setalt SETALT** | 設定裝置的**海拔高度**(以公尺為單位,允許在沒有 GPS 的情況下使用),並啟用固定位置。 | | **--setlat SETLAT** | 設定裝置的**緯度**(允許在沒有 GPS 的情況下使用),並啟用固定位置。接受十進位值或乘以 $1e7$ 的整數。 | | **--setlon SETLON** | 設定裝置的**經度**(允許在沒有 GPS 的情況下使用),並啟用固定位置。接受十進位值或乘以 $1e7$ 的整數。 | | **--remove-position** | **清除**任何現有的固定位置並禁用固定位置。 | | **--pos-fields [位置欄位 ...]** | 指定發送位置時要發送的**欄位**。不帶參數可列出所有有效值。可以空格分隔多個值。 | --- ### 📡 **頻道配置 (Channel Configuration)** 與頻道配置相關的參數。 | 參數 | 說明 | | :--- | :--- | | **--ch-add CH\_ADD** | **新增**一個次要頻道,您必須指定一個頻道名稱。 | | **--ch-del** | **刪除**指定的頻道索引(`ch-index`)頻道。 | | **--ch-set 欄位 值** | 設定一個頻道參數。例如:設定主要頻道加密金鑰為新隨機金鑰:`--ch-set psk random --ch-index 0`。 | | **--channel-fetch-attempts 嘗試次數** | 在放棄之前,嘗試檢索頻道設定的次數。預設為 **3** 次。 | | **--qr** | 顯示節點主要頻道的 **QR 碼** (使用 `--qr-all` 則顯示所有頻道)。也會顯示可共享的頻道 URL。 | | **--qr-all** | 顯示節點所有頻道的 **QR 碼**和 URL。 | | **--ch-enable** | **啟用**指定的頻道。(儘可能改用 `--ch-add`) | | **--ch-disable** | **禁用**指定的頻道。(儘可能改用 `--ch-del`) | --- ### 🏠 **本地操作 (Local Actions)** 僅對本地節點執行操作或請求資訊的參數。 | 參數 | 說明 | | :--- | :--- | | **--info** | 讀取並顯示無線電配置資訊。 | | **--nodes** | 以美觀的格式化表格列印**節點列表**。 | | **--show-fields 顯示欄位** | 使用 `--nodes` 時,指定要顯示的欄位 (以逗號分隔)。 | --- ### 🌐 **遠端操作 (Remote Actions)** 透過網狀網路 (mesh) 對本地節點或遠端節點執行操作或請求資訊的參數。 | 參數 | 說明 | | :--- | :--- | | **--sendtext 文字** | **發送文字訊息**。可指定目標節點 (`--dest`)、使用私人應用程式埠 (`--private`) 和/或頻道索引 (`--ch-index`)。 | | **--private** | 可選參數,用於將文字訊息發送到 **PRIVATE\_APP** 埠。與 `--sendtext` 結合使用。 | | **--traceroute !xxxxxxxx** | 從已連線節點到目標節點的**路由追蹤**。您需要傳入目標 ID 作為參數。 | | **--request-telemetry [類型]** | 向節點**請求遙測數據**。帶參數時,請求特定類型的遙測數據。 | | **--request-position** | 向節點**請求位置資訊**。 | | **--reply** | **回覆**收到的訊息。 | --- ### 👑 **遠端管理操作 (Remote Admin Actions)** 透過網狀網路與本地節點或遠端節點互動,需要管理員存取權限的參數。 | 參數 | 說明 | | :--- | :--- | | **--reboot** | 告訴目標節點**重新啟動**。 | | **--reboot-ota** | 告訴目標節點**重新啟動**進入原廠韌體 (ESP32)。 | | **--enter-dfu** | 告訴目標節點進入 **DFU 模式** (NRF52)。 | | **--shutdown** | 告訴目標節點**關機**。 | | **--device-metadata** | 從節點取得**裝置元數據** (metadata)。 | | **--factory-reset**, **--factory-reset-config** | 告訴目標節點安裝**預設配置**,保留 BLE 綁定和 PKI 密鑰。 | | **--factory-reset-device** | 告訴目標節點安裝**預設配置**,並清除 BLE 綁定和 PKI 密鑰。 | | **--remove-node !xxxxxxxx** | 告訴目標節點從其節點資料庫 (NodeDB) **移除**特定的節點。 | | **--set-favorite-node !xxxxxxxx** | 告訴目標節點將指定的節點設定為節點資料庫中的**最愛節點**。 | | **--remove-favorite-node !xxxxxxxx** | 告訴目標節點將指定的節點設定為節點資料庫中的**取消最愛節點**。 | | **--set-ignored-node !xxxxxxxx** | 告訴目標節點將指定的節點設定為節點資料庫中的**忽略節點**。 | | **--remove-ignored-node !xxxxxxxx** | 告訴目標節點將指定的節點設定為節點資料庫中的**取消忽略節點**。 | | **--reset-nodedb** | 告訴目標節點**清除**其節點列表。 | | **--set-time [時間戳]** | 設定時間為提供的 Unix 紀元時間戳,或如果省略或為 $0$ 則設定為系統當前時間。 | --- ### 📋 雜項參數 (Miscellaneous arguments) | 參數 | 說明 | | :--- | :--- | | **--seriallog [日誌目標]** | 將裝置序列埠輸出記錄到 `'none'` 或要附加的檔案名稱。如果未指定檔案名稱,預設為 `'stdout'`。 | | **--ack** | 與相容的操作 (例如 `--sendtext`) 結合使用,以**等待確認** (acknowledgment)。 | | **--timeout 秒數** | 等待回覆的**時限**。預設為 300 秒。 | | **--no-nodes** | 請求節點不要將節點資訊發送到客戶端。會破壞依賴節點資料庫的功能,但會加快啟動速度。需要韌體版本 $2.3.11$ 或更高。 | | **--debug** | 顯示 **API 函式庫**的除錯日誌訊息。 | | **--debuglib** | **僅顯示** API 函式庫的除錯日誌訊息。 | | **--test** | 對所有連線的 Meshtastic 裝置執行**壓力測試**。 | | **--wait-to-disconnect [秒數]** | 在與裝置斷開連線之前**等待的秒數**。 | | **--noproto** | 不啟動 API,僅作為一個**簡易的序列埠終端**運作。 | | **--listen** | 保持開啟並**監聽** Protobuf 串流。啟用除錯日誌記錄。 | | **--no-time** | 已棄用。保留用於命令碼的向下相容性,但**無實際操作**。 | --- ### 🔋 **電源測試 (Power Testing)** 用於電源測試/日誌記錄的選項。 | 參數 | 說明 | | :--- | :--- | | **--power-riden POWER\_RIDEN** | 與 Riden 電源供應器通訊。您必須指定裝置路徑,例如 `/dev/ttyUSBxxx`。 | | **--power-ppk2-meter** | 與 Nordic Power Profiler Kit 2 (在**測量模式**) 通訊。 | | **--power-ppk2-supply** | 與 Nordic Power Profiler Kit 2 (在**供電模式**) 通訊。 | | **--power-sim** | 使用**模擬**電量計 (用於開發)。 | | **--power-voltage POWER\_VOLTAGE** | 在電源供應器上設定指定的**電壓**。請非常小心,可能會燒毀東西。 | | **--power-stress** | 執行電源監視器**壓力測試**,以擷取裝置的功耗概況 (也需要 `--power-mon`)。 | | **--power-wait** | 提示使用者在尋找裝置序列埠之前**等待裝置重設** (某些電路板會切斷 USB 序列埠的電源)。 | | **--slog [SLOG]** | 儲存本次運行的**結構化日誌** (slogs),可選地指定一個目標目錄。 | --- ### ⚙️ **遠端硬體 (Remote Hardware)** 與遠端硬體模組相關的參數。 | 參數 | 說明 | | :--- | :--- | | **--gpio-wrb GPIO\_WRB GPIO\_WRB** | 將特定的 **GPIO 號碼**設定為 $1$ 或 $0$。 | | **--gpio-rd GPIO\_RD** | 從 **GPIO 遮罩**中讀取 (例如: `'0x10'`)。 | | **--gpio-watch GPIO\_WATCH** | 開始**監測 GPIO 遮罩**的變化 (例如: `'0x10'`)。 | --- ### 🌐 **隧道 (Tunnel)** 與透過網狀網路建立隧道裝置相關的參數。 | 參數 | 說明 | | :--- | :--- | | **--tunnel** | 建立一個 **TUN 隧道裝置**,用於透過網狀網路轉發 IP 封包。 | | **--subnet TUNNEL\_NET** | 設定 **TUN IP 橋接器**的本地端子網路地址 (例如: `'10.115'`,這是預設值)。 | --- 如果未指定任何連線參數,程式將搜尋相容的序列埠裝置,如果找不到,則會嘗試對 `localhost` 進行 TCP 連線。 # **參考來源** - [Meshtastic 官方網站](https://meshtastic.org/) - [Meshtastic Python CLI 官方指南](https://meshtastic.org/docs/software/python/cli/) ## Meshtastic Taiwan - [Meshtastic Taiwan Community 臺灣鏈網](https://www.facebook.com/groups/meshtastictw) - [Meshtastic Taiwan 使用手冊 by BASHCAT](https://hackmd.io/@fL8pq60EQsG3RplVzWfGWA/S1m_x-AOA)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up