📑

【Private LoRa】ESP-WROOM-32をホストマイコンにしてES920LRからES920LRGWにデータを送信する

2022/02/22に公開

はじめに

前回の記事で,Private LoRa通信モジュールの一つである「ES920LR」の通信設定を変更することができました.なので,今回は実際にPrivate LoRa通信を使ったデータ送信をやっていきます.

本記事では,前回の記事の知識を用いた実装を行うことがありますので,必要があればその都度戻って復習されると良いと思います.(復習するべき箇所はできるだけ毎回記述するようにします)

https://zenn.dev/masaoguchi/articles/4f56abc05bae83

今回の記事のゴール

さて,今回この記事をご覧頂いている皆さんのゴールは「Private LoRa通信を使ったデータ送信をすること」です.また,この送信するデータがダミーデータだと味気ないので,せっかくですし簡単なセンサデータをPrivate LoRa通信で送信してみましょう.

以上の目標達成のために,本記事は以下の項目を順に進めていきます.
1.2.は本来であれば4.にまとめてしまえるような手順ではありますが,段階的な理解のために,本記事では敢えて回りくどく実装していきます.

  1. ESP-WROOM-32でセンサデータを取得できるようにする
  2. ESP-WROOM-32をホストマイコンとしてES920LRのPrivate LoRa通信設定を行う
  3. ES920LRGWのPrivate LoRa通信設定を行う
  4. ESP-WROOM-32をホストマイコンとしてES920LRからES920LRGWにデータ送信を行う

ES920LRGWってなに?

「ES920LRGW」は株式会社EASELが提供しているPrivate LoRa通信用ゲートウェイです.内部にワイヤーアンテナ付きのPrivate LoRaモジュール(ES920LRの場合が多いと思います)を搭載しているのでPrivate LoRa通信が可能であり,さらに「ES920LRGW」にLANケーブルを接続することでPrivate LoRa通信で受信したデータをEthernet通信でサーバへ送信できます.

主な使い方としては,ES920LRをセンサと組み合わせて使ってセンサデータをこの「ES920LRGW」に送信し,さらに「ES920LRGW」がデータをサーバへ送信することで,センサネットワークを構築することが考えられます.

https://easel5.com/service/products-information/products/lora-gateway/es920lrgw/

センサデータを取得する

今回の記事では,センサデータをES920LRGWに送信することを目的としてますので,まずセンサデータを取れるようにします.

筆者は今回使用するセンサとしてsparkfunのSHT15搭載 温湿度センサモジュールを選択しました.とりあえず今回は使えるセンサならなんでも良いですし,センサなしの場合でもダミーデータを送信すれば今回の記事は進めてもらえますので,皆様のやりやすい形で進めてください.

0.用意したもの

ハードウェア

今回,実装のために以下のものを用意しました.

部品名 今回の記事での役割
ESP-WROOM-32 ホストマイコン
ES920LR Private LoRa通信モジュール
SHT15搭載 温湿度センサモジュール センサデバイス
ユニバーサル基板 半田付けをすることで簡単な基板を実装できます
ジャンプワイヤー 回路を組むときに使います
ブレッドボード 回路を組むときに使います

ソフトウェア

ESP-WROOM-32への書き込みはArduinoIDEを使用します.インストールが未完了の方はインストールをしておいてくださいね.

※今回の記事では「ArduinoIDE ver1.8.10」を使用しました

https://www.indoorcorgielec.com/resources/arduinoide設定/arduino-ideのインストールと設定/

1.回路を組む

まず,ESP-WROOM-32とSHT15搭載 温湿度センサモジュールで回路を組みます.

SHT15搭載 温湿度センサモジュールの利用ガイドには以下のように記述があるので,これに準拠して回路を組みます.

There are only four pins that need to be hooked up in order to start using this sensor in a project. One for VCC, one for GND, and two data lines.

VCC → 3.3V or 5V
GND → GND
Data → Any I/O Pin
SCK → Any I/O Pin

ピンアサイン

ESP-WROOM-32 ピン SHT15搭載 温湿度センサモジュール ピン
GND GND
3V3 VCC
10 DATA
13 SCK

ここまでで,ESP-WROOM-32でSHT15搭載 温湿度センサモジュールの制御をする回路が完成しました.

2.ファームウェアを書き込む

ボードマネージャーを追加する

まず,ArduinoIDEでESP-WROOM-32を使えるようにしないといけないので,ボードマネージャーを追加しましょう.

ただし,前回の記事でも同じ記述をしておりますので,既に追加済みの方はこの手順を省略可能です.

ESP-WROOM-32のボードマネージャー追加手順

