LoRaMessenger
LoRaMessengerシンプルなワイヤレス Web インターフェイスを備えた LoRa 搭載 ESP32 ノード間のオフグリッド チャットです。
ESP32 は、オンライン ノード、受信および送信されたメッセージ、およびノード名、宛先ノード、メッセージを設定するためのいくつかのテキスト ボックスを表示するシンプルなチャットのようなインターフェイスを提供する Wi-Fi ネットワークをホストします。
メッセージの送受信には LoRa 通信プロトコルが使用されるため、複数のモジュールを設定して最大数 km の距離までメッセージを送受信できます。
TTGO LoRa32 や Heltec Wifi LoRa 32 など、ほとんどの ESP32 LoRa モジュールにはディスプレイが装備されているため、それらを独立して使用してポケベルのようにメッセージを受信できます。
ノードは電池を備えた小さな箱の中に簡単に設置でき、電話の電波が届かない場所でも通信できる通信システムを構築できます。
ウェブインターフェース
ESP32 が起動すると、 LoRaMessenger [番号] という新しい Wi-Fi ネットワークが作成されます。
デバイスがネットワークに接続すると、Web インターフェイスが自動的に開きます。何も起こらない場合は、Web ブラウザを開いて ESP32 IP (デフォルトでは 1.1.1.1) に移動することでインターフェイスにアクセスできます。
Android では、Wi-Fi ネットワークに接続した後、Web インターフェイスを含む Wi-Fi ログイン ページが開きます。このようにして、 LoRaMessenger使用している場合でも、バックグラウンド 4g ネットワーク接続が維持されます。ネットワークへのログインを示す通知は通知パネルに表示され、いつでも開いてインターフェイスを再度表示できます。
Web インターフェイスがブラウザ上に表示され、チャットには次の機能があります。
- ページの上部にノード名を入力すると、受信者が誰が書いているかを知ることができます。 「更新」を押すと、名前が保存され、到達可能なすべてのノードに送信されます。
- オンライン セクションには、検出されたすべての利用可能なノードと、受信ノードが使用しているリレー ノード (存在する場合)、受信 RSSI、リレー間のホップ数、最後の接続からの経過時間などの追加情報が表示されます。
- メッセージ セクションには、最近送受信された 5 件のメッセージ (デフォルトではユーザーが設定可能) が時系列に表示されます。メッセージを正しく受信したすべてのノードの名前が各メッセージの下に表示されます。
- ページの下部には 2 つのテキスト ボックスがあり、1 つ目は宛先ノードの設定に使用され、2 つ目はメッセージを書き込むために使用されます。
デフォルトでは、宛先フィールドにはブロードキャスト値が含まれます。このようにして、メッセージは利用可能なすべてのノードに送信されます。オンライン セクションで報告されているとおりにノード名を正確に記述して、特定の受信者にのみメッセージを送信することもできます。
現時点では、受信したメッセージと開封確認を更新するにはページを更新する必要があることに注意してください。
LoRa プロトコル
LoRaMessengerカスタム通信プロトコルを使用し、送信される各パケットはヘッダーとペイロードで構成されます。
ヘッダーは、ネットワークとパケット ルーティングが適切に機能するために必要な情報を提供します。ヘッダーに含まれるパラメータは次のとおりです。
- NETID: config.h で指定されたネットワーク ID。これにより、複数の独立したネットワークを作成できます。
- TTL: config.h で指定されたパケットの生存時間。この値は、パケットが通過したホップ数を知るために使用され、ルーティング アルゴリズムで必要となります。
- RECEIVER: 受信ノード番号。
- SENDER: 送信ノード番号。
- LAST NODE: 送信者ノード番号またはパケットを中継した最後のノード。
- 次のノード: 受信ノード番号、またはパケットを受信ノードに中継するために必要な次のノード。
- ID: パケット ID。同じノードから送信された各パケットには、固有の 4 バイト長の ID があります。これは、すでに受信したパケットを破棄し、受信確認を送信するために必要です。
- PAYLOAD TYPE: ペイロード タイプ。ペイロードを正しく解釈するために使用されます。可能なペイロード タイプは、メッセージ、確認応答、およびアナウンスです。
メッセージペイロード:
- メッセージ サイズ: メッセージの読み取りに必要なメッセージ サイズ (バイト単位)。
- メッセージ: メッセージの内容。今のところ、これはプレーンテキストで送信されます。
確認応答ペイロード:
- 受信パケット ID: 受信したメッセージ パケットの ID。これは、パケットが受信されたことを送信者に知らせるために送り返されます。
ペイロードを発表します:
- NAME SIZE: 名前の読み取りに必要なノード名のサイズ (バイト単位)。
- ノード名: ノード名。これはすべてのノードの Web インターフェイスに表示され、宛先フィールドに書き込んで特定のノードにのみメッセージを送信できます。
パケットの中継とルーティング
LoRaMessenger送信者が直接到達できないノードにメッセージを転送できるノードのネットワークを作成します。
これを行うために、各ノードは宛先ノードとそこに到達するための最適なルートを含む自動ルーティング テーブルを利用します。このテーブルは、定期的に送信されるアナウンス パケット、またはすべてのノードによる名前の変更時に送信されるアナウンス パケットによって更新されます。
現在のルーティング アルゴリズムは非常に単純で、ホップ数が低いことが優先されます。ホップ数が同じ 2 つのルートの場合、次に強いノードへの接続を持つルートが選択されます。
インストール
このプログラムは、プロジェクトを platformio にインポートし、設定を更新し、ボードにアップロードすることで簡単にインストールできます。
構成
include フォルダーには、config.h という構成ファイルが存在します。このファイルには、 LoRaMessenger機能するために必要なすべての設定が含まれています。
LoRa 構成:
- LORABAND: LoRa チップの周波数。周波数はボードと現地で許可されている周波数によって異なります。必ずお住まいの国で許可されている周波数のみを使用してください。詳細については、こちらをご覧ください。
可能な値: 433E6、866E6、915E6。 - SPREADINGFACTOR: LoRa 拡散率。 LoRaMessenger送信デューティ サイクルを考慮するため、7 より大きい値を使用する場合は注意してください。値を高くすると、送信間の待ち時間が大幅に遅くなり、正しい動作に影響を与える可能性があります。衝突防止時間などの他の調整が必要になる場合があります。可能な値: 7 ~ 12。
- TXDBM: LoRa チップの送信電力。
可能な値: 1 ~ 20 - LORADUTY: 送信デューティ サイクル。あなたの国で許可されている値のみを使用してください。可能な値: 1 ~ 99。
- NETID: LoRaMessengerネットワーク ID。これにより、複数の独立したネットワークを作成できます。
可能な値: 0 ~ 255。
L1 構成:
- L1BUFFER:送信パケットキュー。ノードの大規模なネットワークを使用する場合、または高い拡散率を使用する場合は増加させます。
- TTL: パケットの生存時間。パケットが期限切れになるまでに実行できる最大ホップ数を設定します。
可能な値: 1 (ダイレクト メッセージのみ、中継なし)、>1。 - BROADCASTADDR: ブロードキャストアドレス番号。
L3 構成:
- NODENUMBER: ローカルノード番号。各ノードには異なるノード番号が必要です。これは、通常のネットワークの IP アドレスに相当すると考えることができます。
可能な値: 1 ~ 255。BROADCASTADDR と同じアドレスを使用しないように注意してください。 - MAXNODES: ネットワーク内で予想されるノードの最大数。
- ANNOUNCEMINS: ノードの存在をアナウンスし、名前を更新します。このメッセージは、他のすべてのノードの存在をすべてのノードに通知するために必要です。静的ノード、高い拡散率、または大規模なネットワークを使用している場合は、スパムを防ぐために間隔を長くすることができます。
- INACTIVEMINS: ノードがオフラインとみなされるまでに必要な非アクティブ時間。 ANNOUNCEMINS の少なくとも 2 ~ 3 倍の値を使用するか、受信状態が悪い場合はそれ以上の値を使用するように注意してください。
- INACTIVESECONDSREMOVECHECK: オフライン ノードの削除を確認する間隔。
メッセージ構成:
- SHOWNMESSAGES: Web インターフェイスに表示するメッセージの数。
- KEEPNMESSAGES: メモリに保持するメッセージの数。
表示設定:
- DISPLAYSTBYSECS: ディスプレイがオフになってからの秒数。
ネットワーク構成:
- WIFIENABLED: Wi-Fi が有効です。これは、メッセージの中継のみにノードを展開する場合に使用される電力を削減するために使用できます。
- NODENAMEOVERRIDEEN: ノード名オーバーライドを有効にします。デフォルトのノード名 (Node [番号]) を NODENAMEOVERRIDE で指定された文字列にオーバーライドするために使用されます。
- NODENAMEOVERRIDE: 名前のオーバーライド。これは、Web インターフェイス上でノード名を変更せずにノード名を設定するために使用できます。リレーのみのノードをセットアップする場合に便利です。
- WIFISSID: Wi-Fi ネットワーク名のプレフィックス ( LoRaMessenger [番号])
- DNSPORT: DNS ポート。
ピン配置:
- SCK: SPI クロック。
- ミソ:SPIミソ。
- モシ:スピモシ。
- SS: SPI スレーブ選択。
- RST: LoRa チップのリセット。
- DI0: LoRa 受信コールバック。
- I2CSCL: I2C クロック。
- I2CSDA: I2C データ。
- LCDRESET: LCD リセット。
別のボードを使用する場合は、ピン定義を編集する必要がある場合があります (ピン定義は TTGO LoRa32 V2 に基づいています)。
将来の改善/修正
将来的に予定されているその他の機能は次のとおりです。
- メッセージの暗号化。右の場合、すべてのメッセージは暗号化されずに送信されます。
- メッセージの自動更新。
- ルーティングアルゴリズムのテストと改善。
ライセンス
MITライセンス。