昨年末に、スイッチサイエンスで1つ1,980円のLoRaモジュール「E220-900T22S(JP)」が発売されました。
LoRa通信モジュール(E220-900T22S)用評価ボードwww.switch-science.com
とりあえずモジュール2つとアンテナ2つ(と送料)をポチって、5,390円でした。
これまで日本でLoRaを遊ぼうとすると、どうあがいても1万円コースみたいなところがあったと思うのですが、ようやく買って遊んでみてもいいかなと思える価格帯になってきましたね。それでもまあ、アリエクを見ると日本では当然使えないながらも600円そこらで転がってるので、こう、格差じみたものを感じます。というか、アリエクにE220-900T22SのJPじゃないやつがありますね。
さておき、E220-900T22S(JP)はCLEALINK社がE220-900T22Sの認証を通したバージョンということみたいです。CLEALINK社はけいはんなプラザにあるICTベンチャーとのこと。ありがてえ。
ためす
上の製品ページにサンプルとドキュメントがあるので、これを入手して試していきます。ドキュメントの想定環境がRaspberry Piだったので、それにならって2台分の配線を済ませます。
セットアップはやや我流。LoRaモジュールとはUART通信なので、シリアル通信環境を整えます。
$ sudo raspi-config nonint do_serial 2 $ sudo apt install python3-serial
ドキュメントではwiringpiも要求していますが、M0/M1ピンをHIGHかLOWにするスクリプトで使用されているだけだったので、後述のスクリプトで不要にできました。
片方で送信スクリプトを、もう片方で受信スクリプトを実行します。まずは受信側を実行して待ち受けます。
# 受信側 akkie@lora-2:~/sample_code/operation_code $ python3 receive.py /dev/ttyS0 --rssi serial port: /dev/ttyS0 receive waiting...
送信側は、標準入力にデータを食わせたらOKの模様。たぶん送りっぱなしだと思われるので、コマンドが成功したら「SENDED」が出力されて終わります。SENDED?SENTでゎ(震え声)。
# 送信側 akkie@lora-1:~/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! SENDED
SENDEDされたデータが受信側に届くと、次のようにデータが表示されます。RECEIVEDはあってたのでよかった。
00000000: 68 65 6C 6C 6F 20 77 6F 72 6C 64 21 F4 hello world!. RSSI: -12 dBm RECEIVED
受信側を家から持ち出してみる
送信側は、時刻を送信し続けるようにコマンドを変えて実行します。
akkie@lora-1:~/sample_code/operation_code $ watch -n 3 "date +"%H:%M:%S" | python3 send.py /dev/ttyS0 -f --target_address 0 --target_channel 0"
受信側は、OLEDディスプレイを付けて、プログラムの出力をディスプレイに表示できるように改造して、外に行ってどのくらい受信できるかを試しました。集合玄関のポストあたりまで届いたら御の字かなーと思っていましたが、家を出ても、1ブロック離れても、ふつうに受信し続けてくれました。途切れるところまでは離れるには寒くてかつこの見た目なので、家の周りが限界でした……。見栄えを整えたい。
受信をPicoに移植する
UART通信なので、受信側をPicoに移植してみました。OLEDもブレッドボードに実装して見栄えをもう少しなんとかしつつ、Nano HAT Hacker経由で接続するようにして、これをそのままuHAT Porter Picoにドン。Nano HAT Hackerを差し替えたらRaspberry PiとPicoを行き来可能です。我ながら便利な板を作った。
コードは、pyserialとbusio.UARTがほぼ同じ感じで済んだので、書換量は少なめで済みました。uHAT Porter Pico向けのピン配置読み替えコードがあるので、ふつうのPicoで試すときは適宜読み替えてください。
送信側も移植できるはずですが、おっさんの冬休みは短くて、時間切れになりました……。次の週末とかで。
モード設定のスクリプト
公式のスクリプトはモードごとにスクリプトファイルがあって、ピンの出力をHIGHかLOWにするだけで、なぜかwiringpiが使われていた*1、RPi.GPIOで書き直しつつ、1スクリプトで設定可能にして、現在の状態も取得できるようにしておきました。便利。
まとめ
というわけで、日本対応の格安LoRaモジュール「E220-900T22S(JP)」をつかって、まずはサンプルを動かして遊んでみたり、一部Picoで動かしたりしてみました。
実際に使おうとするとどこが良いかと考えると悩ましいですが、やはりベターなところだと郵便ポストのやつとかなんでしょうか。電池で動かしたらどのくらい持たせられるかとかは課題っぽそうです。
あとは見栄えを整えたいです。本当はHAT形状のモジュールもあるっぽかったのですが、汎用性を取ってふつうのモジュールを選んだので、OLED含めてユニバーサル基板でそれっぽいのを作るか、基板を起こしても楽しいかも?しれません。
通信距離を実家で当てはめると、どうも実家から妹の家くらいまでは届きそうなので、次帰省したら試してみたいですね(?)。
*1:Gordonがメンテをやめる宣言をした後、PimoroniのPhilはじめ有志がメンテを引き継いでいますが、そこまで活発ではない模様?活発になるほど変化が激しいものでもないですが……