💻 Windowsをお使いの方の場合

  1. Arduino IDEを起動して,ウィンドウ左上の「ファイル」-「環境設定」をクリックします.
  2. 「追加のボードマネージャのURL」の隣のアイコンをクリックします.
  3. 以下のURLを「追加のボードマネージャのURL」の空欄に入力して,「OK」をクリックします.(このとき,すでに他のアドレスが入力されている場合,「;」でURLを区切って入力してください.)
https://dl.espressif.com/dl/package_esp32_index.json
  1. 「OK」をクリックします.
  2. 「ツール」-「ボード:」-「ボードマネージャ」をクリックします.
  3. 「検索をフィルタ…」に「esp32」と入力すると,「esp32 by Espressif Systems」が表示されるので,「インストール」をクリックします.(ここで筆者の開発環境でのバージョンは1.0.4でした)
  4. インストールが行われるので,完了するまでしばらく待ちます.
  5. インストールが完了したら,「閉じる」をクリックして終了です.

🍎 Macをお使いの方の場合

  1. Arduino IDEを起動して,画面左上の「Arduino」-「Prefernces...」をクリックします.
  2. 「追加のボードマネージャのURL」の隣のアイコンをクリックします.
  3. 以下のURLを「追加のボードマネージャのURL」の空欄に入力して,「OK」をクリックします.(このとき,すでに他のアドレスが入力されている場合,「;」でURLを区切って入力してください.)
https://dl.espressif.com/dl/package_esp32_index.json
  1. 「OK」をクリックします.
  2. 「ツール」-「ボード:」-「ボードマネージャ」をクリックします.
  3. 「検索をフィルタ…」に「esp32」と入力すると,「esp32 by Espressif Systems」が表示されるので,「インストール」をクリックします.(ここで筆者の開発環境でのバージョンは1.0.4でした)
  4. インストールが行われるので,完了するまでしばらく待ちます.
  5. インストールが完了したら,「閉じる」をクリックして終了です.

SHT1x-ESPライブラリを追加する

次に,ESP-WROOM-32でSHT15搭載 温湿度センサモジュールの制御をするライブラリを追加しましょう.

Arduino IDEの「ツール」-「ライブラリの管理..」から「sht15」と検索し,以下のライブラリをインストールします.(ここで筆者の開発環境でのバージョンは1.0.2でした)

ファームウェアの書き込み

ボードマネージャーの追加が完了したら,ESP-WROOM-32にファームウェアを書き込みます.
以下の手順で書き込みを行なってください.

  1. ESP-WROOM-32とコンピュータを接続します.
  2. ArduinoIDEを開いて「ツール」-「ボード」から「ESP32 Dev Module」を選択します.(ESP32 Arduinoの一番上にあるかと思います)
  3. 「ツール」-「シリアルポート」からESP-WROOM-32が該当するポートを選択します.(cu.usbserialって書いてあるやつがたぶんそうです)
  4. 「ファイル」-「新規ファイル」を選択して新しいファームウェアを作成します.
  5. 以下のソースコードをArduinoIDEのスケッチにコピペします.
ソースコード
readSHT15.ino
#include <Arduino.h>
#include <SHT1x-ESP.h> // SHT1x-ESPライブラリ(本記事ではver 1.0.2)

#define dataPin  14 // SHT15搭載 温湿度センサモジュールのDATAに接続します
#define clockPin 13 // SHT15搭載 温湿度センサモジュールのSCKに接続します

SHT1x sht1x(dataPin, clockPin, SHT1x::Voltage::DC_3_3v); // SHT15搭載 温湿度センサモジュールとの通信を定義する

void setup() {
  Serial.begin(115200);
  Serial.println("Starting up");
}

void loop() {
  // float型の変数を定義する
  float temp_c;
  float humidity;

  // 温度(°C)と湿度(%)を各変数に代入する
  temp_c = sht1x.readTemperatureC();
  humidity = sht1x.readHumidity();

  // シリアルモニタ上にセンサデータを表示する
  Serial.print("Temperature:");
  Serial.print(temp_c, DEC);
  Serial.print("°C ");
  Serial.print("Humidity:");
  Serial.print(humidity);
  Serial.println("%");

  // 2秒待機する
  delay(2000);
}

※このソースコードはこちらを参考にしています

  1. 書き込みボタンをクリックして書き込みを行います.
  2. 「マイコンボードに書き込みを行なっています..」と表示されたら,ESP-WROOM-32の「Flush」ボタンを長押しします.(ESPは書き込みモードじゃないと書き込みができないので基本的に必須のアクションです)
  3. 「ボードへの書き込みが完了しました.」と表示されたら,完了です.

以上の手順が完了したら,シリアルモニタ上に取得した温度と湿度が表示されるようになると思います.温めてみたり,息を吹きかけてみたりしてセンサ値が変わることが確認できたらセンサの準備は問題なさそうですね.

ここまでで,センサデータの取得までが完了しました!次は,ES920LRの設定に進んでいきましょう.

