Products

E220-900T22S(JP) 多機能WOR対応HATの使用方法

概要

このチュートリアルでは、LoRa子機側として多機能WOR対応HATを使用し、LoRa親機側としてシンプルなLoRaモジュールHATを使用して、WOR機能を利用したRaspberry Piの起動デモを紹介します。
LoRa子機側はWOR機能を利用するため、多機能WOR対応HAT裏面のXHコネクタから5V電源を給電してください。
LoRa親機側はRaspberry PiへのUSB給電を行ってください。

  • 多機能WOR対応HAT
    RPi 3/4用

    RPi zero用

  • シンプルなLoRaモジュールHAT
    RPi 3/4用

    RPi zero用

サンプルコード実行環境の構築

GPIOヘッダーのUARTピンでUARTを使用する

デフォルトではRaspberry Piはシリアルポートが無効になっているため、設定を変更します。
ターミナルから、次のコマンドを入力します。

pi@raspberrypi:~ $ sudo raspi-config

次のような画面になるので、「3 Interface Options」を選択します。

次に、「I6 Serial Port」を選択します。

「No」を選択します。

「Yes」を選択します。

すると次の画面になり、シリアルポートが有効になります。

再起動後、次のコマンドを入力すると、/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

サンプルコード利用方法

下記からサンプルコードをダウンロードできます。
サンプルコード_ダウンロード
/home/pi/にsample_codeフォルダを配置します。

WOR機能を利用したRaspberry Piの起動デモ

LoRa親機側からWOR信号を送ることによって、LoRa子機側のシャットダウン状態のRPiを再通電によって起動させます。
LoRa親機側、LoRa子機側ともに/home/pi/にsample_codeフォルダを配置しておきます。

LoRa子機側 準備
下記の通り実行してモジュールのコンフィグを行った後、cronにより起動時にスクリプトが実行されるようにしてパワーオフします。
起動時スクリプトtempdata_send.shでの処理は、ノーマルモード(mode 0)に移行し、CPU温度を測定した後、その値を親機側にLoRa送信しています。その後、WOR受信モード(mode 2)に移行し、Raspberry Piをパワーオフします。

pi@raspberrypi:~ $ raspi-gpio set 4 op pn dh
pi@raspberrypi:~ $ cd sample_code/config_code/
pi@raspberrypi:~/sample_code/config_code $ python3 mode3.py 
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']
pi@raspberrypi:~/sample_code/config_code $ python3 mode2.py 
pi@raspberrypi:~/sample_code/config_code $ cd ..
pi@raspberrypi:~/sample_code $ crontab crontab-data
pi@raspberrypi:~/sample_code $ crontab -l
@reboot bash /home/pi/sample_code/tempdata_send.sh
pi@raspberrypi:~/sample_code $ sudo poweroff

LoRa親機側 WOR送信
下記の通り、send.pyを実行して親機側からWOR信号を送ることで、子機側のパワーオフ状態のRPiが再通電によって起動します。
receive.pyを実行して受信待ちしておくと、起動した子機側から送られてくるCPU温度を受信します。

pi@raspberrypi:~ $ cd sample_code/config_code/
pi@raspberrypi:~/sample_code/config_code $ python3 mode3.py 
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']
pi@raspberrypi:~/sample_code/config_code $ cd ../operation_code/
pi@raspberrypi:~/sample_code/operation_code $ python3 mode1.py 
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
pi@raspberrypi:~/sample_code/operation_code $ python3 receive.py /dev/ttyS0 --rssi
serial port:
/dev/ttyS0
receive waiting...
recv data hex dump:
00000000: 74 65 6D 70 3D 34 33 2E  33 27 43 0A E9           temp=43.3'C..
RSSI: -72 dBm
RECEIVED
TOP