🗼

M5Stack+LoRaユニット(E220-900T22S)と通信をしてみる

2023/10/29に公開

始めに

920MHz帯域で数Kmの通信が可能なLoRaモジュールの価格が下がってきて、お手頃な値段で手に入るようになりました。(数年前はモジュール搭載の基板だと1万円越えが普通)
ここで整理しますが、LoRaと言っても「LoRaWAN」と「プライベートLoRa」の2種類があり、このページではプライベートLoRaについて扱います。そしてプライベートLoRaはモジュールメーカー独自の通信方式なので、他メーカーとの通信は出来ません。逆に言うと違うメーカーから発売されている物でも、モジュールが同じであり設定を合わせれば通信は可能です。例えばこのような製品があります

M5社から発売されたLoRaユニットは、クレアリンクテクノロジー社のE220-900T22S(JP)というモジュールが使用されています。元々E220-900T22Sというモジュールは、中国メーカーからEBYTEブランドで発売されていたモジュールですが、日本向けにカスタマイズし技適を通したものが(JP)付きのモジュールです。

※省令の規制によって無線LANのような連続通信はできません。速度も低速です。遠距離に少量のデータを送るのに向いた通信方式です。参考:総務省HP

M5Stackを準備する

ArduinoIDEでM5Stackに何かしらのプログラムが書き込める状態になっている事が前提です。

ArduinoIDEのライブラリマネージャーから、「M5-LoRa-E220-JP」を検索して、インストールします。

このライブラリ付属のサンプルプログラムはM5Unifiedを使用していますので、同じく「M5Unified」を検索してインストールします。

依存関係のあるライブラリも「全てをインストール」します。

「ファイル」→「スケッチ例」→「M5-LoRa-E220-JP」→「P2P_TX_RX」を選択してサンプルプログラムを表示します。

プログラムのLoRa設定部分を変更します。

とりあえず、以下のようにします。

    config.own_address              = 0x0000;
    config.baud_rate                = BAUD_9600;
    config.air_data_rate            = BW500K_SF5;
    config.subpacket_size           = SUBPACKET_200_BYTE;
    config.rssi_ambient_noise_flag  = RSSI_AMBIENT_NOISE_ENABLE;
    config.transmitting_power       = TX_POWER_13dBm;
    config.own_channel              = 0x0A;
    config.rssi_byte_flag           = RSSI_BYTE_ENABLE;
    config.transmission_method_type = UART_P2P_MODE;
    config.lbt_flag                 = LBT_DISABLE;
    config.wor_cycle                = WOR_2000MS;
    config.encryption_key           = 0x0000;
    config.target_address           = 0x0000;
    config.target_channel           = 0x0A;

M5StackとLoRaユニットを接続してプログラムを書き込みます。この状態だとLoRaモジュールの設定がされていません。

M0、M1スイッチを数字側にすると、モジュールの設定が完了します。設定はモジュールに保存されるので、次からはこの作業は必要ありません。

M0、M1スイッチをON側に戻して通信モードにしておきましょう。

通信相手を用意する

通信相手はこのあたりが使えます

今回は、FLINT LoRa無線シールドを使用して、Arduino Uno R3と通信してみます。
LoRa無線シールド上のSW1を5V、SW9をD5/D6にして、Arduino UNOをパソコンに接続します。

ArduinoIDEのライブラリマネージャーから、「FLINT」を検索して、FLINT_E220-900T22S-JPをインストールします。

「ファイル」→「スケッチ例」→「FLINT_E220-900T22S-JP」→「send_receive_string」を選択してサンプルプログラムを表示します。

「for Arduino Uno R3」のコメントアウトを外し有効にし、「for Arduino Leonardo」をコメントアウトして無効にします。

スケッチをArduinoに書き込みをします。

シリアルモニタに「RegOK」と表示されていれば、正常に動作しています。

動作確認

M5StackのAボタンを押すと、文字が送信されます。LoRa無線シールド側には、シリアルモニタで受信文字とRSSI(電波の強さ)とSNR(通信帯域の雑音の多さ)が表示。

LoRa無線シールドのD12ボタンを押すと送信され、M5Stack側に受信内容が表示されます。これで双方向通信が出来ました。

Discussion