今回の記事のゴール

  • ESP-WROOM-32でセンサデータを取得できるようにする
  • ESP-WROOM-32をホストマイコンとしてES920LRのPrivate LoRa通信設定を行う
  • ES920LRGWのPrivate LoRa通信設定を行う
  • ESP-WROOM-32をホストマイコンとしてES920LRからES920LRGWにデータ送信を行う

ES920LRのPrivate LoRa通信設定を行う

ES920LRなどのPrivate LoRa通信モジュールは「無線通信パラメータを一致」させて「送信先のアドレスを正しく設定」することで無線通信が可能となります.

このことは,以下の記事の「どうしたらES920LR2を使って通信ができるのか」に概要を示しておりますので,必要があれば御覧ください.(以下の記事では,ES920LR2を話題に出していますが,本記事で扱うES920LRと互換性があるデバイスなので通信設定の考え方は基本的に同じです)

https://zenn.dev/masaoguchi/articles/81905f45c37f23

さて,ES920LRの通信設定を進めていきます.

手順は前回の記事に示したものと同じですが,本記事では手順の詳細な説明は省きますので詳細は随時以下の記事にてご確認ください.

https://zenn.dev/masaoguchi/articles/4f56abc05bae83

1.回路を組む

先ほどセンサデータを取得するために,ESP-WROOM-32とSHT15搭載 温湿度センサモジュールを接続した回路を作成しました.この手順では,先ほど作成した回路にES920LRを追加接続する形で回路を組んでいきます.

ピンアサイン

本記事では,以下のピン同士を接続して回路を作成しました.
このときES920LRのRESETBピンはプルアップが必要なので注意してください.

ESP-WROOM-32 ピン SHT15搭載 温湿度センサモジュール ピン ES920LR ピン
GND GND GND×2
3V3 VCC VCCRF, VCC
10 DATA -
13 SCK -
17 - UART_TX
16 - UART_RX
9 - RESETB

2.ファームウェアを書き込む

SoftwareSerialライブラリを追加する

本記事ではESP-ROOM-32とES920LR間をUART通信で接続します.
そして,このときにSoftwareSerialを利用しますのでインストールを完了されてない方はここでインストールをお願いします.

Arduino IDEの「ツール」-「ライブラリの管理..」から「espso」と検索し,インストールをしてください.(ここで筆者の開発環境でのバージョンは5.3.3でした)

https://otomizu.work/2019/10/16/esp32-softwareserial-arduino-ide/

ファームウェアの書き込み

ここで,ES920LRのPrivate LoRa通信設定を変更するファームウェアを書き込みます.

今回は以下の通信設定になるように書き込みを行います.

設定項目 コマンド 設定内容
帯域幅 bw 125kHz
拡散率 sf 7
無線チャンネル番号 channel 1
PANネットワークアドレス panid ABCD
自ノードネットワークアドレス ownid 1000
送信先ノードネットワークアドレス dstid 0000

ファームウェア書き込み手順は以下の通りです.

  1. ESP-WROOM-32とコンピュータを接続します.
  2. ArduinoIDEを開いて「ツール」-「ボード」から「ESP32 Dev Module」を選択します.(ESP32 Arduinoの一番上にあるかと思います)
  3. 「ツール」-「シリアルポート」からESP-WROOM-32が該当するポートを選択します.(cu.usbserialって書いてあるやつがたぶんそうです)
  4. 「ファイル」-「新規ファイル」を選択して新しいファームウェアを作成します.
  5. 以下のソースコードをArduinoIDEのスケッチにコピペします.
ソースコード
setup_es920lr.ino
#include <SoftwareSerial.h> // SoftwareSerialライブラリ

#define UART_RX 17  // ES920LRの8ピン(TX)に接続します
#define UART_TX 16  // ES920LRの9ピン(RX)に接続します
#define LoRa_Rst 9 //  ES920LRの24ピン(RESETB)に接続します

SoftwareSerial LoRa_ss; // Private LoRa通信モジュールとのSoftwareSerialを定義します


// Private LoRa通信モジュールからのメッセージを受信します
void LoRa_read() {
  if (LoRa_ss.available())Serial.print("from LoRa >>");
  while (LoRa_ss.available()) {
    char c = LoRa_ss.read();
    if (c < 0x80)Serial.write(c);
    delay(1);
  }
}

// Private LoRa通信モジュールへメッセージを送信します
void LoRa_write(char msg[]) {
  LoRa_ss.write(msg);
  Serial.print("to   LoRa >>");
  Serial.print(msg);
  delay(500);
  LoRa_read();
}

