iT邦幫忙

2026 iThome 鐵人賽

DAY 24
0
ChatGPT & Codex

窮鬼冰箱升級計劃系列 第 24 篇

【Day 24】LoRa 無線通訊與 Meshtastic

  • 分享至 

  • xImage
  •  

簡述

關於 LoRa,既不是 WiFi 無線網路,也不是依附在電信業者的行動通訊協定。 LoRa 是開源的 Mesh 無線通訊系統!
意思就是,架個基地台、裝好天線,和周邊的裝置進行通訊。 有點像是在玩無線電。

優勢

  • 通訊距離: 比 WiFi 要長一些
  • 省電: 收發兩端進行通訊時,消耗電力不多,不像 WiFi 基地台那樣需要插著電,或者大量消耗電池電力
  • 便宜: 不依賴 ISP 綁月租

劣勢

  • 低頻寬: 省電與長距離,需要用頻寬作為代價,提高無線電頻寬,會造成穿透力和傳輸距離下降。

傳輸方式簡述

  • 可以將 Meshtastic 想像成是無線電對講機,兩個人之間要溝通,至少需要兩隻對講機,一人拿一隻,一個人講話,另一個人收聽。
  • 在沒有安裝網路的極端環境中如果有一台冰箱⋯⋯
    • 航行在海上的輪船
    • 深山中的山屋
  • 因為行動網路的信號死角,或是傳輸成本過高⋯⋯就可以考慮 Meshtastic
  • 以下傳輸模式簡圖示意
    1. 在冰箱旁邊有個樹莓派,透過有線方式連接 Meshtastic A
    2. 接收端(人類或是王永慶)透過 Meshtastic B 接收來自 Meshtastic A 的吶喊,得知冰箱資訊。
    3. 監看者的手持裝置,透過像是藍牙的方式,和 Meshtastic B 通訊。
    4. 特別要注意一點是,A 和 B 之間,不一定是「直接通訊」;Meshtastic 也支援透過接力的方式,將訊息間接地傳遞出去。
        Raspberry Pi
             │
             │ Serial / USB
             ▼
      Meshtastic Node A
             │
             │ LoRa
             ▼
      Meshtastic Node B
             │
             ▼
       Mobile Phone

Source on Raspberry Pi

import meshtastic.serial_interface


interface = (
    meshtastic.serial_interface
    .SerialInterface(
        devPath="/dev/ttyACM0"
    )
)

interface.sendText(
    "beggarFridge online"
)

interface.close()

Transform / Json -> LoRa string

剛剛提到,因為頻寬較低,傳輸的資料,重點應該放在什麼資料數值多少,如果包含太多字如 Json 的括號等,會大幅降低效率。

JSON

{
  "items": 12,
  "expiring": 2,
  "expired": 0,
  "server": "online"
}

LoRa style string

FG I:12 E:2 X:0 S:OK

implement

def build_mesh_message(status):
    return (
        f"FG "
        f"I:{status['items']} "
        f"E:{status['expiring']} "
        f"X:{status['expired']} "
        f"S:{status['server']}"
    )

Send

def send_fridge_status():

    status = (
        fridge_status_service
        .get_status()
    )

    message = (
        build_mesh_message(
            status
        )
    )

    mesh_service.send(
        message
    )

上一篇
【Day 23】補貨建議
系列文
窮鬼冰箱升級計劃 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言