7 基本的な使用方法
#
7.1 設定コマンドと送信までの一連の流れ本モジュールのレジスタへのパラメータ設定をするに当たり、Config/DeepSleepモードにするために、M1、M0ピンに接続しているMCUのGPIOピンを両方ともHighにします。Arduinoを用いた疑似コードを以下に示します。
Arduinoでの擬似コード
// E220-900T22S(JP)へのピンアサイン#define LoRa_ModeSettingPin_M0 12#define LoRa_ModeSettingPin_M1 13
pinMode(LoRa_ModeSettingPin_M0, OUTPUT);pinMode(LoRa_ModeSettingPin_M1, OUTPUT);
digitalWrite(LoRa_ModeSettingPin_M0, 1);digitalWrite(LoRa_ModeSettingPin_M1, 1);
10.1節のver.1互換モードでのレジスタ書き込みコマンドに基づき、UARTからコマンドバイト列を送信します。ここでは例として、22S(JP)モジュールに対して以下の設定を一括で書き込む場合を述べます。
・自デバイスアドレス=0・baud_rate=9600bps・bw=125kHz・sf=9・ペイロード長=200byte・RSSI環境ノイズ=有効・送信出力=13dBm・待ち受け周波数チャンネル=0・RSSIバイトの出力=有効・送信方法=通常送信モード・WORサイクル=500ms・暗号化キー=0
このとき、送信バイト列は以下となります。
['0xc0', '0x00', '0x08', '0x00', '0x00', '0x70', '0x21', '0x00', '0xc0', '0x00', '0x00']
また、コマンドのレスポンスバイト列としてレジスタ設定値が以下の通り返ってきます。
['0xc1', '0x00', '0x08', '0x00', '0x00', '0x70', '0x21', '0x00', '0xc0', '0x00', '0x00']
次に、Strict Mode (v2.0厳格動作)へのモード変更について述べます。Strict Mode (v2.0厳格動作)への切り替えフラグは0x09レジスタのbit 6にあるので、レジスタ書き込みコマンドによって、このbitを有効にします。0x09レジスタの他のbitのデフォルトは全て0なので、送信バイト列は以下となります。
['0xc0', '0x09', '0x01', '0x40']
コマンドのレスポンスバイト列としてレジスタ設定値が以下の通り返ってきます。
['0xc1', '0x09', '0x01', '0x40']
以上により本モジュールのレジスタへのパラメータ設定ができたので、次はLoRa送受信について述べます。通常送受信モードにするために、M1、M0ピンに接続しているMCUのGPIOピンを両方ともLowにします。
レジスタ設定にて送信方法として通常送信モードを指定したので、ペイロードデータの前に宛先デバイスアドレス(2byte)と宛先デバイスの待ち受け周波数チャンネル(1byte)の情報を付加して、宛先デバイスを指定する必要があります。ここでは例として、以下の宛先とペイロードデータを送信する場合を考えます。
・宛先デバイスアドレス=10・宛先デバイスの待ち受け周波数チャンネル=5・ペイロードデータ= [‘0x68’, ‘0x65’, ‘0x6c’, ‘0x6c’, ‘0x6f’] (“hello”)
このとき、送信バイト列は以下となります
[‘0x00’, ‘0x0A’, ‘0x05’, ‘0x68’, ‘0x65’, ‘0x6C’, ‘0x6C’, ‘0x6F’]
また、受信側ではレジスタ設定にてRSSIバイトの出力を有効にしているため、受信モジュールから出力されるバイト列として、ペイロードデータとRSSIバイトが含まれます。 上記の送信データを受信して、RSSIバイトを含めた受信バイト列は以下のようになります。 RSSIバイトのdBm換算式(dBm = RSSIバイト-256)から、RSSIバイトの0xA0は160-256=-96dBmと計算されます。
[‘0x68’, ‘0x65’, ‘0x6C’, ‘0x6C’, ‘0x6F’, ‘0xA0’]
Strict Mode (v2.0厳格動作)で有効にできる機能として、UART入出力バイト列へのCHECKSUM付与機能および、UART出力バイト列へのパケットサイズ付与機能があります。0x09レジスタを使用して、以下の設定を切り替えることができます:
- MCUから本モジュールへのUART入力バイト列へのCHECKSUM付与の要/不要
- 本モジュールからMCUへのUART出力バイト列へのCHECKSUM付与の有効/無効
- 本モジュールからMCUへのUART出力バイト列の先頭にパケットサイズバイト付与の有効/無効
ここでは、一例として上記の1. MCUから本モジュールへのUART入力バイト列へのCHECKSUM付与機能を有効にした場合のCHECKSUM計算およびコード例を示します。6.13節の通り、CHECKSUMはバイト毎の排他的論理和(XOR)を計算した1バイト値が付加されます。宛先およびペイロードデータについては前述のものと同じとしたとき、CHECKSUMの計算は次の通りです。通常送信モードの場合は、「宛先デバイスアドレス」、「宛先デバイスの待ち受け周波数チャンネル」をCHECKSUMの計算に含め、バイトごとにXORを計算してCHECKSUMは0x6Dと計算され、送信バイト列は次のようになります。
[‘0x00’, ‘0x0A’, ‘0x05’, ‘0x68’, ‘0x65’, ‘0x6C’, ‘0x6C’, ‘0x6F’, ‘0x6D’]
Arduinoでの擬似コードとして、XORを計算し送信バイト列へ付加するコードは以下の通りです。
// 送信バイト列std::vector<byte> byteVector = {0x00, 0x0A, 0x05, 0x68, 0x65, 0x6C, 0x6C, 0x6F};
// XOR計算の結果を格納する変数byte xorResult = 0;
// 送信バイト列の各要素に対してXOR演算を実行for (byte b : byteVector) { xorResult ^= b;}
// XOR結果を送信バイト列の最後に追加byteVector.push_back(xorResult);
8.4節で後述するキャリアセンス動作について、送信前のキャリアセンス最大待機時間を設定するコマンド操作例を示します。キャリアセンスタイムアウト設定の0x0Aレジスタへパラメータ設定するに当たり、Config/DeepSleepモードに移行してください。10.1節のレジスタ書き込みコマンドに基づき、UARTからコマンドバイト列を送信します。ここでは送信前のキャリアセンス最大待機時間として100msを設定する場合、以下となります。
['0xC0', '0x0A', '0x01', '0x60']
コマンドのレスポンスバイト列としてレジスタ設定値が以下の通り返ってきます。
['0xC1', '0x0A', '0x01', '0x60']
通常送受信モードにて、待ち受け周波数チャンネルの環境ノイズ計測について確認するコマンド操作例を示します。0xA3レジスタに対して読み出しコマンド発行時に環境ノイズをRSSI値として取得できます。10.1節のレジスタ読み出しコマンド(v2.0厳格動作)に基づき、UARTからコマンドバイト列を送信します。
[‘0xFF’, ‘0xFF’, '0xC1', '0xA3', '0x01']
コマンドのレスポンスバイト列として以下の通り返ってきます。この例では、環境ノイズRSSIを-110dBmとして示しています。
[‘0xFF’, ‘0xFF’, '0xC1', '0xA3', '0x01', '0x92']