void setup() {
  // コンピュータとの通信速度を定義します
  Serial.begin(115200);
  // SoftwareSerialでPrivate LoRa通信モジュールとの通信を定義します
  LoRa_ss.begin(115200, UART_RX, UART_TX, SWSERIAL_8N1, false, 256); // ES920LRのデフォルトボーレート(115200bps)

  Serial.println("Start!!");

  // ES920LRをコンフィグレーションモードに移行します
  LoRa_write("config\r\n");

  // Private LoRa通信モジュールをリセットするピンを定義します
  pinMode(LoRa_Rst , OUTPUT);
  delay(1000);
  digitalWrite(LoRa_Rst, HIGH);
  delay(1000);

  // Private LoRa通信モジュールを一度リセットします
  Serial.println("Reset");
  digitalWrite(LoRa_Rst, LOW);
  delay(1000);
  digitalWrite(LoRa_Rst, HIGH);
  delay(1000);

  // Private LoRa通信モジュールからのメッセージを受信します
  LoRa_read();

  // ES920LRのプロセッサーモードを選択します
  LoRa_write("processor\r\n");
  delay(1000);

  // ES920LRの設定を全て初期設定に戻す
  LoRa_write("load\r\n");
  delay(100);

  // 帯域幅を125kHzに設定します
  LoRa_write("bw 4\r\n");
  delay(100);

  // 拡散率を7に設定します
  LoRa_write("sf 7\r\n");
  delay(100);

  // 無線チャンネル番号を1に設定します
  LoRa_write("channel 1\r\n");
  delay(100);

  // PANネットワークアドレスをABCDに設定します
  LoRa_write("panid ABCD\r\n");
  delay(100);

  // 自ノードのネットワークアドレスを1000に設定します
  LoRa_write("ownid 1000\r\n");
  delay(100);

  // 送信先ノードのネットワークアドレスを0000に設定します
  LoRa_write("dstid 0000\r\n");
  delay(100);

  // 設定した内容を内蔵FlashROMに保存します
  LoRa_write("save\r\n");
  delay(10000);

  // ES920LRをオペレーションモードに移行します
  LoRa_write("start\r\n");
  delay(1000);
}

void loop() {
}
  1. 書き込みボタンをクリックして書き込みを行います.
  2. 「マイコンボードに書き込みを行なっています..」と表示されたら,ESP-WROOM-32の「Flush」ボタンを長押しします.(ESPは書き込みモードじゃないと書き込みができないので基本的に必須のアクションです)
  3. 「ボードへの書き込みが完了しました.」と表示されたら,完了です.

書き込みが完了して,シリアルモニタを開くと,以下のように「(コマンド) (コマンドオプション)(改行)」という文字列がコマンドとしてES920LRに送信され,ES920LRが設定変更に成功したら「OK」とレスポンスをくれている状態になると思います.

最終的に「start」コマンドまでいって「OK」とレスポンスが返ってきていたら,ここまでの段階は完了です!

今回の記事のゴール

  • ESP-WROOM-32でセンサデータを取得できるようにする
  • ESP-WROOM-32をホストマイコンとしてES920LRのPrivate LoRa通信設定を行う
  • ES920LRGWのPrivate LoRa通信設定を行う
  • ESP-WROOM-32をホストマイコンとしてES920LRからES920LRGWにデータ送信を行う

ES920LRGWのPrivate LoRa通信設定を行う

次に,ES920LRからES920LRGWへのPrivate LoRa通信を可能とするためにES920LRGWの設定を行います.

ES920LRGWのPrivate LoRa通信設定は以下の2つの手法どちらかを実行して頂ければできます.
本記事では,どちらの方法についても解説致しますが,筆者的には2.の手法をお勧めします.(2.の手法であればPrivate LoRa通信設定とEthernet設定の両方が可能であるため)

  1. 専用アプリケーションの「無線パラメータ設定ツール」で設定を変更する
  2. ターミナルエミュレータで設定を変更する

無線パラメータ設定ツールでの設定変更手順

本記事では,この無線パラメータ設定ツールでの設定変更はWindows環境で行うことを推奨します.(筆者はMac環境で実行したことがないので,追って実行可能か調査します)

設定変更手順に関しては,公式のES920LRGW 取扱説明書の「無線設定変更手順」の通りに進めていきます.

まず,ES920LRGW 取扱説明書の「無線設定変更手順」のはじめの文章を確認すると,

無線設定を変更する際は、専用アプリケーション「無線パラメータ設定ツール」を使用します。

と記述があります.この「無線パラメータ設定ツール」ってどこでインストールするの?と感じる方もいらっしゃるかと思いますが,筆者の場合はES920LRGWが届いた際に,本体や専用ACアダプタなどと共にディスクが内包されており,その中に「無線パラメータ設定ツール」がありました.なので,ディスクを読み取れる機器も必要となりますので,ご注意ください.

