#MQTT-SNゲートウェイを動かしてみよう#
MQTT-SNの通信では MQTT-SNメッセージを MQTTメッセージ に変換してブローカーと仲介するMQTT-SNゲートウェイが必要となります。 MQTT-SNクライアント(UDP)とMQTTブローカー(TCP/IP)は直接通信することはできません。
その2では、MQTT-SNゲートウェイを作成してクライアントとブローカー間の通信を行います。
さらに、シェアードメモリ上のリングバッファに出力されている通信ログをモニターしてみます。
RaspberryPiなどHDDのないマシンでは、ファイルをFlashメモリに作成するので、メモリの寿命を心配してSRAM上のリングバッファに書き出しています。
##用意するもの##
- クライアント用LinuxマシンとC++開発環境
- ゲートウェイ用LinuxマシンとC++開発環境
- インターネットルーター DHCPサーバー付
##ゲートウェイの作成##
step1. ソースコードの準備
step1. ホームディレクトリーで、Githubからライブラリーをダウンロードします。
$ git clone https://github.com/ty4tw/AsyncMQTT-SN.git
AsyncMQTT-SN/AsyncGateway/srcにゲートウェイのソースコードとAsyncMQTT-SN/AsyncGateway/src/libに必要なライブラリーのソースコードが入っています。
step2. ソースコードをコンパイルします。
$ cd AsyncMQTT-SN/AsyncGateway
$ make DEFS=-DNETWORK_UDP
コンパイルエラーがなければゲートウェイをコピーします。
$ make install
実行モジュール TomyGateway がホームディレクトリーにコピーされます。
step3. ゲートウェイのコンフィグレーションファイルを作成します。
コンフィグレーションファイル /usr/local/etc/tomygateway/config/param.conf を作成します。
BrokerName=test.mosquitto.org
BrokerPortNo=1883
SecureConnection=NO
#BrokerPortNo=8883
#SecureConnection=YES
StableNetwork=YES
GatewayID=1
GatewayName=TomyGateway-01
KeepAlive=900
#LoginID=
#Password=
SerialDevice=/dev/ttyUSB0
BroadcastIP=225.1.1.1
GatewayPortNo=2000
BroadcastPortNo=1883
BrokerName で使用するプローカーのドメイン名、BrokerPortNo でブローカーのポートを指定します。
ブローカーとTLSで接続する場合は BrokerPortNo=8883 SecureConnection=YES に変更します。
StableConnection はG3モデムを使用する場合などレスポンスが遅いか不安定な場合 NO にすることで CONNECTの処理が変わります。NOにするとCONNECTに時間がかかります。
step5. リングバッファを使用するために必要なキーファイルを作成します。
次の3つの空ファイルをキーファイルをとして作成します。
- /usr/local/etc/tomygateway/config/rbmutex.key
- /usr/local/etc/tomygateway/config/ringbuffer.key
- /usr/local/etc/tomygateway/config/semaphore.key
step6. ゲートウェイを起動します。
ただし、クライアントとは異なるマシンで実行する必要があります。
$ ./TomyGateway
異常終了しなければ、たぶん動いています。 動いていることを確認するために通信ログを見てみましょう。
##ログモニターの作成##
step1. ログモニターのコンパイル。
$ cd AsyncMQTT-SN/LogMonitor
$ make
コンパイルエラーがなければログモニターをコピーします。
$ make install
実行モジュール LogMonitor がホームディレクトリーにコピーされます。
step2. ログモニターの起動。
'$ sudo ./LogMonitor
ログが表示されます。
ここで、Linuxクライアントを起動してください。 クライアント・ゲートウェイ・プローカー間で行われているメッセージ交換内容が表示されているはずです。
つぎは、その3 でArduino用のクライアントを作成し、クライアント間で通信して、LEDを点滅させてみます。