概要
E220-900T22S(JP)モジュールはUARTでの入出力によって、モジュールのパラメータ設定およびLoRaでの送受信を行うことが出来ます。
本チュートリアルは、LoRaモジュールとしてE220-900T22S(JP)を搭載したRaspberry Pi 3/4およびRaspberry Pi Zero向けのSimpleLoRaHATを用いた、E220-900T22S(JP)モジュールの使用方法についてのチュートリアルガイドになります。
SimpleLoRaHAT
SimpleLoRaHATでの、E220-900T22S(JP)モジュールとRaspberry Piとの配線は下記の通りとなっています。
- モジュールの電源としてVCCピンとGNDピンへの接続
- UARTとしてTXDピンとRXDピンへの接続
- モジュールのモード設定のためM0ピンとM1ピンへの接続
- モジュールからの通知信号線としてAUXピンへの接続
E220-900T22S(JP) | Raspberry Pi |
---|---|
GND | GND |
VCC | 5V |
AUX | GPIO25 |
TXD | GPIO15 |
RXD | GPIO14 |
M1 | GPIO6 |
M0 | GPIO5 |
サンプルコード実行環境の構築
GPIOヘッダーのUARTピンでUARTを使用する
デフォルトではRaspberry Piはシリアルポートが無効になっているため、設定を変更します。
ターミナルから、次のコマンドを入力します。
pi@raspberrypi:~ $ sudo raspi-config
次のような画面になるので、「3 Interface Options」を選択します。
再起動後、次のコマンドを入力すると、/dev/配下に有効化されたシリアルポートttyS0が表示されます。
pi@raspberrypi:~ $ ls -l /dev/ttyS*
crw-rw---- 1 root dialout 4, 64 Jul 20 15:39 /dev/ttyS0
ライブラリインストール
以下のライブラリは標準ライブラリではないためインストールする必要があります。下記のコマンドを実行してインストールしてください。
- pySerial
Pythonでシリアル通信を実現するライブラリ
$ pip install pyserial
E220-900T22S(JP)モジュールの動作説明
E220-900T22S(JP)モジュールにはM0ピンとM1ピンがあり、M0とM1のHigh/Low組み合わせで4つの動作モードを決定します。
M0 | M1 | mode |
---|---|---|
Low | Low | ノーマルモード(mode 0) |
High | Low | WOR送信モード(mode 1) |
Low | High | WOR受信モード(mode 2) |
High | High | コンフィグモード(mode 3) |
ノーマルモード(mode 0)
M0=Low, M1=Lowの状態です。
UARTから入力されたデータをLoRaで送信します。
LoRaで受信したデータをUARTから出力します。
WOR送信モード(mode 1)
M0=High, M1=Lowの状態です。
UARTから入力されたデータをLoRaで送信します。
LoRaで受信したデータをUARTから出力します。
LoRa送信時は、送信前にWOR受信モードのデバイスをウェイクアップさせるためのプリアンブル(preamble)が自動的に追加されます。
また、LoRa受信が可能でノーマルモードと同様の動作になります。
※ WOR (Wake on Radio): ワイヤレス電波により待機状態のモジュールを活性化する機能
WOR受信モード(mode 2)
M0=Low, M1=Highの状態です。
LoRa受信したデータをUARTから出力します。
LoRa送信は出来ません。
LoRa受信は、WOR送信モードで送信されたデータのみ受信可能です。
このモードでは、低消費電力での受信待ち受けを行えます。
データ受信時、AUXピンから通知信号が出力されるため、AUXピンを割り込み端子として外部MCUに接続することで、普段は外部MCUをスリープさせておき、データ受信のときだけウェイクアップさせる使い方が出来ます。
そのため、外部MCUとLoRaモジュールをあわせたトータルの消費電力も低く抑えることができるようになります。
コンフィグモード(mode 3)
M0=High, M1=Highの状態です。
UARTからコマンドを入力することでモジュールのパラメータを設定することができます。パラメータ設定時はbaudrate=9600, parity=8N1で行う必要があります。
コマンドの詳細はデータシートの7.1 コマンドフォーマットを参照してください。
サンプルコード利用方法
下記からサンプルコードをダウンロードできます。
サンプルコード_ダウンロード
/home/pi/にsample_codeフォルダを配置します。
コンフィグモード(mode 3)でのパラメータ設定
以下の通りスクリプトを実行し、コンフィグモード(mode 3)の状態にします。
mode3.pyの処理は、M0=High, M1=Highの状態にしています。
pi@raspberrypi:~ $ cd sample_code/config_code/
pi@raspberrypi:~/sample_code/config_code $ python3 mode3.py
設定ファイル(setting.ini)にモジュールのパラメータ設定値を記述します。それぞれの項目についての詳細はデータシートの7.2 レジスタ詳細を参照してください。また、設定ファイルはスクリプトと同じフォルダ内に配置して下さい。
setting.iniの設定例
[E220-900JP]
own_address=0
baud_rate=9600
bw=125
sf=9
subpacket_size=200
rssi_ambient_noise_flag=0
transmitting_power=13
own_channel=0
rssi_byte_flag=1
transmission_method_type=2
wor_cycle=3000
encryption_key=0
設定内容は次の通りとなっています。
- モジュールアドレスを0
- UARTのbaud rateを9600bps
- BW(帯域幅)を125kHz
- SF(拡散率)を9
- パケット長を200byte
- RSSI環境ノイズ機能を無効化
- 送信出力電力を13dBm
- 周波数チャネルを0
- RSSIバイトを有効化
- 送信方法を固定送信モード
- WORサイクルを3000ms
- 暗号化キーを0
以下の通りスクリプトを実行することで、設定ファイルの内容をモジュールへ反映できます。
スクリプトの処理としては、UARTでモジュールへ設定値書き込みリクエストコマンドを送り、そのレスポンスを受けています。
スクリプトの出力として、リクエスト/レスポンスそれぞれのコマンド内容が表示されます。コマンドの詳細はデータシートの7.1 コマンドフォーマットを参照してください。
pi@raspberrypi:~/sample_code/config_code $ python3 config_cui.py /dev/ttyS0 --apply
# Command Request
['0xc0', '0x00', '0x08', '0x00', '0x00', '0x70', '0x01', '0x00', '0xc5', '0x00', '0x00']
# Command Response
['0xc1', '0x00', '0x08', '0x00', '0x00', '0x70', '0x01', '0x00', '0xc5', '0x00', '0x00']
また、以下の通りスクリプトを実行することで、モジュールの現在のパラメータ設定状態を一覧出力できます。
スクリプトの処理としては、UARTでモジュールへ設定値読み出しリクエストコマンドを送り、そのレスポンスを受けています。
スクリプトの出力として、リクエスト/レスポンスそれぞれのコマンド内容が表示されます。また、そのレスポンス内容をもとに現在の設定一覧として具体的な表示をしています。
pi@raspberrypi:~/sample_code/config_code $ python3 config_cui.py /dev/ttyS0 --list
# Command Request
['0xc1', '0x00', '0x08']
# Command Response
['0xc1', '0x00', '0x08', '0x00', '0x00', '0x70', '0x01', '0x00', '0xc5', '0x00', '0x00']
現在の設定一覧
Address : 0x0000
UART : 9600bps
Air Data Rate : 1,758bps, SF: 9, BW:125kHz
Sub Packet Size : 200bytes
RSSI Ambient noise : Disable
Transmitting Power : 13dBm
CH : 0
Actual frequency : 920.6MHz
RSSI Byte : Enable
Transmission Method : Fixed transmission mode
WOR Cycle : 3000ms
また、WindowsやLinuxでのデスクトップ環境では以下のGUIスクリプトを実行することでも、CUIスクリプト同様にパラメータ設定を行うことができます。
pi@raspberrypi:~/sample_code/config_code $ python3 config_gui.pyw
スクリプトを実行すると設定ウィンドウが立ち上がります。起動時の画面は以下になります。
シリアルポートのコンボボックスからモジュールを接続しているポートを選択し、Openボタンをクリックします。
Getボタンが有効化されるのでクリックします。
パラメータの値を変更し、Set Paramボタンをクリックすることでモジュールに反映されます。
Param Resetボタンをクリックすると、パラメータの値がデフォルト値になります。
ノーマルモード(mode 0)でのデータ送受信
以下の通りスクリプトを実行し、ノーマルモード(mode 0)の状態にします。
mode0.pyの処理は、M0=Low, M1=Lowの状態にしています。
pi@raspberrypi:~/sample_code/config_code $ cd ../operation_code/
pi@raspberrypi:~/sample_code/operation_code $ python3 mode0.py
データ送信
以下の通りスクリプトを実行することで、ファイルからのリダイレクトでデータ送信できます。
設定ファイルで固定送信モードを設定した場合、送信スクリプトのオプションとして-f --target_address 0 --target_channel 0
のようにして宛先アドレスと宛先チャネルを指定する必要があります。
スクリプトの処理としては、送信データのhex dumpを表示し、”SENT”として送信完了の通知を表示します。
pi@raspberrypi:~/sample_code/operation_code $ python3 send.py /dev/ttyS0 -f --target_address 0 --target_channel 0 < ascii_data.txt
serial port:
/dev/ttyS0
send data hex dump:
00000000: 00 00 00 68 65 6C 6C 6F 20 77 6F 72 6C 64 21 ...hello world!
SENT
データ受信
以下の通りスクリプトを実行することで、受信データがターミナルに表示されます。
設定ファイルでRSSIバイトを有効化した場合、モジュールはデータ受信時、シリアルポートTXDを介して受信データを出力した後、続いてRSSIバイトを出力します。
受信スクリプトのオプションとして--rssi
を追加することで、出力されたRSSIの値を表示することが出来ます。
スクリプトの処理としては、受信データのhex dumpを表示し、--rssi
オプションが有る場合は、RSSI値を表示します。そして、”RECEIVED”として受信完了の通知を表示します。
pi@raspberrypi:~/sample_code/operation_code $ python receive.py /dev/ttyS0 --rssi
serial port:
/dev/ttyS0
receive waiting...
recv data hex dump:
00000000: 68 65 6C 6C 6F 20 77 6F 72 6C 64 21 92 hello world!.
RSSI: -110 dBm
RECEIVED