さて,設定手順に話を戻します.

  1. ES920GW/ES920LRGW に付属 AC アダプタを接続し、電源を入れます。
    ※ 付属 AC アダプタ以外は使用しないで下さい。

ここの注意文に関してですが,本当に危ないので筆者からも注意をお願い致します.

以下の手順まではES920LRGW 取扱説明書通りに進めます.

  1. ES920GW/ES920LRGW とパソコンを USB ケーブルで接続します。
  2. 自動的にデバイスドライバのインストールが開始します。
    ※ インストールに失敗した場合は、メーカーサイトからデバイスドライバのダウンロードをお願いします。
    http://www.ftdichip.com/Drivers/D2XX.htm
  3. インストールに成功するとデバイスマネージャ上に USB Serial Port が追加されます。

次の手順5.は付属のディスクを読み込み可能な状態で実行します.

  1. 無線パラメータ設定ツールをダブルクリックし、設定変更用アプリケーションを起動します。

以下の手順も準拠しましょう.(7.についてはそもそも「親機」しか選べない場合があると思います)

  1. 起動したアプリケーションの画面からGWを接続したCOMポートを選択し、「接続」ボタンを押下します。
  2. ノード種別で「親機」を選択します。

次の手順でPANネットワークアドレスの設定を行います.今回は「ABCD」と入力します.

  1. PAN ID を入力します。

同様に無線チャンネル,帯域幅,拡散率の設定を行います.今回はそれぞれ,「1」「125kHz」「7」を入力・選択します.

  1. 無線チャンネルを入力します。
  2. 帯域幅を選択します。
  3. 拡散率を選択します。

ここまでで設定項目の入力・選択は完了しましたので,最後に以下の手順で設定を反映して終了します.

  1. 「設定」ボタンを押下します。

ターミナルエミュレータでの設定変更手順

ターミナルエミュレータの準備

本記事で使用するターミナルエミュレータは,Windows及びMac環境のそれぞれで別のものを使用しますので,それぞれの環境下での設定手順を示します.

💻 Windowsをお使いの方の場合
Windows環境ではターミナルエミュレータとして,「Teraterm」を使用します.以下の記事を参考にインストールをお願い致します.

https://eng-entrance.com/teraterm-install

インストールが完了したら,以下の手順でTeratermの設定を変更します.

  1. Teratermを起動します.
  2. 「シリアル」からES920LRGWが接続されているポートを選択します.
  3. メニューバーの「設定」→「端末」を選択します.
  4. 「改行コード」にある「送信(M)」を「CR+LF」に変更し,ローカルエコーにチェックを入れます.
  5. メニューバーの「設定」→「シリアルポート」を選択します.
  6. 「スピード(E)」を「115200」に変更します.
  7. Teraterm内でEnterキーを入力し,「>COM」と出力されれば完了です.

🍎 Macをお使いの方の場合
Mac環境ではターミナルエミュレータとして「Coolterm」を使用します.以下の記事からインストールをお願い致します.

http://mac.dailydownloaded.com/ja/developer-tools/specialized-tools/4734-coolterm-download-install

インストールが完了したら,以下の手順でCooltermの設定を変更します.

  1. Cooltermを起動します.
  2. メニューバーの「Connection」→「Options...」を選択します.
  3. 「Serial Port」の「Port」をES920LRGWが接続されているポートに接続し,「Baudrate」を「115200」に変更します.
  4. 「Terminal」の「Enter Key Emulation」が「CR+LF」になっていることを確認し,「Local Echo」にチェックを入れます.
  5. 「Connect」をクリックします.
  6. Coolterm内でEnterキーを入力し,「>COM」と出力されれば完了です.

ターミナルエミュレータ上でのコマンド入力による設定変更

この章の手順はWindows環境,Mac環境共通となっております.

前節で,みなさんのPCとES920LRGWとの接続が完了しましたので,その接続を利用してES920LRGWのPrivate LoRa通信設定を変更していきます.

まず,ターミナルエミュレータ内で「help」コマンドを入力してみてください.そうすると以下のような設定コマンドの一覧が確認できるかと思います.ここで表示されているコマンドを利用して設定を行っていきます.コマンドの詳細はES920LRGW 取扱説明書をご覧ください.(ES920LRGW 取扱説明書に記載のないコマンドはES920LR2コマンド仕様ソフトウェア説明書などが参考になると思います)

そして本記事では,帯域幅,拡散率,無線チャンネル,PANネットワークアドレスの設定変更を行いますので,以下の手順で設定変更を進めていきます.以下の設定内容はあくまで,本記事におけるES920LRとES920LRGW間のPrivate LoRa通信を実現するための設定であることご留意ください.

  1. 「panid」と入力します.
  2. PANネットワークアドレスを聞かれるので「ABCD」と入力します.
  3. 「bw」と入力します.
  4. 帯域幅を聞かれるので,「2」と入力して125kHzを選択します.
  5. 「sf」と入力します.
  6. 拡散率を聞かれるので,「7」と入力します.
  7. 「channel」と入力します.
  8. 無線チャンネルを聞かれるので,「1」と入力します.
  9. 「save」を入力して,変更した設定を保存します.
  10. ES920LRGWの電源を抜き差しして,リセットを行います.
  11. 「show」コマンドを入力し,設定変更が正しく行われているか確認します.

