M5StackをMQTTクライアントにする
MQTT v3.1.1対応
MQTT v3.1.1ではクライアントIDの長さは1から23文字
デフォルトでローカルの接続しか許さない設定になっている
サービス起動のときに設定ファイルをMOSQUITTO_DIRに探しにいく
インストール時に設定されている
Windowsの場合はC:\Program Files\mosquitto
起動時には設定ファイルを明示的に指定する必要がある
code:console
mosquitto.exe -c C:\Program Files\mosquitto\mosquitto.conf -v
# Git for Windowsの bash の場合(スペースがあるフォルダの指定が面倒)
mosquitto.exe -c C:/Program\ Files\mosquitto\mosquitto.conf -v
設定ファイル
とりあえず接続を試す
code:mosquitto.conf
# 外部からMQTTで接続させる設定
listener 1883
protocol mqtt
# 認証なしに接続を許可する
allow_anonymous true
code:console
New client connected from 192.168.11.19:53467 as atom-mqtt-24a160474ec4 (p2, c1, k15).
ユーザ・パスワードを設定する
パスワードファイルの生成
code:console
cd c:\Program Files\mosquitto
mosquitto_passwd -b pwfile user password
パスワードファイルの指定
code:mosquitto.conf
# 外部からMQTTで接続させる設定
listener 1883
protocol mqtt
# ユーザ・パスワードで認証する
allow_anonymous false
password_file ./pwfile
code:client.ino
PubSubClient client;
const char CLIENT_ID[] = "clientid"; # 空文字列を渡すと自動的にauto- + UUIDが振られる
const char USER[] = "user";
const char PASSWORD[] = "password"
...
client.connect(CLIENT_ID, USER, PASSWORD);
code:console
New client connected from 192.168.11.19:57618 as atom-mqtt-24a160474ec4 (p2, c1, k15, u'user').
Client <unknown> disconnected due to protocol error.で接続できない
ググると上のallow_annomymousとかlistenerの設定がという話があるが,解決しない
原因はクライアントIDにASCII文字以外のものが入っていたせいだった
クライアントIDは空にすると自動的に振ってくれるので,設定しなくても接続はできる
JSONを扱う