以上で,ES920LRGWのPrivate LoRa通信設定は完了です!
次が最後の項目となりますので,皆様もう少しだけお付き合いください.

今回の記事のゴール

  • ESP-WROOM-32でセンサデータを取得できるようにする
  • ESP-WROOM-32をホストマイコンとしてES920LRのPrivate LoRa通信設定を行う
  • ES920LRGWのPrivate LoRa通信設定を行う
  • ESP-WROOM-32をホストマイコンとしてES920LRからES920LRGWにデータ送信を行う

(おまけ)ES920LRGWのEthernet通信について

ES920LRGWはPrivate LoRa通信が可能なゲートウェイなので,本来であればEthernet通信の設定も行なってES920LRGWとサーバを繋ぎ,最終的には集約したデータをPOSTすることができますが,今回の記事としては取り扱わず,あくまでES920LRとES920LRGWとのPrivate LoRa通信に焦点を当てています.
サーバへの接続や,データPOSTに関しては次回以降の記事にて記述する予定です.

ES920LRからES920LRGWにデータ送信を行う

いよいよES920LRからES920LRGWでPrivate LoRa通信を実装します.

1.回路を組む

まず,子機デバイスの回路を組む必要がありますが,この手順は本記事の「ES920LRのPrivate LoRa通信設定を行う」の章で説明をした通りになりますので,既に完了している方はこの手順をスキップして頂いて大丈夫です.

前章を飛ばして読んでいる方やもう一度確認したい方は,以下に説明をトグル内にしまってありますので,開いてご確認ください.

回路説明

本記事では,以下のピン同士を接続して回路を作成しました.
このときES920LRのRESETBピンはプルアップが必要なので注意してください.

ESP-WROOM-32 ピン SHT15搭載 温湿度センサモジュール ピン ES920LR ピン
GND GND GND×2
3V3 VCC VCCRF, VCC
10 DATA -
13 SCK -
17 - UART_TX
16 - UART_RX
9 - RESETB

2.ファームウェアの書き込み

今回の記事では,SHT15搭載 温湿度センサモジュール及びESP-ROOM-32とES920LR間のUART通信を利用するために,それぞれライブラリのインストールが必要となります.どちらのライブラリも前述の手順で完了しておりますが,こちらもトグル内に説明を記述致しますので,必要であればご確認ください.

SHT1x-ESPライブラリを追加する

ここで,ESP-WROOM-32でSHT15搭載 温湿度センサモジュールの制御をするライブラリを追加しましょう.

Arduino IDEの「ツール」-「ライブラリの管理..」から「sht15」と検索し,以下のライブラリをインストールします.(ここで筆者の開発環境でのバージョンは1.0.2でした)

SoftwareSerialライブラリを追加する

本記事ではESP-ROOM-32とES920LR間をUART通信で接続します.
そして,このときにSoftwareSerialを利用しますのでインストールを完了されてない方はここでインストールをお願いします.

Arduino IDEの「ツール」-「ライブラリの管理..」から「espso」と検索し,インストールをしてください.(ここで筆者の開発環境でのバージョンは5.3.3でした)

そして,上記の環境設定が完了した方は以下の手順でESP-ROOM-32に書き込みを行います.

  1. ESP-WROOM-32とコンピュータを接続します.
  2. ArduinoIDEを開いて「ツール」-「ボード」から「ESP32 Dev Module」を選択します.(ESP32 Arduinoの一番上にあるかと思います)
  3. 「ツール」-「シリアルポート」からESP-WROOM-32が該当するポートを選択します.(cu.usbserialって書いてあるやつがたぶんそうです)
  4. 「ファイル」-「新規ファイル」を選択して新しいファームウェアを作成します.
  5. 以下のソースコードをArduinoIDEのスケッチにコピペします.
ソースコード
send_sht15_using_es920lr.ino
#include <Arduino.h>
#include <SHT1x-ESP.h> // SHT1x-ESPライブラリ(本記事ではver 1.0.2)
#include <SoftwareSerial.h> // SoftwareSerialライブラリ(本記事ではver 5.3.3)

#define UART_RX 17  // ES920LRの8ピン(TX)に接続します
#define UART_TX 16  // ES920LRの9ピン(RX)に接続します
#define LoRa_Rst 9 //  ES920LRの24ピン(RESETB)に接続します

#define dataPin  14 // SHT15搭載 温湿度センサモジュールのDATAに接続します
#define clockPin 13 // SHT15搭載 温湿度センサモジュールのSCKに接続します

SoftwareSerial LoRa_ss; // Private LoRa通信モジュールとのSoftwareSerialを定義します

SHT1x sht1x(dataPin, clockPin, SHT1x::Voltage::DC_3_3v); // SHT15搭載 温湿度センサモジュールとの通信を定義する

// Private LoRa通信モジュールからのメッセージを受信します
void LoRa_read() {
  if (LoRa_ss.available())Serial.print("from LoRa >>");
  while (LoRa_ss.available()) {
    char c = LoRa_ss.read();
    if (c < 0x80)Serial.write(c);
    delay(1);
  }
}

// Private LoRa通信モジュールへメッセージを送信します
void LoRa_write(char msg[]) {
  LoRa_ss.write(msg);
  Serial.print("to   LoRa >>");
  Serial.print(msg);
  delay(500);
  LoRa_read();
}

void setup() {
  // コンピュータとの通信速度を定義します
  Serial.begin(115200);
  // SoftwareSerialでPrivate LoRa通信モジュールとの通信を定義します
  LoRa_ss.begin(115200, UART_RX, UART_TX, SWSERIAL_8N1, false, 256); // ES920LRのデフォルトボーレート(115200bps)
  Serial.println("Start!!");

  // ES920LRをコンフィグレーションモードに移行します
  LoRa_write("config\r\n");

  // Private LoRa通信モジュールをリセットするピンを定義します
  pinMode(LoRa_Rst , OUTPUT);
  delay(1000);
  digitalWrite(LoRa_Rst, HIGH);
  delay(1000);

  // Private LoRa通信モジュールを一度リセットします
  Serial.println("Reset");
  digitalWrite(LoRa_Rst, LOW);
  delay(1000);
  digitalWrite(LoRa_Rst, HIGH);
  delay(1000);

  // Private LoRa通信モジュールからのメッセージを受信します
  LoRa_read();

  // ES920LRのプロセッサーモードを選択します
  LoRa_write("processor\r\n");
  delay(1000);

  // ES920LRの設定を全て初期設定に戻す
  LoRa_write("load\r\n");
  delay(100);

  // 帯域幅を125kHzに設定します
  LoRa_write("bw 4\r\n");
  delay(100);

  // 拡散率を7に設定します
  LoRa_write("sf 7\r\n");
  delay(100);

  // 無線チャンネル番号を1に設定します
  LoRa_write("channel 1\r\n");
  delay(100);

  // PANネットワークアドレスをABCDに設定します
  LoRa_write("panid ABCD\r\n");
  delay(100);

  // 自ノードのネットワークアドレスを1000に設定します
  LoRa_write("ownid 1000\r\n");
  delay(100);

  // 送信先ノードのネットワークアドレスを0000に設定します
  LoRa_write("dstid 0000\r\n");
  delay(100);

  // 設定した内容を内蔵FlashROMに保存します
  LoRa_write("save\r\n");
  delay(10000);

  // ES920LRをオペレーションモードに移行します
  LoRa_write("start\r\n");
  delay(1000);
}

void loop() {
  // float型の変数を定義する
  float temp_c;
  float humidity;

  // 温度(°C)と湿度(%)を各変数に代入する
  temp_c = sht1x.readTemperatureC();
  humidity = sht1x.readHumidity();

  // 送信用の文字列を定義する
  char send_buff[25] = {'\0'};
  // 送信用文字列にセンサ値を代入する
  sprintf(send_buff, "@temp:%2.2f@hmd:%2.2f\r\n", temp_c, humidity);
  // ES920LRでES920LRGWへ送信する
  LoRa_write(send_buff);
  delay(5000);

}
  1. 書き込みボタンをクリックして書き込みを行います.
  2. 「マイコンボードに書き込みを行なっています..」と表示されたら,ESP-WROOM-32の「Flush」ボタンを長押しします.(ESPは書き込みモードじゃないと書き込みができないので基本的に必須のアクションです)
  3. 「ボードへの書き込みが完了しました.」と表示されたら,完了です.

3.Private LoRa通信疎通確認と解説

上記までの手順が完了したら,Private LoRa通信疎通の確認のために,ESP-WROOM-32をPCに接続した状態でシリアルモニタを開いてみましょう.すると以下のように「@temp:(温度データ)@hmd:(湿度データ)」といった具合でデータがES920LRにUART通信で送信され,そのレスポンスとして「OK」が返ってきていることが確認できます.

ここで,ES920LRからは「OK」とレスポンスがありますが,どういう意味なのでしょうか.
ES920LRコマンド仕様ソフトウェア説明書の「レスポンスコード一覧」を確認すると以下のような表が記載されており,「OK」というレスポンスが返ってきている場合はPrivate LoRa通信が正常に行えていることがわかります.

そして,ここは気になった方も多いかと思いますが,本記事では温湿度センサのデータを「@temp:(温度データ)@hmd:(湿度データ)」という形式で送信しています.この形式にも,もちろん意味があります.

ES920LRGW 取扱説明書の「データフォーマット」を確認すると以下のような記述があります.

ES920GW/ES920LRGWは、電源ON後、センサユニットからのデータ受信を待機し、受信したデータをUSBポート(仮想COM)と Ethernetポートに出力します。

(中略)

Ethernetには、HTTP(POST)プロトコルを採用しています。
ES920GW/ES920LRGWでは、’@’から次の’@’までをHTTPボディ部の1つのパラメータとして解釈しています。(パラメータ名とパラメータ値は ’:’ で区切ります。)

(中略)

例) センサユニットから@区切りのデータ(@ABC:0123@DEF:4567)を送信した場合
   USB ポート出力データ @NODE:1234@ABC:0123@DEF:4567
   HTTP ボディ部データ NODE=1234&ABC=0123&DEF=4567

つまり,上記のルールでデータを送信すれば,ES920LRGWからデータサーバへデータを送信するときに,複数のパラメータに分けたデータをサーバ側で受信できるようになります.

本記事では温湿度センサを活用しておりますので,「温度」というパラメータと「湿度」というパラメータを分けて送信したいと考えるのが自然だと思います.そこで,「@temp:(温度データ)@hmd:(湿度データ)」という形式でES920LRからPrivate LoRa通信でデータ送信をすることで,温度と湿度のパラメータをそれぞれ定義できるようになります.

また,ここでPrivate LoRa通信は通信における消費電力を抑えたり,通信距離を伸ばしたりする代わりに送信ペイロード長(送信できるデータの長さ)や通信速度を犠牲にしています.具体的には,送れるペイロード長(データの長さ)は50byte(50文字)までとなっています(通信設定によってはさらに短い場合もあります)ので,この点にも注意してご利用ください.

以上で,本記事のゴールが全て達成されました🎉
この記事までの内容を完了すればPrivate LoRa通信の基礎的な送信部分はできるようになったと思います.お疲れ様でした!

今回の記事のゴール

  • ESP-WROOM-32でセンサデータを取得できるようにする
  • ESP-WROOM-32をホストマイコンとしてES920LRのPrivate LoRa通信設定を行う
  • ES920LRGWのPrivate LoRa通信設定を行う
  • ESP-WROOM-32をホストマイコンとしてES920LRからES920LRGWにデータ送信を行う

おわりに

今回の記事で皆様にはPrivate LoRa通信の基本的な使い方を学んで頂きました.
通信技術はIoTシステムを構築する上で大変重要となる要素なので,この「ES920LR」シリーズを利用してIoTシステムを開発される方はしっかり抑えておくべき内容だったかなと思います.

また,本記事ではPrivate LoRa通信を実現する上で最低限必要な設定項目のみに焦点を当てて紹介しておりますが,実際はその他にもたくさん設定項目があります.消費電力を抑えたり,中継機能をつけたり色々できますのでご興味のある方はES920LRコマンド仕様ソフトウェア説明書だったり,他の資料をじっくり読んでみてください.

そして,次回以降の記事ではPrivate LoRa通信のゲートウェイからデータサーバへEthernet通信を利用してデータを格納するところまでを書く予定です.

以上です.最後まで読んで頂きありがとうございました!
みなさまの貴重なご意見・ご感想お待ちしております.

参考

株式会社EASEL
プライベートLoRaゲートウェイ ES920LRGW | 株式会社EASEL
SHT15搭載 温湿度センサモジュール
Arduino IDEのインストールと設定(Windows, Mac, Linux対応)- Indoor Corgi
github - sht1x-ESP
ESP32-Arduino IDEを活用した開発環境の準備
macOSでESP32-dev-moduleを実験する。
ES920LRGW 取扱説明書
ES920LR2コマンド仕様ソフトウェア説明書
ES920LRコマンド仕様ソフトウェア説明書
【ゼロからわかる】Teratermのインストールと使い方
CoolTerm ダウンロードしてインストールします | Mac

Private LoRa通信関連の記事シリーズ

Private LoRa通信モジュールに関する記事をいくつか書いておりますので,興味がございましたら合わせてご覧ください.

https://zenn.dev/masaoguchi/articles/81905f45c37f23

https://zenn.dev/masaoguchi/articles/4f56abc05bae83

https://zenn.dev/masaoguchi/articles/a33746a576e21f

https://zenn.dev/masaoguchi/articles/34bc99e9fcd431

https://zenn.dev/masaoguchi/articles/56b735207daf6e

Discussion